关于C#foreach退出循环问题!

主窗体frmMain用tabControl加载窗体,实现像浏览器一样的多页面效果(暂时不想用DockPanel),已经定义了showForm函数来加载窗体,现在是打开窗体前的判断是否重复打开遇到点问题:
1)假设主窗体为frmMain,子窗体为f1,f2
2)这判断只对先打开的窗体有用,如先打f1,则f1可以判断得了,f2就不行,先打开f2也是如此,请教大家该怎么改这代码?刚开始接触C#,不怎么熟悉!

frmEmployerSales f = new frmEmployerSales();

if (tabControl1.TabCount > 0)
{
foreach (TabPage page in tabControl1.TabPages)

if (f.Text != page.Text)
{
f.TopLevel = false;
f.FormBorderStyle = FormBorderStyle.None;
showForm(f.Text, f.panel1);
f.Show();
break;
}
else
{
MessageBox.Show("该窗体已经打开!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
break;
}
}
else
{
f.TopLevel = false;
f.FormBorderStyle = FormBorderStyle.None;
showForm(f.Text, f.panel1);
f.Show();

}

请参考

private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
AddForm(f);
}

private void button2_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
AddForm(f);
}

private void AddForm(Form f)
{
bool hasForm = false;
if (tabControl1.TabCount > 0)
{
foreach (TabPage page in tabControl1.TabPages)
{
if (f.Text == page.Text)
{
hasForm = true;
MessageBox.Show("该窗体已经打开!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
break;
}
}
}

if (!hasForm)
{
f.TopLevel = false;
f.FormBorderStyle = FormBorderStyle.None;
TabPage tab = new TabPage();

tab.Controls.Add(f);
tab.Text = f.Text;
this.tabControl1.Controls.Add(tab);
f.Show();
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-12
frmEmployerSales f = new frmEmployerSales();
创建对象f, 那么每次初始化的f.Text应该是相同的,所以应针对不同的窗体(f1,f2)初始化不同的Text 然后再进行判断。

可修改类frmEmployerSales的构造函数本回答被网友采纳
第2个回答  2011-08-12
学习下。
第3个回答  2011-08-12
集合也可以</p>

C#中foreach请大家帮忙讲一下!谢谢!
可以在 foreach 块的任何点使用 break 关键字跳出循环,或使用 continue 关键字直接进入循环的下一轮迭代。foreach 循环还可以通过 goto、return 或 throw 语句退出。下面是一个实例:class ForEachTest { static void Main(string[] args){ int[] fibarray = new int[] { 0, 1, 2, 3, 5,...

c#中当嵌套多个循环时如何让某一个if直接跳出整个循环
用一个变量控制.bool needOut = false;foreach(var a in aitems){ if(needOut){ break;} foreach(var b in bitems){ if(b=="ok"){ needOut = true;break;} } }

有哪位好心人帮我解释一下在C#中出现的for,foreach,do等循环语句,怎么...
已经在Visual Basic 语言中存在了很久的一个功能是,通过使用For Each 语句收集枚举。C#通过foreach 语句,也有一个用来收集枚举的命令:foreach(表达式中的类型标识符) 内含语句 循环变量由类型和标识符声明,且表达式与收集相对应。循环变量代表循环正在为之运行的收集元素。3.while 当你想执行一个内含...

c#初学,关于一个foreach循环错误,谢谢!
你定义的是二维数组,不能用foreach循环的,一般是用这种 int[,] values = { { 1, 2 }, { 3, 4 }, { 5, 6 } };for (int i = 0; i < values.GetLength(0); i++){ for (int j = 0; j < values.GetLength(1); j++) Console.Write(values[i, j] + " "); ...

C#中foreach基础使用方法[1]
string temp = name Text; \/\/ 从TextBox中读出数据 foreach (LCourse cou in Data myCourse) \/\/ 在List<LCourse>中遍历 { if (cou name == temp) \/\/ 判断cou的名字匹配 { Data myCourse Remove(cou); \/\/ 匹配的即为要删除的 从列表中去除 break; \/\/ 跳出循环 } } 很容易就想到...

【C#】干掉for循环
在里面 引进了foreach循环 它与for循环本质是相同的 由于在foreach循环中 省去了指标i(常常 只用来取第i个项 别无他用) 很多人欣然接受了foreach循环 毕竟没有夺走for循环 它还在!编程语言一直在进化 先后经历了 语言 过程式语言 面向对象语言 总体来说 越来越高级 越来越抽象 当代程序员可以不...

C#使用foreach循环的问题
int counter=0;int x;int y;foreach (string stringItem in dataString){ x=counter\/dataString.GetLength(0);\/\/除以行数就是X坐标 y=counter%dataString.GetLength(1);\/\/对列数取余就是y坐标 counter++;}

有没有大佬求教下C#foreach循环的问题谢谢啦!
软糖来回答吧。拆分成几句话,条件判断一下就好了。var x = Class.GetDrop(this.Level, sl, maxsl);if (x != null) { foreach (Class current in x){ } }

c#foreach的问题
foreach和for循环类似的,使用foreach的好处是,当遍历数组时,因为有些语言的起始位置是从0开始的,而有些语言的起始位置却使从1开始,当语言支持foreach语法时,使用了foreach,它就自动帮你从数组第一位开始遍历,而不用你管第一位的下标是0还是1。而使用for来遍历的话,你还要确定该语言对数组的...

C# 循环遍历一个字符串的每个字符,遇见逗号退出
int count = 0; \/\/统计数量 for (int i = 0; i < a.Length; i++){ string temp = a.Substring(0, 1);if (temp.Equals("_")){ count++;}else if(temp.Equals(",")){ break; \/\/遇见逗号退出循环(需要遇见逗号退出吗)} } Console.WriteLine("共找到"+count+"个下划线")...

相似回答