Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 08.04.07 12:51
Dim A As ArrayList
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
странный ты... сам объявляешь
Public ReadOnly Property Items() As PicViewCollections

У тебя возвращаемый тип данных - КОЛЛЕКЦИЯ(что в общем-то вполне логично), а не кнопка! Если тебе надо вернуть кнопку, то и обяъвляй ее соответственно как кнопку.. это раз..
Во-вторых, раз тебе так нужна 1 кнопка, то что тебе мешает получить ее из полученно коллекции?
Dim myButton as Button = myPicView.Items(2)

Ответить

Номер ответа: 5
Автор ответа:
 Legon



Вопросов: 4
Ответов: 32
 Профиль | | #5 Добавлено: 08.04.07 18:23
То, что я странный - СОГЛАСЕН!!!
Люди, еще раз - обьясните непутевому:
КАК РЕАЛИЗОВАТЬ СВОЙСТВО Item, такое как в ListView??? Чтобы через него можно было добавить, удалить и получить элемент (контрол) из моей созданной коллекции.

Ответить

Номер ответа: 6
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #6
Добавлено: 08.04.07 19:02
Ну EROS же сказал:

Если тебе надо вернуть кнопку, то и обяъвляй ее соответственно как кнопку..


Public ReadOnly Property Items() As ...

ну, догадайся, что должно быть вместо троеточия??? :)))

Ответить

Номер ответа: 7
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #7
Добавлено: 08.04.07 19:08
КАК РЕАЛИЗОВАТЬ СВОЙСТВО Item, такое как в ListView???
блин, ты его уже реализовал, даже кнопку туда засунул

короче делай так:
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-сайт: sham.clan.su
 Профиль | | #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
Return Ctype(m_PicView,Button)

хм.. т.е. ты предлагаешь ему привести ArrayList к типу Button? Оригинально... скажи, ты и правда веришь в то, что это будет работать?

Ответить

Номер ответа: 10
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #10
Добавлено: 08.04.07 23:36
ну да, а оно всегда когда ArrayList используешь приходится прводить обратно к типу исходного класса,
Если ты заметил - то m_PicView - это коллекция buttonов, так что все именно так и должно работать. Иначе Options Strict On ругается.

Ответить

Номер ответа: 11
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #11 Добавлено: 09.04.07 02:57

пост 8 ???

Return Ctype(m_PicView,Button) ' вернуть нужно кнопку, а не коллекцию


я думаю работать не будет...

Может так?

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-сайт: sham.clan.su
 Профиль | | #12
Добавлено: 09.04.07 07:48
я думаю работать не будет...


Я тоже, на самом деле должно было так:

Return Ctype(m_PicView.Items(i),Button)

Это я что-то стормозил. Просто влом ВБ открывать, хочется так, экспромтом, поэтому и с ошибками...

BUMM
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
ну в приципе можно с одним малым комментарием: здесь се реализовано через массив, а автору нужна коллекция...

Ответить

Номер ответа: 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) автор реализовал сам и сделал это правильно!! хмм.. тогда я вооюще ничего не понимаю
АФФТАР!! Что же тебе надо на самом деле??? :-)))
Единственое, что мне подсказывают мои телепатические способности то твоя проблема в следующем:
Ты к элементу коллекции получаешь доступ так:
Dim myButton as Button=PicView.Items.Item(2)

а тебе хочется так:
Dim myButton as Button=PicView.Items(2)
Я прав? :-)))

Ответить

Номер ответа: 15
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #15
Добавлено: 09.04.07 09:41

хмм.. тогда я вооюще ничего не понимаю
АФФТАР!! Что же тебе надо на самом деле??? :-)))
да автор забил на это уже ИМХО

А хотел он просто вернуть кнопку в свойстве (см. где стоит коментарий ИМХО)

Согласен с тем, что он уже все написал...

Я пришел к выводу, что он взял где-то этот кусок кода и сам не знает, как он работает

Ответить

Страница: 1 | 2 |

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



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