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