1

我创建了一个简单的 Windows 窗体,单击按钮后它会作为属性窗口打开,现在您知道,属性窗口应该只打开一次,由于我是初学者,我依赖于您的建议:如何我让这个窗口只出现一次吗?这是小代码片段(这不是我的主类 - 如果需要在按钮方法上应用它,我也可以在那里做)

public partial class EinstellungenFenster : Form
{
    public EinstellungenFenster()
    {
        InitializeComponent();
        Text = "Outlook Add-in Einstellungen";

    }
}

这里是我使用的按钮方法:

        private void FensterOeffnen(object sender, IRibbonControl control, bool pressed)
    {
        EinstellungenFenster fenster = new EinstellungenFenster();
        fenster.Show();

    }
4

3 回答 3

8

而不是fenster.Show()use fenster.ShowDialog(),这将使表单成为模态,这意味着在关闭之前不能使用其他父对话框

于 2013-04-11T08:36:29.357 回答
3

如果您想阻止用户在窗口打开时执行任何其他操作,即强制他们在继续之前关闭它,请调用ShowDialog()而不是Show(). 否则,我的建议是维护一个私有字段并检测表单是否已在单击时创建/显示,然后将表单闪烁以引起用户的注意。

于 2013-04-11T08:38:01.470 回答
1

假设如果我们从菜单中调用一个表单,点击 MDI 表单,那么我们需要在顶层创建该表单的实例声明,如下所示:

    Form1 fm = null;

然后我们需要定义菜单点击事件来调用Form1,如下:

private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (fm == null|| fm.Text=="")
    {
        fm = new Form1();              
        fm.MdiParent = this;
        fm.Dock = DockStyle.Fill;
        fm.Show();
    }
    else if (CheckOpened(fm.Text))
    {
        fm.WindowState = FormWindowState.Normal;
        fm.Dock = DockStyle.Fill;
        fm.Show();
        fm.Focus();               
    }                   
}

为检查 Form1 是否已打开而定义的 CheckOpened:

private bool CheckOpened(string name)
    {
        FormCollection fc = Application.OpenForms;

        foreach (Form frm in fc)
        {
            if (frm.Text == name)
            {
                return true; 
            }
        }
        return false;
    }

希望这将解决创建多个表单实例的问题,如果它已经打开或最小化,则在菜单单击时将焦点集中到 Form1 上。

于 2013-04-11T09:12:56.503 回答