2

設計時に作成された 9 つのテキスト ボックスがあります。リストボックス (設計時に作成された inglist) をクリックして項目を選択すると、IfThisExist(CmpStr) 関数は、既にこの項目を選択しているかどうかを確認します。デバッグすると、CmpStr の値が txt.Text に渡されますが、画面に表示されません。

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;

.....

理由は何ですか?

4

3 に答える 3

2

foreach ループは、tabindex の大きい方から小さい方に向かって開始されます。未使用のテキストボックスを隠していたので、これは CmpStr の値を受け取っているより大きな tabindex テキストボックスです。

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;
    }
}

    

そして、それはうまくいきます。

于 2013-09-20T02:28:00.083 に答える
0
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;
        }
    }
}
于 2013-09-19T13:36:02.483 に答える