Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: sham.clan.su
 Профиль | | #5
Добавлено: 09.06.07 18:19
Public arr_links As DataGridViewPrivate(7)

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
            ;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


Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

' arr_links(i).[...]=[///]

End Sub

Ответить

Номер ответа: 6
Автор ответа:
 Kuzmit4



Вопросов: 4
Ответов: 12
 Профиль | | #6 Добавлено: 13.06.07 11:34
 
DataGr.Name = arr_days(i)

выдает ошибку: Object reference not set to an instance of an object.

и что-то я ни как не могу понять, как же это в итоге заработает :(
по логике мне кажется что надо сделать просто указатель на каждый из моих создаваемых DataGr. но вот как, я не знаю... и не могу найти ни где :(

Ответить

Номер ответа: 7
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #7
Добавлено: 13.06.07 11:42
Весь код покажите.

Ответить

Номер ответа: 8
Автор ответа:
 Kuzmit4



Вопросов: 4
Ответов: 12
 Профиль | | #8 Добавлено: 13.06.07 11:57
Private arr_days() As String = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
    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=localhost;Database=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
            ;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)

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

                ;DataGr.RowHeadersVisible = False
                ;DataGr.AutoGenerateColumns = True
                ;DataGr.DataMember = "Table_" + arr_days(i)
                ;DataGr.DataSource = ds
                conn.Close()

                ;DataGr.Columns("id";).Visible = False
                ;DataGr.Columns("status";).Visible = False
                ;DataGr.Columns("iSize";).Visible = False
                ;DataGr.Columns("cl";).Visible = False
                ;DataGr.Columns("weekday";).Visible = False
                ;DataGr.Columns("name";).HeaderText = arr_days(i)
                ;DataGr.Columns("name";).Width = "117"

next i
end sub

Ответить

Номер ответа: 9
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #9
Добавлено: 13.06.07 12:27
Это:

            'Dim DataGr As New DataGridView
            'DataGr = New DataGridView
            arr_links(i) = New DataGridView


Заменить на это:

            Dim DataGr As 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-сайт: www.vbnet.ru
 Профиль | | #11
Добавлено: 13.06.07 12:46
Да. DataGr и arrlinks(i) будут всего лишь двумя ссылками на один и тот
же объект в памяти.

Почитайте книги Эплмана и Рихтера, чтобы лучше разбираться в том, как
всё это работает.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам