Рейтинг:
24
Ralf Meier
Вы затемняете массив управления as без измерения. Это и есть предыдущая ошибка.
Но для чего вам нужен этот массив ? Достаточно создать экземпляр элемента управления и добавить его в коллекцию элементов управления формы.
Чтобы исправить ваш код (который имеет неправильный подход в данный момент) Я хотел бы узнать больше о цели ...
Дополнительно после уточнения :
Public Sub CreateControls (c As Integer())
Dim l As Point
For i As Integer = 0 To c.Length - 1
l.Y = 50 + (3 * i - 2) * 40 ' your Control-Height
l.X = 150
If c(i) = ??? Then ' <- add the right value for comparing here
dim myTB as New TextBox
myTB.Width = 400
myTB.Height = 40
myTB.Location = l
myTB.Name = "TextBox"+i.toString ' <- important for later accessing
me.Controls.Add(myTB)
Else ' if c(i)= ???
dim myCB as New ComboBox
myCB.Width = 400
myCB.Height = 40
myCB.Location = l
myCB.Name = "ComboBox"+i.toString ' <- important for later accessing
me.Controls.Add(myCB)
End If
Next
End Sub
YahyaSh
Здравствуй, Ральф, Ты совершенно прав. когда я определил длину управляющего массива, он работает. но идея в том, что я хочу, чтобы она была динамичной.
что ж, позвольте мне попытаться приблизиться к своей цели:
Я работаю с набором данных, который связан с базой данных. В наборе данных у меня есть много таблиц, которые связаны там, где связаны некоторые поля. например, у меня есть datagridview1, привязанный к таблице "клиент", где у каждого клиента есть уникальная учетная запись без"ACCNO". еще одна таблица " контракты "с полем"AccNo". у одного клиента может быть много контрактов.
функция, которую я хочу создать, - это добавить новую запись и иметь параметр (таблица Как Datatable).
когда я вызову функцию и новая форма будет показана с количеством элементов управления, которые такое же количество Datatable.columns.count....и вот идея: каждый тип элемента управления зависит от типа столбцов. например: для столбца" имя " мне просто нужно текстовое поле. с другой стороны, для контрактов.Колонки ("AccNo") Мне нужен ComboBox, где отображаемый элемент находится от клиента.Колонки ("AccNo").
Надеюсь, моя идея ясна
Ralf Meier
Не совсем ясно, но достаточно, чтобы начать дискуссию ...
Я предлагаю следующее :
- DataGridView и подключение к вашей базе данных являются частью вашей формы - так что этот метод также должен быть частью вашей формы.
- Я полагаю, у вас есть кнопка или что-то подобное, которое загружает базу данных. При загрузке вы запускаете свой метод, который создает необходимые элементы управления
Исходя из этого, код может выглядеть так, как показано выше (я улучшу свое решение) ...
YahyaSh
Ральф,
Я все продумал, как ты и предлагал. он отлично работает.
Большое спасибо.
Рейтинг:
1
CPallini
Что ж, сообщение об ошибке понятно. Вы объявили массив
Цитата:
Дим, а как контролировать()
но так и не создал его.
Заявление
a = new Control(c.Length){}
отсутствует в вашем коде.
В любом случае, я последую за ним.
Graeme_Grant предложите и используйте вместо этого динамический контейнер, например
List
.