在我的第一张表格上,我有一个开始第二张表格的按钮。第二种形式启动RDP。 Everyting工作正常但是当我在表单1上收到messagebox-message时,我无法访问我的第二个表单,直到我关闭了消息框。我怎样才能将这两种形式相互分开?
答案 0 :(得分: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());
}
答案 1 :(得分:0)
您应该使用Show()
方法而不是ShowDialog()
启动表单。
答案 2 :(得分:0)
也许您正在使用ShowDialog()
而不是Show()
,它会将您的表单显示为模式对话框。
答案 3 :(得分:0)
您可以调用本机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。