for (int i=0;i<Application.OpenForms.Count;i++)
{
//MessageBox.Show(Application.OpenForms[i].Name.ToString());
if(Application.OpenForms[i].Name =="Jiben")
{
MessageBox.Show(Application.OpenForms[i].Name.ToString());
Application.OpenForms[i].Close();
}
}
我想把基本form 关闭 打开应用程序后,第一次可以关闭,在调用的时候就 不起做作用了,什么原因?大家帮我分析下
{
//MessageBox.Show(Application.OpenForms[i].Name.ToString());
if(Application.OpenForms[i].Name =="Jiben")
{
MessageBox.Show(Application.OpenForms[i].Name.ToString());
Application.OpenForms[i].Close();
}
}
我想把基本form 关闭 打开应用程序后,第一次可以关闭,在调用的时候就 不起做作用了,什么原因?大家帮我分析下
foreach (Form f1 in f)//遍历子窗体
{
if (f1!=null && f1 is Form2)//如果是Form2
f1.Close();
}
if(f is Form2){
f.close();
break;
}
}
{
//MessageBox.Show(Application.OpenForms[i].Text.ToString());
if(Application.OpenForms[i].Text.ToString()=="Jiben")
{
MessageBox.Show(Application.OpenForms[i].Text.ToString());
Application.OpenForms[i].Close();
}
}
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Text.ToString() == "Form2")
{
Application.OpenForms[i].Close();
textBox1.Text = Application.OpenForms.Count.ToString();
}
}
}
实测好用其中textBox1记录的是打开窗体的数量,监视程序运行是否正常的
foreach(Form f in Application.OpenForms)
{
if(f is Form2){
f.close();
break;
}
}
不知道你是怎么操作的,我测试的是一个窗体放了4个按钮,打开4个窗体,主窗体还有一个关闭按钮,点击关闭按钮关闭名称为Form2的窗体,测试好用。
比如你打开两个子窗体,跟主窗体共Application.OpenForms=3个,i=0;
关闭一个后,Application.OpenForms=2, i++, for循环不满足条件,退出。这种问题比较常见的,在 遍历集合的时候增加或删除集合的元素,要特别小心。
while(true)
{
int i = 0;
for (; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i] is Form2)
{
Application.OpenForms[i].Close();
break;
}
}
if( i==Application.OpenForms.Count) break;
}
我在 窗体的 关闭事件里加了关线程的方法,因为我要重新初始化我的线程,必须先关闭原来的线程,
{
if(Application.OpenForms[i].Name = "Jiben")
{
MessageBox.Show(Application.OpenForms[i].Name.ToString());
Application.OpenForms[i].Close();
break;\\加个跳出循环看看
}
}
{
if(Application.OpenForms[i].Name = "Jiben")
{
MessageBox.Show(Application.OpenForms[i].Name.ToString());
Application.OpenForms[i].Close();
}
}