Изменение значений динамически добавленных элементов управления в приложении winform c # .net, как отслеживать динамически добавленные элементы управления - PullRequest
0 голосов
/ 28 июня 2011

Я динамически добавил элементы управления во время выполнения в строках tableLayoutpanel, добавлены следующие элементы управления: LABELS, LINKLABEL И PICTURE BOX.

Теперь я хочу изменить значение (свойство Text) этих динамически добавленных элементов управления (Labels, Linklabels) на определенное значение одним нажатием кнопки.

Как мне это сделать? Пожалуйста, помогите с кодом.

Есть ли какой-то идентификатор для этих динамических элементов управления, как у нас в HTML.

Кроме того, я пытаюсь использовать это, но все напрасно ...........

Control[] GettableLayoutPanelControls = new Control[11];

          GettableLayoutPanelControls =  tableLayoutPanel1.Controls.Find("Control Name", true) ;

             GettableLayoutPanelControls.SetValue("CHANGED VALUE ", 0); //this line gives error..........

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Попробуйте что-то вроде этого, чтобы добавить 11 новых текстовых полей (или любой другой элемент управления, который вы хотите):

int NumberOfTextBoxes = 11;
TextBox[] DynamicTextBoxes = new TextBox[NumberOfTextBoxes];
int ndx = 0;

while (ndx < NumberOfTextBoxes) 
{
    DynamicTextBoxes[ndx] = new TextBox();
    DynamicTextBoxes[ndx].Name = "TextBox" + ndx.ToString();
    // You can set TextBox value here:
    // DynamicTextBoxes[ndx].Text = "My Value";
    tableLayoutPanel1.Controls.Add(DynamicTextBoxes[ndx]);
    ndx++;
}

Это будет динамически добавлять текстовые поля в ваш элемент управления TableLayout. Если вам нужно получить их позже:

foreach (Control c in TableLayoutPanel1.Controls)
{
    if (c is TextBox)
    {
        TextBox TextBoxControl = (TextBox)c;

        // This will modify the value of the 3rd text box we added
        if (TextBoxControl.Name.Equals("TextBox3"))      
            TextBoxControl.Text = "My Value";
    }
}
0 голосов
/ 28 июня 2011

Самый простой способ сделать это - отслеживать динамически созданные элементы управления в приватном поле.

private Label _myLabel;
_myLabel = new Label();
myLabel.Text = "Hello World!";
tableLayoutPanel1.Controls.Add(myLabel);
// ... later in the button click handler ... //
myLabel.Text = "Goodbye Cruel World!";

Помните, что Windows Forms - это среда с состоянием, в отличие от ASP.NET, поэтому поля не теряют своих значений при взаимодействии пользователя с формой.

ETA:

Label dynamic_label = new Label();
for(in i =0;i<6;i++){this.Controls.Add(dynamic_label);}

Этот код из вашего комментария добавляет ЖЕ метку 5 раз. Я не думаю, что это твое намерение. Когда вы устанавливаете свойство Text, все они будут иметь одинаковый текст, потому что они ссылаются на один и тот же элемент управления. Вы можете использовать мое решение и объявить

Label myLabel1, myLabel2, ..., myLabel5;

Если у вас так много, что вы объявляете их в цикле, я бы сохранил их в Dictionary<string, Label>, чтобы вам не приходилось искать в массиве, чтобы найти правильный.

...