Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ControlCollection, где то ошибся только понять не могу где? 
:(
    Опции темы
popzow
Дата 20.4.2011, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



где то ошибся только понять не могу где?

Код

Public Class Wizard
    Inherits Control

    Private collection As New WizardCollection(Me)

    Public Property Items() As WizardCollection
        Get
            Return collection
        End Get
        Set(ByVal value As WizardCollection)
            collection = value
        End Set
    End Property
End Class

Код

<ComVisible(False)> _
Public Class WizardCollection
    Inherits Control.ControlCollection

    Private Shadows owner As Wizard

    Sub New(ByVal owner As Wizard)
        MyBase.New(owner)
    End Sub

    Public Overloads Sub Add(ByVal value As Panel)
        owner.Controls.Add(value)
    End Sub

    Public Overloads Sub AddRange(ByVal pages As Panel())
        Dim page As Panel
        For Each page In pages
            Me.Add(page)
        Next
    End Sub

    Default Public Overloads Property Item(ByVal index As Integer) As Panel
        Get
            Return Me.owner.Controls.Item(index)
        End Get
        Set(ByVal value As Panel)
            Me.owner.Controls.Add(value)
        End Set
    End Property

    Public Overloads Sub Remove(ByVal value As Panel)
        Me.owner.Controls.Remove(value)
    End Sub

    Public Overrides Sub Clear()
        Me.owner.Controls.Clear()
    End Sub
End Class

PM MAIL   Вверх
diadiavova
Дата 21.4.2011, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Вообще-то телепатов здесь нет. Опиши проблему словами: что ты хотел сделать и что пошло не так.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
popzow
Дата 21.4.2011, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



да я хотел таким образом контрол сделать ("wizard") что бы в свойстве ("Item") мог добавлять (или удалять) панели.  но они "панели" не сохраняються в свoйстве.

Это сообщение отредактировал(а) popzow - 21.4.2011, 16:38

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  WindowsApplication1.rar 67,13 Kb
PM MAIL   Вверх
diadiavova
Дата 21.4.2011, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Честно говоря я не понял для чего тебе понадобилась такая путанная логика, но проблема скорей всего в том, что твой класс WizardCollection уже содержит метод Add, когда ты его перегружаешь, это практически ничего не дает, поскольку метод базового класса может принимать любой контрол, в том числе и панель. Вызывается метод базового класса, а не тот, который определил ты. Назови свой метод, к примеру, AddWizard и все должно сработать. Хотя в любом случае ты пошел не по тому пути. Мастера в винформах проще всего построить с помощью TabControl'а.

Добавлено через 4 минуты и 47 секунд
И кстати готовых реализаций полно, типа этой
http://www.codeproject.com/KB/miscctrl/ak_wizard.aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
popzow
Дата 30.4.2011, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Код

Imports System.ComponentModel

Public Class Wizard
    Inherits Control

#Region "Pages"
    Private Collection As PageCollection = New PageCollection(Me)

    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)> _
    Public ReadOnly Property Pages As PageCollection
        Get
            If Me.Collection.Count > 0 Then
                For a As Integer = 0 To Me.Collection.Count - 1
                    Collection(a).Dock = DockStyle.Fill
                    Me.Controls.Add(Collection(a))
                Next
                Collection(SelectedIndex).BringToFront()
            End If
            Return Me.Collection
        End Get
    End Property
#End Region

#Region "Вспомогательныe функции"
    Friend Function FindPage(ByVal page As Panel) As Integer
        If (Not Me.Collection Is Nothing) Then
            For i As Integer = 0 To Me.Collection.Count - 1
                If Me.Collection(i).Equals(page) Then
                    Return i
                End If
            Next i
        End If
        Return -1
    End Function
#End Region

#Region "Selection"
    Public Property SelectionPage As Panel
        Get
            If (_selectedIndex = -1) Then
                Return Nothing
            End If
            Return Collection(_selectedIndex)
        End Get
        Set(ByVal value As Panel)
            _selectedIndex = FindPage(value)
        End Set
    End Property

    Private _selectedIndex As Integer = -1
    <System.ComponentModel.Browsable(False)> _
    Public Property SelectedIndex As Integer
        Get
            If (_selectedIndex = -1) Then
                Return Nothing
            End If
            Return _selectedIndex
        End Get
        Set(ByVal value As Integer)
            _selectedIndex = value
            Pages(_selectedIndex).BringToFront()
        End Set
    End Property
#End Region

End Class


Код

Imports System.ComponentModel

Public Class PageCollection
    Inherits List(Of Panel)


    Private owner As Wizard

    Friend Sub New(ByVal owner As Wizard)
        Me.owner = owner
    End Sub

    Public Overloads Sub Add(ByVal item As Panel)
        MyBase.Add(item)
        Me.owner.Controls.Add(item)
    End Sub

    Public Overloads Sub AddRange(ByVal items As IEnumerable(Of Panel))
        MyBase.AddRange(items)
        Me.owner.Controls.AddRange(items)
    End Sub
End Class

выкладываю собственное алтернативное решение.

Это сообщение отредактировал(а) popzow - 30.4.2011, 11:39
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.