Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание массива элементов

33K
06 декабря 2007 года
Вячеслав_
3 / / 06.12.2007
Помогите создать массив элементов управления на форме после ее ввода, если конечное число элементов неизвестно (для VB.Net). Например, на форме кнопка при ее нажатии появляется управление Label(1), при втором нажатии Label(2)... и т.д. Задача усложняется тем, что не использовать Microsoft.VisualBasic.Compatibility.VB6.LabelArray
5
06 декабря 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: Вячеслав_
Помогите создать массив элементов управления на форме


Кидаем на форму TableLayoutControl и программно заполняем его текстбоксами:

Код:
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);
        }
    }
}
33K
07 декабря 2007 года
Вячеслав_
3 / / 06.12.2007
К сожалению программа написана не на Visual Basic.Net
5
07 декабря 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: Вячеслав_
К сожалению программа написана не на Visual Basic.Net


А вам настолько трудно переписать единственный цикл?

5
07 декабря 2007 года
hardcase
4.5K / / 09.08.2005
[quote=Вячеслав_]Что значит переписать единствннный цикл, когда неизвестно конечное количество массива элементов управления , как класса, на момент создания формы.
Для известного значения количества вопрос не
не стоит. Не стоит вопрос также, если используешь ...Vb6.LabelArray[/quote]По пункту о количестве элементов. Метод MakeTextBoxes создаёт столько полей ввода, сколько передашь в качестве параметра.
Кроме этого, можно передать класс контрола, и в методе с помощью отражения (или стандартного класса Activator) создавать экземпляры контролов.
33K
08 декабря 2007 года
Вячеслав_
3 / / 06.12.2007
Буду конкретным. Кто найдет ошибку в программе и как заставить передать событие массивам элеметов управления:

Создан отдельный класс
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
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог