none
2個combobox間的資料共用 RRS feed

  • 問題

  • 各位先進大家好:
          煩請各位幫我解答一個問題
    我現在設計有2個combobox:一個是cbb1, 另一個是cbb2
    現在cbb1及cbb2的items各有a, b, c, d, e共5個項目,請問
    如果現在cbb1已經選取了c,要如何讓cbb2的items中不出現c,只出現a, b, d, e等4個項目呢?
    先謝謝各位先進的回答了
                                              farlie21  敬上
    2009年5月27日 上午 06:53

解答

  • 程式碼貼上來排版變很奇怪 我測試的程式,您下載參考看看
    http://140.116.84.24:8080/DISK/WinForm/MSDN20090527.rar
    2009年5月27日 上午 07:18
    版主
  • Public Class Form1
    
        Private _dropDownItems() As String = New String() {"a", "b", "c", "d", "e"}
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ComboBox1.Items.AddRange(_dropDownItems)
        End Sub
    
        Private Sub ComboBox2_DropDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.DropDown
            With ComboBox2.Items
                .Clear()
                .AddRange(_dropDownItems)
                .Remove(ComboBox1.SelectedItem)
            End With
        End Sub
    End Class
    
    



    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 farlie21 2009年5月27日 上午 07:58
    2009年5月27日 上午 07:24

所有回覆

  • 程式碼貼上來排版變很奇怪 我測試的程式,您下載參考看看
    http://140.116.84.24:8080/DISK/WinForm/MSDN20090527.rar
    2009年5月27日 上午 07:18
    版主
  • Public Class Form1
    
        Private _dropDownItems() As String = New String() {"a", "b", "c", "d", "e"}
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ComboBox1.Items.AddRange(_dropDownItems)
        End Sub
    
        Private Sub ComboBox2_DropDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.DropDown
            With ComboBox2.Items
                .Clear()
                .AddRange(_dropDownItems)
                .Remove(ComboBox1.SelectedItem)
            End With
        End Sub
    End Class
    
    



    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 farlie21 2009年5月27日 上午 07:58
    2009年5月27日 上午 07:24
  • 小歐ou謝謝你喔!!很有幫助!!
    另外想請教幾個問題:
    你們都怎麼學VB的呢?我是買書自學,但學的都只是簡單的語法而已,因為書中沒介紹所有有關combobox的指令,
    如addrange,所以還真的不知道如何去開始這個程式?
    另外你們有推薦的學習方法嗎?
    Public Class Form1

        Private strItm() = {"a", "b", "c", "d", "e"}--->這一行的資料可以在屬性欄內的ITEMS中的集合去輸入嗎?
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.cbb1.Items.AddRange(strItm)
            Me.cbb2.Items.AddRange(strItm)
        End Sub

        Private Sub cbb1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbb1.SelectedIndexChanged
            Me.cbb2.Items.Clear()
            Me.cbb2.Items.AddRange(strItm)
            Me.cbb2.Items.Remove(cbb1.SelectedItem)
        End Sub
    End Class

    2009年5月27日 上午 07:57
  • Public Class Form1
    
        Private Sub ComboBox2_DropDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.DropDown
            Try
                ComboBox2.BeginUpdate()
                With ComboBox2.Items
                    .Clear()
                    For Each item As Object In ComboBox1.Items
                        .Add(item)
                    Next
                    .Remove(ComboBox1.SelectedItem)
                End With
            Finally
                ComboBox2.EndUpdate()
            End Try
        End Sub
    End Class
    
    

    http://www.dotblogs.com.tw/larrynung/
    2009年5月27日 上午 08:13
  • 蹂躪,謝謝您的解答,也相當有幫助!!
    另外請教一下
    Public Class Form1

        Private _dropDownItems() As String = New String() {"a", "b", "c", "d", "e"}

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ComboBox1.Items.AddRange(_dropDownItems)--->為什麼這行要寫在Form1_Load下面,為什麼不寫在cbb1_SelectedIndexChanged下面呢?
        End Sub

        Private Sub ComboBox2_DropDown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.DropDown
                         ~~~~~~~~~~~~~~~~底線上面ComboBox2_DropDown這個指令是自己輸入的嗎?還是會自動產生呢?
            With ComboBox2.Items
                .Clear()
                .AddRange(_dropDownItems)
                .Remove(ComboBox1.SelectedItem)
            End With
        End Sub
    End Class
    謝謝你喔!!
    2009年5月27日 上午 08:24
  • 一開始沒下拉選單的話
    是沒東西選的
    所以不會觸發SelectedIndexChanged
    當然你有在屬性鍵入的話就另當別論
    Form_Load那段就可以不用
    直接改為我第二篇回的就可以了

    ComboBox2_DropDown是事件處理函式
    不是指令
    要自己打或是自動產生都可以
    要自動產生的話
    就在設計介面選取ComboBox2
    屬性視窗切到事件
    找到DropDown事件連點兩下
    就會自動產生了

    不過在ComboBox2的DropDown事件處理效果不會比小歐在ComboBox1的SelectedIndexChanged事件處理來得好
    因為DropDown事件是每次下拉清單顯現就塞一次
    執行次數會較SelectedIndexChanged多

    http://www.dotblogs.com.tw/larrynung/
    2009年5月27日 上午 08:38
  • 1. 書通常會教基本的東西,假如想要更深入了解控制項的屬性與方法,可以到MSDN中查詢
        查詢MSDN的方式可以參考小朱的文章
        http://www.dotblogs.com.tw/regionbbs/archive/2009/05/17/how_to_use_msdn_library.aspx
        另外,可以點部落之類的技術社群網站學習技術
        http://www.dotblogs.com.tw/

    2. 針對您第二個問題,有寫另外一個範例程式,您可以下載參考看看
        http://140.116.84.24:8080/DISK/WinForm/MSDN20090527164400.rar
    2009年5月27日 上午 08:46
    版主