0

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

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

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

我怎样才能以我需要的方式实现它?

干杯

4

4 回答 4

2

目前尚不清楚问题/问题是什么,但您可以尝试确保您通过父表单,即

using(var childForm = new MySpecialLoginForm(...)) {
    childForm.ShowDialog(this);
}
于 2010-12-06T13:25:11.730 回答
2

从父窗体:

childForm.ShowDialog(this);

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

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

于 2010-12-06T13:26:41.447 回答
0

嗯...

DialogResult result = mySecondForm.ShowDialog()

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

于 2010-12-06T13:24:58.713 回答
0

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

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);
    }
}
于 2010-12-06T13:34:08.033 回答