Пользовательский Combobox со значениями - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть приложение для Windows с несколькими формами, содержащими одни и те же комбинированные списки.
Эти комбинированные списки имеют фиксированные элементы.В каждой форме я загружаю комбинированные списки с этими значениями.
Например:

Public Sub New()
   InitializeComponent()
   With Combobox1.Items
         .Insert(0, "Value1")
         .Insert(1, "Value2")
         .Insert(2, "Value3")
   End With
   With Combobox2.Items
         .Insert(0, "Value4")
         .Insert(1, "Value5")
         .Insert(2, "Value6")
   End With
End Sub

Я не хочу повторять этот код в каждой форме, поэтому есть ли способ создать настраиваемый комбинированный список, которыйпредварительно заполнены этими значениями, а затем наследуют Combobox в каждой форме?Или есть другое правильное решение?

ОБНОВЛЕНИЕ 1 Основываясь на комментарии jmcilhinney, я создал этот класс

 Public Class ComboClass
    Inherits System.Windows.Forms.ComboBox
    Public Sub New()

    End Sub

    Sub New(ByVal sender As String)
        If sender = "R" Then
            With Items
                    .Insert(0, "Value1")
                    .Insert(1, "Value2")
                    .Insert(2, "Value3")
            End With
        Else
                With Items
                    .Insert(0, "Value4")
                    .Insert(1, "Value5")
                    .Insert(2, "Value6")
                End With
        End If
    End Sub
End Class

И затем я добавил новый пользовательский элемент управления в свойФорма.
В коде конструктора метода Private Sub InitializeComponent () у меня есть следующее:

Me.Combobox1 = New MyApplication.ComboClass("R")
Me.Combobox2 = New MyApplication.ComboClass("A")

Я получаю следующую ошибку конструктора:

The variable 'Combobox1' is either undeclared or was never assigned. 
The variable 'Combobox2' is either undeclared or was never assigned. 

Я отсутствуетчто-то, но я не знаю, что это такое.
Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 10 февраля 2019

Вместо использования класса Constructor (который не очень полезен, если вы хотите создать свои элементы управления в Designer), вы можете добавить публичное свойство, которое принимает Enumerator (или даже значение String, как вы делаете).здесь), который позволяет вам определять во время разработки предопределенные наборы данных при изменении значения свойства.

В качестве примечания избегайте вмешательства в код Designer.vb.Он обрабатывается дизайнером форм, вы обычно ничего не пишете здесь: он будет удален, как только дизайн формы будет изменен.

Здесь пользовательское свойство называется CustomDataSet.
Код здесь также выпадает из списка ComboBox, чтобы вы могли увидеть, что было установлено.

Вот как это работает:

Custom ComboBox Selector

Imports System.ComponentModel

<DesignerCategory("Code")>
Public Class ComboClass
    Inherits ComboBox

    Public Enum DataSelector
        None = 0
        Set1
        Set2
    End Enum

    Private Selector As DataSelector = DataSelector.None
    Public Sub New()
        MyBase.New()
    End Sub

    <DefaultValue(DataSelector.None)>
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
    Public Property CustomDataSet As DataSelector
        Get
            Return Selector
        End Get
        Set(ByVal value As DataSelector)
            Selector = value
            Me.SetData()
        End Set
    End Property

    Private Sub SetData()
        Me.Items.Clear()
        Select Case Me.Selector
            Case DataSelector.None
            Case DataSelector.Set1
                Me.Items.AddRange({"Value1", "Value2", "Value3"})
            Case DataSelector.Set2
                Me.Items.AddRange({"Value6", "Value7", "Value8"})
            Case Else
                'NOP
        End Select
        If Me.DesignMode Then Me.DroppedDown = True
    End Sub

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...