c#运行一个Form然后用showDialog在它上面显示另一个表单?

时间:2010-12-06 13:21:06

标签: c# winforms showdialog

我想运行我的表单(禁用所有控件) 在它上面会有另一个用户名和密码的表格作为showDialog运行! 没有登录,人们将无法进入主表单!

 private void Form1_Load(object sender, EventArgs e)
        {
            this.Show();
            Form2 f2 = new Form2 ();
            f2.ShowDialog();
        }

我尝试了上面的代码并且它不能正常工作!

我如何以我需要的方式实现它?

欢呼声

4 个答案:

答案 0 :(得分:2)

目前尚不清楚问题/问题是什么,但您可以尝试确保传递父母形式,即

using(var childForm = new MySpecialLoginForm(...)) {
    childForm.ShowDialog(this);
}

答案 1 :(得分:2)

来自父表格:

childForm.ShowDialog(this);

这将使子表格成为父表单的模态。就位置而言,表格中有一个属性(您希望在子表单上设置),告诉它从哪里开始(中心屏幕,中心父级等)

System.Windows.Forms.Form实现了IWin32Window,这就是它工作的原因。

答案 2 :(得分:0)

... ERM

DialogResult result = mySecondForm.ShowDialog()

这将禁用父窗体,直到关闭此窗体。 DialogResult将是一个枚举值,类似于OK / Cancel / YesNo等

答案 3 :(得分:0)

如果我想做某事,我通常会使用以下模式。 Form完全加载后:

public partial class BaseForm : Form
{
    public event EventHandler Loaded;

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        Application.Idle += OnLoaded;
    }

    protected void OnLoaded(object sender, EventArgs e)
    {
        Application.Idle -= OnLoaded;

        if (Loaded != null)
        {
            Loaded(sender, e);
        }
    }
}

如果我从BaseForm派生我的主表单,我有一个Loaded事件,在您的情况下,我将使用如下。

static class Program
{

    [STAThread]
    static void Main()
    {
        var mainForm = new MainForm();
        mainForm.Loaded += (sender, e) => { new LoginDialog().ShowDialog(mainForm); };

        Application.Run(mainForm);
    }
}