1

私は Windows フォーム アプリケーションに取り組んでいます。DropDownList の DropDownStyle を持つ ComboBox があります。また、フォームの読み込み時に最初に入力される ListBox もあり、次に選択されたものに基づいて、ComboBox の SelectedValueChanged イベントを使用して前述の ComboBox になります。私が抱えている問題は、ComboBox で同じ項目を 2 回続けて選択すると、ListBox の項目が変化することです。望ましい結果は、この状況で ListBox 内の項目が同じままであることです。どうすればこれを修正できますか?

Option Strict On
Option Explicit On
Option Infer Off

Public Class frmGameScreen

    Private Sub btnQuit_Click(sender As System.Object, e As System.EventArgs) Handles btnQuit.Click

        Me.Close()

    End Sub

    Private Sub frmGameScreen_Load(sender As Object, e As System.EventArgs) Handles Me.Load

        Dim intAstrometricProbes As Integer
        Dim intCasesOfMedicalSupplies As Integer
        Dim intCommunicationsArrays As Integer
        Dim intProvisions As Integer
        Dim intSelfSealingStemBolts As Integer
        Dim intShieldGenerators As Integer
        Dim intWarpCoils As Integer

        cboPlanets.SelectedItem = "Ferenginar"
        lblItemPrice.Text = ""

        PopulateItemList()

    End Sub

    Private Sub lstItems_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles lstItems.SelectedValueChanged

        'lblItemPrice.Text = lstItems.Text
        lblItemPrice.Text = CStr(cboPlanets.SelectedIndex)

    End Sub

    Private Sub cboPlanets_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles cboPlanets.SelectedValueChanged

        PopulateItemList()

    End Sub

    Sub PopulateItemList()

        Dim rndRandomNum As New Random
        Dim intDisplay As Integer

        lstItems.Items.Clear()

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Astrometric Probes")
        End If

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Cases of Medical Supplies")
        End If

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Communications Arrays")
        End If

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Provisions")
        End If

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Self-Sealing Stem Bolts")
        End If

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Shield Generators")
        End If

        intDisplay = rndRandomNum.Next(1, 11)
        If intDisplay > 5 Then
            lstItems.Items.Add("Warp Coils")
        End If

    End Sub

End Class
4

1 に答える 1

1

現在の値をコンボボックスに保存し、値が同じ場合は PopulateItemList を呼び出さない

Private Sub cboPlanets_SelectedValueChanged(sender As Object, ......

    Dim idx As Integer = cboPlanets.SelectedIndex
    if idx <> currentItemIndex Then
         currentItemIndex = idx
         PopulateItemList() 
    End If
End Sub 

currentItemIndex は、グローバル フォーム レベルで次のように宣言されます。

Dim currentItemIndex as Integer = -1
于 2012-08-10T08:00:17.757 に答える