Страница: 1 | 2 |
Вопрос: Как создать массив контрола в виде коллекции?
Добавлено: 08.04.07 02:59
Автор вопроса: Legon
Помогите!!! Мне нужно создать внутри моего контрола массив других (для примера PictureBox). Но массив должен быть в виде коллекции. Как это реализовать??? Яркий тому пример ListView и его свойство Item.
Ответы
Всего ответов: 30
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 08.04.07 12:11
А в чем сложности-то?? Берешь любую подходящую коллекцию.. пихаешь в нее контролы и юзаешь!! все тривиально просто..
Номер ответа: 2
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #2
Добавлено: 08.04.07 12:51
A.Add(PictureBox1)
Номер ответа: 3
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #3
Добавлено: 08.04.07 15:54
Первая сложност в том, что у моего контрола, допустим PicView должно быть свойство Items в виде класса PicViewCollections в котором методы мои:
Public Class PicViewCollections
Inherits System.Collections.CollectionBase
Public Overloads Function Add(ByVal Value As Button) As Button
Me.InnerList.Add(Value)
Return Value
End Function
Public Overloads Function Add(ByVal s As String, ByVal sIMage As Image) As Button
Dim tButton As New Button
tButton.Text = sText
tButton.Image = sImage
Me.InnerList.Add(tButton)
Return tButton
End Function
Public Overloads ReadOnly Property Item(ByVal Index As Integer) As Button
Get
Return CType(Me.InnerList.Item(Index), Button)
End Get
End Property
...
В самом контроле должно быть свойство Items, как у ListView. Создаю свойство:
Public Class PicView
Dim m_PicView As Button
Public ReadOnly Property Items() As PicViewCollections
Get
Return ... ' вернуть нужно кнопку, а не коллекцию
End Get
End Property
End Class
Как мне правильно создать свойство Items?
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 08.04.07 17:40
странный ты... сам объявляешь
У тебя возвращаемый тип данных - КОЛЛЕКЦИЯ(что в общем-то вполне логично), а не кнопка! Если тебе надо вернуть кнопку, то и обяъвляй ее соответственно как кнопку.. это раз..
Во-вторых, раз тебе так нужна 1 кнопка, то что тебе мешает получить ее из полученно коллекции?
Номер ответа: 5
Автор ответа:
Legon
Вопросов: 4
Ответов: 32
Профиль | | #5
Добавлено: 08.04.07 18:23
То, что я странный - СОГЛАСЕН!!!
Люди, еще раз - обьясните непутевому:
КАК РЕАЛИЗОВАТЬ СВОЙСТВО Item, такое как в ListView??? Чтобы через него можно было добавить, удалить и получить элемент (контрол) из моей созданной коллекции.
Номер ответа: 6
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #6
Добавлено: 08.04.07 19:02
Ну EROS же сказал:
Public ReadOnly Property Items() As ...
ну, догадайся, что должно быть вместо троеточия??? ))
Номер ответа: 7
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #7
Добавлено: 08.04.07 19:08
короче делай так:
Public Class PicView
Dim m_PicView As Button
Public ReadOnly Property Items() As ArrayList'List можно, если 2005
Get
Return ... ' вернуть нужно кнопку, а не коллекцию
End Get
End Property
End Class
а потом:
Dim A As ArrayList
Dim d As PicViewCollections
d = ...
A.Add(d)
короче определись с тем, что ты хочешь
Номер ответа: 8
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #8
Добавлено: 08.04.07 20:10
Блин, раз в пятый просматривая топик, кажется, я начал понимать автора:
Public Class PicView
Dim m_PicView As ArrayList
Public ReadOnly Property Items() As ArrayList'List можно, если 2005
Get
Return Ctype(m_PicView,Button) ' вернуть нужно кнопку, а не коллекцию
End Get
End Property
End Class
Dim A As ArrayList
....
A.Add(PicViewCollections.Item(i))
Оно?
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 08.04.07 23:00
хм.. т.е. ты предлагаешь ему привести ArrayList к типу Button? Оригинально... скажи, ты и правда веришь в то, что это будет работать?
Номер ответа: 10
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #10
Добавлено: 08.04.07 23:36
ну да, а оно всегда когда ArrayList используешь приходится прводить обратно к типу исходного класса,
Если ты заметил - то m_PicView - это коллекция buttonов, так что все именно так и должно работать. Иначе Options Strict On ругается.
Номер ответа: 11
Автор ответа:
BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #11
Добавлено: 09.04.07 02:57
пост 8 ???
я думаю работать не будет...
Может так?
Public Class PicView
Dim m_PicView() As button
...
Public ReadOnly Property Items(byval i as index) As Button 'List можно, если 2005
Get
...
Return m_PicView(i) ' возврат кнопки по индексу
...
End Get
End Property
End Class
Номер ответа: 12
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #12
Добавлено: 09.04.07 07:48
Я тоже, на самом деле должно было так:
Return Ctype(m_PicView.Items(i),Button)
Это я что-то стормозил. Просто влом ВБ открывать, хочется так, экспромтом, поэтому и с ошибками...
BUMM
Dim m_PicView() As button
...
Public ReadOnly Property Items(byval i as index) As Button 'List можно, если 2005
Get
...
Return m_PicView(i) ' возврат кнопки по индексу
...
End Get
End Property
End Class
Номер ответа: 13
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #13
Добавлено: 09.04.07 09:11
Господа! Не надо извращаться и изобретать велосипед!
Items должен возвращать коллекцию (автор это сам сделал) А Item должен возвращать элемент коллекции (в нашем случае кнопку).. как это сделать - уже показали.. Ну чего тут еще мудрить? Практически любой контейнер именно по такому принципу и работает с дочерними контролами
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 09.04.07 09:22
Кстати свойство Item у коллекции автор тоже сам реализовал.. В итого мы имеем что оба свойства (Items и Item) автор реализовал сам и сделал это правильно!! хмм.. тогда я вооюще ничего не понимаю
АФФТАР!! Что же тебе надо на самом деле??? ))
Единственое, что мне подсказывают мои телепатические способности то твоя проблема в следующем:
Ты к элементу коллекции получаешь доступ так:
а тебе хочется так:
Номер ответа: 15
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #15
Добавлено: 09.04.07 09:41
АФФТАР!! Что же тебе надо на самом деле??? ))
А хотел он просто вернуть кнопку в свойстве (см. где стоит коментарий ИМХО)
Согласен с тем, что он уже все написал...
Я пришел к выводу, что он взял где-то этот кусок кода и сам не знает, как он работает