我有一个表单"fm",这是一个简单的信息窗口,每隔10分钟(fm.Show();)打开一次.
我如何能够每隔10分钟检查一下"fm"形式是否打开,如果它打开则将其关闭并再次打开!
现在表单fm总是被创建,form fm = new form();
所以当我尝试检查表单是否打开时,它将始终为false并打开一个新窗口,即使之前有一个表单!
我需要一个工具给它一个唯一的身份,然后检查这个具有唯一身份的表单是否被打开!
我不想只更新表单上的数据(fm),因为我有一个复杂的按钮信息.
表格名称是 "UpdateWindow"
解决使用以下内容:
__PRE__
Sas*_*cha 85
也许这有助于:
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
//iterate through
if (frm.Name == "YourFormName")
{
bFormNameOpen = true;
}
}
Run Code Online (Sandbox Code Playgroud)
foreach中的一些代码可以检测特定的形式,并且可以完成.虽然未经测试.
在http://bytes.com/topic/c-sharp/answers/591308-iterating-all-open-forms上找到
小智 39
我知道我迟到了......但是对于那些好奇的人......这是另一种方式
if (Application.OpenForms.OfType<UpdateWindow>().Count() == 1)
Application.OpenForms.OfType<UpdateWindow>().First().Close();
UpdateWindow frm = new UpdateWindow()
frm.Show();
Run Code Online (Sandbox Code Playgroud)
Pra*_* VR 14
假设我们从菜单单击MDI表单调用表单,那么我们需要在顶层创建该表单的实例声明,如下所示:
Form1 fm = null;
Run Code Online (Sandbox Code Playgroud)
然后我们需要定义菜单点击事件来调用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();
}
}
Run Code Online (Sandbox Code Playgroud)
已定义检查Form1 的CheckOpened是否已打开:
private bool CheckOpened(string name)
{
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Text == name)
{
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
希望这将解决创建表单的多个实例的问题,如果已经打开或最小化,也可以在菜单上单击Form1.
def*_*ale 10
我不确定我理解这个陈述.希望这可以帮助.如果您只想使用此表单的一个实例进行操作,则应阻止关闭用户的Form.Dispose调用.为此,您可以处理子表单的Closing事件.
private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)
然后你不需要创建新的实例frm.只需在实例上调用Show方法即可.
您可以检查Form.Visible属性以检查表单目前是否打开.
private ChildForm form = new ChildForm();
private void ReopenChildForm()
{
if(form.Visible)
{
form.Hide();
}
//Update form information
form.Show();
}
Run Code Online (Sandbox Code Playgroud)
实际上,我仍然不明白你为什么不只是更新表格上的数据.
小智 6
Form fc = Application.OpenForms["UpdateWindow"];
if (fc != null)
fc.Close();
fc.Show();
Run Code Online (Sandbox Code Playgroud)