public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void MakeTextBoxes(int count) {
if (count > 0) {
tableLayoutPanel1.SuspendLayout();
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.RowCount = 0;
tableLayoutPanel1.RowStyles.Clear();
for (int i = 0; i < count; ++i) {
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
TextBox txtBox = new TextBox();
txtBox.Text = string.Format("TextBox #{0}", i);
txtBox.Tag = i;
txtBox.Click += new EventHandler(txtBox_Click);
tableLayoutPanel1.Controls.Add(txtBox, 0, i);
}
tableLayoutPanel1.ResumeLayout(true);
}
}
void txtBox_Click(object sender, EventArgs e) {
MessageBox.Show(string.Format("txtBox #{0}", ((Control)sender).Tag));
}
private void button1_Click(object sender, EventArgs e) {
MakeTextBoxes(10);
}
}
}
Создание массива элементов
Помогите создать массив элементов управления на форме после ее ввода, если конечное число элементов неизвестно (для VB.Net). Например, на форме кнопка при ее нажатии появляется управление Label(1), при втором нажатии Label(2)... и т.д. Задача усложняется тем, что не использовать Microsoft.VisualBasic.Compatibility.VB6.LabelArray
Цитата: Вячеслав_
Помогите создать массив элементов управления на форме
Кидаем на форму TableLayoutControl и программно заполняем его текстбоксами:
Код:
К сожалению программа написана не на Visual Basic.Net
Цитата: Вячеслав_
К сожалению программа написана не на Visual Basic.Net
А вам настолько трудно переписать единственный цикл?
Для известного значения количества вопрос не
не стоит. Не стоит вопрос также, если используешь ...Vb6.LabelArray[/quote]По пункту о количестве элементов. Метод MakeTextBoxes создаёт столько полей ввода, сколько передашь в качестве параметра.
Кроме этого, можно передать класс контрола, и в методе с помощью отражения (или стандартного класса Activator) создавать экземпляры контролов.
Создан отдельный класс
Public Class Поле
Inherits Label
Public La() As Label
Public q As Short
Public Sub Новый(ByRef Gh As Control)
ReDim Preserve La(q)
La(q) = New Label()
La(q).BackColor = Color.Red
La(q).Name = CStr(q)
La(q).Text = "Номер " & CStr(q) & " Поле"
La(q).Location = New Point(10, 10 + q * 30)
Gh.Controls.AddRange(New Control() {La(q)})
AddHandler La(q).Click, AddressOf Поле_Click ' событие не передается Где ошибка?
q += 1
End Sub
Private Sub Поле_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
MsgBox(Text)
End Sub
End Class
В форме вводится только ввод Label-я строками
Public Er As Поле = New Поле()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Er.Новый(Me)
End Sub
Как передать все события Label-я для Er