只允许打开一次窗口

时间:2013-04-11 08:35:19

标签: c# winforms button properties window

我创建了一个简单的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();

    }

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

如果您想阻止用户在窗口启动时执行任何其他操作,即在移动之前强制他们关闭它,请拨打ShowDialog()而不是Show()。否则,我的建议是维护一个私有字段并检测表单是否已在点击时创建/显示,只需将表单刷新即可引起用户注意。

答案 2 :(得分: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上。