Связывание динамически создаваемых текстовых полей и меток - PullRequest
0 голосов
/ 05 сентября 2011

Я создал массив TextBoxes и массив Labels.Когда информация обновляется в TextBox, я хочу изменить метки.Как я смогу сделать это?Ниже приведен фрагмент моего кода.Я не создал EvenHandler, с которым я думаю, что мне нужна помощь.Все в C # с помощью формы приложения Windows.

textBoxes = new TextBox[value];
labels = new Label[value];

for (int i = 1; i < value; i++)
{
    textBoxes[i] = new TextBox();
    textBoxes[i].Location = new Point(30, ToBox.Bottom + (i * 43));

    labels[i] = new Label(); 
    labels[i].Location = new Point(TopBox3[i].Width + 140, TopBox3[i].Top +3);

    textboxes[i].ValueChanged += new EventHandler(this.TextBox_ValueChanged) ;

    this.Controls.Add(labels[i]);
    this.Controls.Add(textBoxes[i]);
}

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Вы можете запомнить индекс TextBox в свойстве Tag

 textBoxes[i].Tag = i;

, а затем используйте это значение в обработчике событий для получения соответствующей метки (при условии, что вы храните массив меток в качестве локальной переменной)

protected void TextBox_ValueChanged(object sender, EventArgs e)
{
  TextBox textbox = sender as TextBox;
  if(textbox==null)
    return;
  int index = Convert.ToInt32(textbox.Tag);
  if(index >= 0 && index < this.labels.Length)
  {
    Label label = this.labels[index];
    /* ... */
  }
}
0 голосов
/ 05 сентября 2011

Вы должны написать что-то вроде этого:

    private void textBox1_ValueChanged(object sender, EventArgs e)
    {
        TextBox changedTxt = sender as TextBox;
        for (int i = 1; i < value; i++)
            if (textBoxes[i] == changedTxt)
            {
                Label lblToChange = labeld[i];
                lblToChange.Text = changedTxt.Text;
                break;
            }
    }

В методе TextBox, текст которого был изменен, передается как «отправитель». Вы просматриваете его в своем массиве, поэтому вы идентифицируете индекс «i», который можно использовать для доступа к соответствующей метке и для установки ее текста.

Кстати, как сказал Тим, это событие TextChanged, а не ValueChanged. Кроме того, имейте в виду, что событие вызывается для каждого изменения в тексте, т. Е. Как только вы нажимаете клавишу, метка будет обновляться. Если вы предпочитаете обновлять свои ярлыки только после того, как пользователь завершил ввод своего текста, оставьте событие, которое вы должны использовать.

...