如何在表单1冻结表单2上运行2个没有消息框的表单

时间:2014-12-10 07:55:48

标签: c# .net forms

在我的第一张表格上,我有一个开始第二张表格的按钮。第二种形式启动RDP。 Everyting工作正常但是当我在表单1上收到messagebox-message时,我无法访问我的第二个表单,直到我关闭了消息框。我怎样才能将这两种形式相互分开?

4 个答案:

答案 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