2014-12-10 6 views
0

В моей первой форме у меня есть кнопка, которая запускает вторую форму. Вторая форма запускает RDP. everyting работает нормально, но когда я получаю сообщение-сообщение в форме 1, я не могу получить вторую форму до закрытия ящика сообщений. Как я могу запустить 2 формы отдельно друг от друга?Как запустить 2 формы без ящика сообщений в форме 1 для замораживания формы 2

+1

MessageBoxes предназначены для того, чтобы быть модальными по своей природе. Если вы имеете в виду, что ваш RDP не запускается до тех пор, пока вы не закроете окно сообщения, вам необходимо изучить его с помощью потока – Sayse

+0

Невозможно выполнить, если вы не перевернете свой собственный почтовый ящик. Ящики сообщений являются модальными для приложения. – Jcl

+0

RDP работает нормально. Проблема в том, что когда я получаю (через некоторое время) сообщение в форме 1, обе формы замораживаются. Я хочу, чтобы эта форма 1 зависала, но я должен иметь возможность использовать форму 2 и окно сообщений в форме 1 одновременно – maartenvdv

ответ

0

Вы должны начать формы с помощью метода Show() вместо ShowDialog().

+0

Я использую метод Show(). Когда отображается вторая форма, я могу получить ее, но мои пользователи должны переключаться между двумя формами. При выполнении некоторых новых действий в форме 1 они могут получить сообщение, а затем они не могут открыть вторую форму до закрытия окна сообщений – maartenvdv

+0

, потому что отображаемые сообщения являются диалоговыми окнами ... –

+0

Я не могу изменить полученные сообщения. .. – maartenvdv

0

Возможно, вы используете ShowDialog() вместо Show(), что отображает вашу форму как способный Диалог.

+0

Я использую метод Show(). Когда отображается вторая форма, я могу получить ее, но мои пользователи должны переключаться между двумя формами. При выполнении некоторых новых действий в форме 1 они могут получить сообщение, а затем они не могут открыть вторую форму до закрытия окна сообщений – maartenvdv

1

Если вы хотите показать немодельное (немодальное) сообщение пользователю, вы должны создать форму и использовать ее метод Показать вместо того, чтобы показывать окно сообщения. Следующий простой метод создает и показывает форму, которая выглядит как окно сообщения:

public static Form ShowNonModalMessageBox(string title, string text) 
{ 
    Form form = new Form(); 
    form.FormBorderStyle = FormBorderStyle.FixedDialog; 
    form.MinimizeBox = false; 
    form.MaximizeBox = false; 
    form.Size = new Size(200, 100); 
    form.StartPosition = FormStartPosition.CenterScreen; 
    form.Text = title; 

    form.SuspendLayout(); 

    Label label = new Label(); 
    label.Text = text; 
    label.Dock = DockStyle.Fill; 
    form.Controls.Add(label); 

    Button okButton = new Button(); 
    okButton.Text = "OK"; 
    okButton.Dock = DockStyle.Bottom; 
    okButton.Click += delegate(object sender, EventArgs e) 
    { 
     form.DialogResult = DialogResult.OK; 
     form.Close(); 
    }; 
    form.Controls.Add(okButton); 

    form.ResumeLayout(); 

    form.Show(); 
    return form; 
} 

Вы можете использовать этот метод, как это, чтобы показать немодальное сообщение пользователя:

Form messageBox = ShowNonModalMessageBox("Title", "This is the message."); 
messageBox.FormClosed += messageBox_FormClosed; 

private void messageBox_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    MessageBox.Show("Form closed with result: " + ((Form)sender).DialogResult.ToString()); 
} 
+0

Спасибо за ваш ответ, но 1) Форма 1 все еще нуждается в замораживании и 2) (сильно измененный) ящики сообщений от другого разработчика, и я не могу их изменить – maartenvdv

0

You можно назвать родной MessageBox:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
public static extern int MessageBoxW(IntPtr hWnd, String lpText, String lpCaption, uint uType); 

Первым параметром является родительской ручкой, если вы передаете IntPtr.Zero в MessageBox будет родителем-менее. Доступен пример https://github.com/mgigirey/MessageBoxWrapper/tree/master.

Смежные вопросы