Member 12385326 Ответов: 1

Динамическое добавление элементов управления в форму C#


Здравствуйте, я использую Windows appliation с c#
Я хочу добавить более 1 метки на форму динамически.
позвольте мне объяснить это шаг за шагом:
1) у меня есть несколько текстовых полей,1 кнопка на форме.
2) Когда я нажимаю на кнопку, текст внутри текстовых полей должен отображаться в метке.
3) предположим, что у меня есть 5 текстовых полей, при нажатии кнопки метки должны отображаться через код в одной строке
4) при следующем нажатии кнопки должна быть сгенерирована следующая строка.и предыдущая строка не должна быть удалена.при каждом нажатии кнопки строка этой метки должна увеличиваться.

как это сделать?

Что я уже пробовал:

это моя ода для geenrating Labels on button Click динамически:
Label l1= new Label();
l1.Text = t1.Text;
l1.AutoSize = true;
Controls.Add(l1);
l1.Location = new Point(139, 270);

Label l2= new Label();
l2.Text = t2.Text;
Controls.Add(l2);
l2.Location = new Point(251, 270);


Label l3= new Label();
l3.Text = t3.Text;
l3.AutoSize = true;

Controls.Add(Date);
l3.Location = new Point(337, 270);

Label l4= new Label();
l4.Text = t4.Text;

Controls.Add(l4);
l4.Location = new Point(412, 270);

Richard MacCutchan

В чем проблема?

[no name]

Ваш вопрос очень запутанный, пожалуйста, сформулируйте его коротко и ясно.
Сколько текстовых полей и кнопок должно отображаться помимо 5 меток и что вы подразумеваете под сохранением строк? Вы пытаетесь отобразить текст из текстового поля на этикетке в многострочном режиме?

Member 12385326

у меня есть 5 текстовых полей. и 1 кнопка.
при нажатии кнопки я копирую значение текстовых полей в метку.
но я генерирую ярлык через код.

при нажатии кнопки fisrt я копирую данные из текстового поля в метку, и вся метка должна быть в одной строке(например, строка)

на sencond нажмите еще раз ту же операцию, но все метки в следующей строке(то есть как вторая строка)

как мудры, как много я нажмите кнопку выполнить 5 метка должна отображаться в строке(например, строке в таблице)

1 Ответов

Рейтинг:
1

User 11061201

Если я правильно вас понял, вы хотите при каждом приращении нажатия кнопки программно регенерировать 5 меток, которые будут представлять фактические входные данные текстовых полей, сохраняя при этом предыдущий набор из 5 меток, которые вы используете для вызова "строки"

[ПЕРВЫЙ]
BLUE GREEN YELLOW RED BLACK
[ВТОРОЙ]
...

WHITE PURPLE ORANGE GRAY DARKBLUE<br />
BLUE GREEN YELLOW RED BLACK


Я показываю вам пример в VB.NET
Dim ROW As Integer = 0
Private Sub Button_Refresh_Click(sender As Object, e As EventArgs)
  ROW+=1

  Dim Labels_Set(4) As Label '(5 Labels)
  For i = 1 To 5
     Labels_Set(i-1) = New Label()
     Dim lbl As Label = Labels_Set(i-1)
     Select Case i
        Case 1 : lbl.Text = TextBox1.Text
        Case 2 : lbl.Text = TextBox2.Text
        Case 3 : lbl.Text = TextBox3.Text
        Case 4 : lbl.Text = TextBox4.Text
        Case 5 : lbl.Text = TextBox5.Text
     End Select
  
     Me.Controls.Add(lbl)
     lbl.Name = "LABEL" & CStr(ROW) & "_" &CStr(i) 'LABEL*_*'
     lbl.Location = New Point(50 + (i * lbl.Width), 50 + (ROW * lbl.Height))
  Next

End Sub


И этот код удаляет любой набор меток конкретной строки
Private Sub RemoveSet(ByVal row As Integer) 
    For Each ctl in Me.Controls()
        If TypeOf(ctl) Is Label Then
            If ctl.Name.Split(CChar("_"))(0) = "LABEL" & CStr(row) Then
               Me.Controls.Remove(ctl)
               'ctl.Dispose
            End If   
        End If
    Next
End Sub

Я не проверял это на IDE.
Надеюсь, это поможет.


Member 12385326

@Gegniani Да, вы поняли мою точку зрения,но я хочу код c# :(

[no name]

Попробуйте воспользоваться онлайн-конвертером VB-C#. Примите решение, если оно решит вашу проблему.

Member 12385326

у меня есть решение:

общественного недействительными метода printrow()
{
int x = 20; int y = 50, m = 20, n = 50;




панель2.Контроля.Добавить (новая метка { текст = "тип платежа:" + cmb_AddPayment_Payment.Текст, высота = 20, ширина = 150, имя = "ярлык" + i, BackColor = цвет.Прозрачный, местоположение = новая точка(x + i, y * i) });


панель2.Контроля.Добавить(новый Label { текст = "оплаченная сумма:" + txt_AddPayment_AmountPaid.Текст, высота = 20, ширина = 150, наименование = "текст" + Я, цвет фона = цвет.Прозрачный, местоположение = новая точка(x + i + 180, y * i) });

панель2.Контроля.Добавить(новый Label { текст = "дата" + dateTimePicker1.Текст, высота = 20, ширина = 150, наименование = "текст" + Я, цвет фона = цвет.Прозрачный, местоположение = новая точка(x + i + 350, y * i) });

панель2.Контроля.Добавить (новая метка { Text = "Notes:" + txtNotes.Текст, высота = 20, ширина = 400, имя = "текст" + i, BackColor = цвет.Прозрачный, местоположение = новая точка(x + i + 500, y * i) });



// y += 30;
я++;

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