如何将foreach用于面板中的文本框
本文关键字:文本 foreach 用于 | 更新日期: 2023-09-27 18:31:54
我在设计时创建了 9 个文本框。通过单击列表框(在设计时创建的 inglist),我选择一个项目,IfThisExist(CmpStr) 函数验证我是否选择了这个。当我调试时,CmpStr 的值被传递给 txt。文本,但不显示在屏幕上。
string CmpString;
bool SelectedExist;
CmpSt r = Convert.ToString(inglist.Items[inglist.SelectedIndex]);
SelectedExist = IfThisExist(CmpStr);
if (inglist.SelectedIndex > -1 && rows > 0 && SelectedExist == false)
{
foreach (Control txt in mypanel.Controls)
{
if (txt is TextBox && txt.Text == "" )
{
txt.Text = CmpStr;
break;
}
else if (txt is TextBox && txt.Text == CmpStr)
break;
}
如果我用下面的方法做同样的事情,它可以工作。
//for (int j = 0; j < rows; ++j)
//{
// switch (j + 1)
//{
// case 1:
// if (textBox1.Text == "" && textBox1.Text!= CmpStr)
// {
// textBox1.Text = CmpStr;
// passed = true;
// }
// break;
.....
可能是什么原因?
抱歉打扰,foreach 循环从较大的 tabindex 开始到较低的选项卡索引。由于我隐藏了未使用的文本框,这是接收 CmpStr 值的更大的选项卡索引文本框。
if (inglist.SelectedIndex > -1 && rows > 0 && SelectedExist == false)
{
foreach (Control txt in mypanel.Controls.Cast<Control>().OrderBy(c => c.TabIndex))
{
if (txt is TextBox && txt.Text == "")
{
txt.Text = CmpStr;
break;
}
else if (txt is TextBox && txt.Text == CmpStr)
break;
}
}
这很有效。
我认为你的问题可以改进,但如果我理解正确,你想通过你的教科进行迭代。
编辑(以适应以下评论):
另外,缺少一些代码,因为我不知道您的
switch
支柱,您的案例(j+1)
,我不知道代码的上下文。
忽略你的switch语句,我建议你的代码看起来像这样:
string CmpString;
Boolean SelectedExist;
CmpStr=Convert.ToString(inglist.Items[inglist.SelectedIndex]);
SelectedExist = IfThisExist(CmpStr);
if (inglist.SelectedIndex > -1 && rows > 0 && SelectedExist == false)
{
var sortedTextboxes = mypanel.Controls
.OfType<TextBox>() // get all textboxes controls
.OrderBy(ctrl => ctrl.TabIndex); // order by TabIndex
foreach (TextBox txt in sortedTextboxes)
{
// No need to cast :)
if(txt.Text == "")
{
tBox.Text = CmpStr;
break;
}
if(txt.Text == CmpStr) { break; }
}
}
请注意 OfType<TextBox>
方法,该方法仅返回文本框。
但是,如果不进行修改,此代码没有多大帮助,因为文本只有在为空时才设置为文本框。再次调整代码以满足您的需求。
foreach (Control txt in mypanel.Controls) {
if (txt is TextBox) {
if ((txt as TextBox).Text == "") {
(txt as TextBox).Text = CmpStr;
break;
} else if ((txt as TextBox).Text == CmpStr) {
break;
}
}
}