VB.Net меняет изображение кнопки, выбирая элемент Combobox - PullRequest
0 голосов
/ 01 августа 2011

Я почти уверен, что это должно работать, но у меня это не работает.

Так что, может быть, вы можете мне помочь.

Я получил Combobox с некоторыми элементами (item1-item7) для выбора и 54 кнопки (sButton1-sButton54). Также массив (53) называется кнопками. Массив заполнен элементами для выбора, такими как: Buttons (0) = "элемент 1, элемент 2"

Каждый раз, когда выбирается другой элемент в выпадающем списке, я бы хотел, чтобы только некоторые кнопки изменили свое изображение. Поэтому я получил массив. Если выбран элемент 1 и кнопки (0) содержат элемент1, я бы хотел изменить изображение кнопки 1.

edit: работает с изменением изображения каждой кнопки:

sButton1.Image = My.Resources.image1

Но я бы предпочел изменить все за один раз (цикл).

sButton(0) = "item1, item2, item3"
sButton(1) = "item2, item3"
sButton(2) = "item1, item3"

...

Select Case ComboBox.SelectedItem

Case "item1"
                    For i = 0 To 53
                        If sButton(i).Contains("item1") Then
                            'sButton1.Image = My.Resources.image1
                            Me.Controls("sButton" & ((i + 1).ToString)).Enabled = True
                            Me.Controls("sButton" & ((i + 1).ToString)).Visible = True
                        Else
                            Me.Controls("sButton" & ((i + 1).ToString)).Enabled = False
                            Me.Controls("sButton" & ((i + 1).ToString)).Visible = False
                        End If
                    Next

Ответы [ 2 ]

0 голосов
/ 02 августа 2011

Мое решение состоит в том, чтобы заполнить ComboBox структурами, которые перечисляют состояние каждой кнопки.

Public Class Form1

    Private Structure ButtonConfig
        Public Text As String
        Public ButtonStates As Boolean()

        Public Sub New(Text As String, ButtonStates As Boolean())
            Me.Text = Text
            Me.ButtonStates = ButtonStates
        End Sub

        Public Overrides Function ToString() As String
            Return Text
        End Function
    End Structure

    Public Sub New()
        InitializeComponent()
        ComboBox1.Items.Add(New ButtonConfig("Config 1", New Boolean() {True, True, False, False, ...}))
        ComboBox1.Items.Add(New ButtonConfig("Config 2", New Boolean() {True, False, True, False, ...}))
        ComboBox1.Items.Add(New ButtonConfig(...)
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        If ComboBox1.SelectedIndex <> -1 Then
            Dim ButtonStates As Boolean() = CType(ComboBox1.SelectedItem, ButtonConfig).ButtonStates
            Dim ButtonState As Boolean
            For Index As Integer = 0 To ButtonStates.Length - 1
                ButtonState = ButtonStates(Index)
                With Me.Controls("sButton" & ((Index + 1).ToString))
                    .Enabled = ButtonState
                    .Visible = ButtonState
                End With
            Next
        End If
    End Sub
End Class
0 голосов
/ 01 августа 2011

Сначала я бы объявил переменную области видимости формы

Dim imglist As New ImageList

в событии загрузки формы:

call LoadImageList:

, которая заполнит ваш imageList изображениями и ключом для каждого изображения

В LoadImageList добавьте запись для каждого изображения, которое вы хотите иметь доступным для кнопки.

Private Sub LoadImageList()
    Me.ImageList1.Images.Add("key that matches the text in your combobox (Frog)", New Bitmap("c:\pathtoyourimages.jpg"))
    Me.ImageList1.Images.Add("Dog", New Bitmap("c:\dog.jpg"))
    'Do this for each images and you will have an image list that can be used to change you button.

End Sub

Далее вам понадобится обработчик для вашего клика со списком.

      Private Sub cmbYourCombobox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbUserPassword.SelectedIndexChanged

    Dim cmb As ComboBox = TryCast(sender, ComboBox)
    If cmb IsNot Nothing Then ' This line checks to ensure that only a combobox is able to trigger this event.
        Me.btnSave.Image = imglist.Images(cmb.Text)
    End If
End Sub

Если вам нужна помощь в реализации этого, дайте мне знать.

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