Страница: 1 |
Страница: 1 |
Вопрос: Динамически создаваемые контролы
Добавлено: 09.06.07 14:24
Автор вопроса: Kuzmit4
Private DataGr As DataGridViewPrivate Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
For i = 0 To 6
DataGr = New DataGridView
DataGr.Name = arr_days(i)
DataGr.AllowUserToResizeColumns = False
DataGr.AllowUserToResizeRows = False
DataGr.ColumnHeadersVisible = True
DataGr.AllowDrop = True
DataGr.RowHeadersVisible = False
DataGr.Top = 3
DataGr.Left = i * 126 + 3
DataGr.Width = 120
DataGr.Height = 300
AddHandler DataGr.CellMouseDown, AddressOf DataGr_CellMouseDown
AddHandler DataGr.DragEnter, AddressOf DataGr_DragEnter
AddHandler DataGr.DragDrop, AddressOf DataGr_DragDrop
AddHandler DataGr.CellMouseMove, AddressOf DataGr_CellMouseMove
Controls.Add(DataGr)
'заполнение dataGr
next i
End Sub
таким образом создаю 7 dataGr каждому присваиваю имя
а вот как потом обратиться к определенному dataGr по его имени? ни как не могу понять...
P.S. не ругайте сильно, я тока учусь :)
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #1
Добавлено: 09.06.07 15:03
Сохраняйте в переменной ссыки на экземпляры контрола.
Номер ответа: 2
Автор ответа:
Kuzmit4
Вопросов: 4
Ответов: 12
Профиль | | #2
Добавлено: 09.06.07 15:39
А это как?
допустим есть массив arr_links(7)
какого типа он должен быть и как взять ссылку на экземпляр контрола?
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 09.06.07 16:19
Типа DataGridView.
Номер ответа: 4
Автор ответа:
Kuzmit4
Вопросов: 4
Ответов: 12
Профиль | | #4
Добавлено: 09.06.07 17:24
и все же я не понимаю
создаю массив
dim arr_links()
в цикле создания dataGr делаю
arr_links(i) = dataGr
в итоге просто получаю набор dataGr и массив. и связи между ними нету...
вот когда я обрабатываю описанные события, то все понятно
я через CType(object as expression, object as type) обращаюсь.
а вот как мне обратится, допустим по нажатию какой-то кнопки к dataGr с нужным мне именем...
напишите примерчик, если не сложно.
Номер ответа: 5
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #5
Добавлено: 09.06.07 18:19
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
For i = 0 To 6
arr_links(i) = New DataGridView
 ataGr.Name = arr_days(i)
 ataGr.AllowUserToResizeColumns = False
 ataGr.AllowUserToResizeRows = False
 ataGr.ColumnHeadersVisible = True
 ataGr.AllowDrop = True
 ataGr.RowHeadersVisible = False
 ataGr.Top = 3
 ataGr.Left = i * 126 + 3
 ataGr.Width = 120
 ataGr.Height = 300
AddHandler DataGr.CellMouseDown, AddressOf DataGr_CellMouseDown
AddHandler DataGr.DragEnter, AddressOf DataGr_DragEnter
AddHandler DataGr.DragDrop, AddressOf DataGr_DragDrop
AddHandler DataGr.CellMouseMove, AddressOf DataGr_CellMouseMove
Controls.Add(DataGr)
'заполнение dataGr
next i
End Sub
' arr_links(i).[...]=[///]
End Sub
Номер ответа: 6
Автор ответа:
Kuzmit4
Вопросов: 4
Ответов: 12
Профиль | | #6
Добавлено: 13.06.07 11:34
выдает ошибку: Object reference not set to an instance of an object.
и что-то я ни как не могу понять, как же это в итоге заработает
по логике мне кажется что надо сделать просто указатель на каждый из моих создаваемых DataGr. но вот как, я не знаю... и не могу найти ни где
Номер ответа: 7
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #7
Добавлено: 13.06.07 11:42
Весь код покажите.
Номер ответа: 8
Автор ответа:
Kuzmit4
Вопросов: 4
Ответов: 12
Профиль | | #8
Добавлено: 13.06.07 11:57
Private DataGr As DataGridView
Public arr_links(7) As DataGridView
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim conn As New SqlConnection("Server=localhostatabase=testDB;Trusted_Connection=Yes;"
Dim strSQL As String
strSQL = "Select * From Table2"
dbAdapt = New SqlDataAdapter(strSQL, conn)
dbAdapt.Fill(ds, "Table_progs"
Dim i As Integer
For i = 0 To 6
'Dim DataGr As New DataGridView
'DataGr = New DataGridView
arr_links(i) = New DataGridView
 ataGr.Name = arr_days(i)
 ataGr.AllowUserToResizeColumns = False
 ataGr.AllowUserToResizeRows = False
 ataGr.ColumnHeadersVisible = True
 ataGr.AllowDrop = True
 ataGr.RowHeadersVisible = False
 ataGr.Top = 3
 ataGr.Left = i * 126 + 3
 ataGr.Width = 120
 ataGr.Height = 300
AddHandler DataGr.CellMouseDown, AddressOf DataGr_CellMouseDown
AddHandler DataGr.DragEnter, AddressOf DataGr_DragEnter
AddHandler DataGr.DragDrop, AddressOf DataGr_DragDrop
AddHandler DataGr.CellMouseMove, AddressOf DataGr_CellMouseMove
Controls.Add(DataGr)
strSQL = "Select * From Table1 where weekday='" + arr_days(i) + "'"
dbAdapt = New SqlDataAdapter(strSQL, conn)
dbAdapt.Fill(ds, "Table_" + arr_days(i))
Label1.Text = ds.Tables("Table_" + arr_days(i)).Rows.Count.ToString
 ataGr.RowHeadersVisible = False
 ataGr.AutoGenerateColumns = True
 ataGr.DataMember = "Table_" + arr_days(i)
 ataGr.DataSource = ds
conn.Close()
 ataGr.Columns("id".Visible = False
 ataGr.Columns("status".Visible = False
 ataGr.Columns("iSize".Visible = False
 ataGr.Columns("cl".Visible = False
 ataGr.Columns("weekday".Visible = False
 ataGr.Columns("name".HeaderText = arr_days(i)
 ataGr.Columns("name".Width = "117"
next i
end sub
Номер ответа: 9
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #9
Добавлено: 13.06.07 12:27
Это:
'DataGr = New DataGridView
arr_links(i) = New DataGridView
Заменить на это:
arr_links(i) = DataGr
Номер ответа: 10
Автор ответа:
Kuzmit4
Вопросов: 4
Ответов: 12
Профиль | | #10
Добавлено: 13.06.07 12:35
Спасибо Павел, вроде все получилось
а такой вопрос, при изменении в DataGR произдут изменения и в arr_links? Например, после обработки события DragDrop.
Номер ответа: 11
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #11
Добавлено: 13.06.07 12:46
Да. DataGr и arrlinks(i) будут всего лишь двумя ссылками на один и тот
же объект в памяти.
Почитайте книги Эплмана и Рихтера, чтобы лучше разбираться в том, как
всё это работает.