只允许打开一次窗口
我已经创建了一个简单的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();
}
,而不是fenster.Show()
使用fenster.ShowDialog()
,这可以使表单模式,这意味着没有其他家长的对话框可以使用,直到它被关闭
非常感谢你 – gbbb 2013-04-11 08:43:46
这应得到更多upvotes!打开单个表单实例的最简单的解决方案。 – 2017-11-02 12:51:05
如果你想从做其他事情而窗口阻止用户即,forcin在他们继续前,让他们关闭它,请致电ShowDialog()
而不是Show()
。否则,我的建议是维护一个私人领域,并检测该表单是否已经在点击时创建/显示,并且只是将表单呈现给用户以引起用户注意。
假设,如果我们呼吁从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();
}
}
的CheckOpened定义检查Form1中已经打开与否:
private bool CheckOpened(string name)
{
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Text == name)
{
return true;
}
}
return false;
}
希望这将解决创建窗体的多个实例的问题,如果它已被打开或最小化,也将焦点放在Form1的菜单上。
http://*.com/questions/1403600/how-to-avoid-multiple-instances-of-windows-form-in-c-sharp – 2013-04-11 08:36:52