none
ComboBox可否重覆選取,讓文字可以append到原來的text 之後 RRS feed

  • 問題

  • 在winform中欲使用combobox作選項控制項,但希望可重覆選取,並讓選項文字可以append到原來的combobox.text 之後,例如" 台北,台中,高雄 ",但每次select之後,combobox會自動將combobox.text 設為combobox.selectitem ,我該在那個method設定才能達成目的?
    2006年8月24日 下午 01:21

解答

  • HI,

    如果是要將使用者在程式中選取的內容填入到ComboBox, 您可以在使用者選中程式提供的資料後, 例如在TextBox輸入好資料, 並按下Button控制項, 您就可以在Button控制項的Click事件中執行以下的程式碼:

    Dim i as Integer=ComboBox物件.Items.Add(TextBox物件.Text)

    ComboBox物件.SelectedIndex=i

    就可以在ComboBox控制項顯示使用者選中的內容

    tihs

     

    2006年8月25日 上午 11:22
  • HI,

    後來我想了一個愚笨的方法:

    1.引入名稱空間

        Imports System.Runtime.InteropServices
        Imports System.Threading

    2. 宣告類別的變數

        Private s As String
        Private t As Thread

    3. 宣告Win32方法

        <DllImport("User32.Dll")> _
        Public Shared Sub SetWindowText(ByVal Handle As Integer, ByVal s As String)

        End Sub

    4. 製作UpdateText方法

        Private Sub UpdateText()
            SetWindowText(ComboBox1.Handle, s)
        End Sub

    5. 在ComboBox的SelectedIndexChanged事件處理程序中利用執行緒更新ComboBox的文字框的內容

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles    ComboBox1.SelectedIndexChanged
            s &= ComboBox1.SelectedItem & " "
            t = New Thread(AddressOf UpdateText)
            t.Start()
        End Sub

    就可以達到您要求的效果了

    tihs

    2006年8月29日 上午 01:58

所有回覆

  • HI,

    combobox每次select之後,會自動將combobox.text 設為被選中項目的內容, 如果要將被選中的內容全部顯示到TextBox控制項, 只要將新選中的內容串連到TextBox控制項的Text屬性即可

     

    2006年8月25日 上午 01:02
  • 很謝謝您的回覆!

    我目前的作法即是用程式將新選中的內容串連到combobox控制項的Text屬性,可是每次我選完也改完combobox.text屬性後又會自動被改回所選內容,我想是我程式碼所放的method其執行順序在combobox的動作之前,所以我應該放在那個method中才對呢?

    2006年8月25日 上午 07:40
  • HI,

    如果是要將使用者在程式中選取的內容填入到ComboBox, 您可以在使用者選中程式提供的資料後, 例如在TextBox輸入好資料, 並按下Button控制項, 您就可以在Button控制項的Click事件中執行以下的程式碼:

    Dim i as Integer=ComboBox物件.Items.Add(TextBox物件.Text)

    ComboBox物件.SelectedIndex=i

    就可以在ComboBox控制項顯示使用者選中的內容

    tihs

     

    2006年8月25日 上午 11:22
  • 很抱歉 ,我的問題可能不夠明確 所以讓您誤會了,

    重新再說明我的問題:

    當我在Combobox的下拉框中點選後,上面的文字框就會自動填入所選項目

    可是我可能會重複下拉選擇好幾次,並且讓所選項目都顯示在一起上面的文字框

    例如第一次選擇"台北市",上面的文字框show"台北市",第二次又選擇"台中市",希望上面的文字框show"台北市,台中市",

    類似如此,讓重複選擇的項目依序append到上面的文字框所顯示的文字

     

     

    2006年8月26日 下午 12:56
  • HI,

    那您可以在ComboBox控制項的SelectedIndexChanged事件處理程序中加入以下的程式碼

    TextBox1.Text &= ComboBox1.Text

    應該就可以達到您的目地了

    tihs

    2006年8月27日 上午 06:31
  • HI

    1.我是想將選項show在ComboBox控制項的文字框,而非其它textbox

    2.當執行離開SelectedIndexChanged事件處理程序時,ComboBox.Text還是如我所預期有append在後,可是最後show在ComboBox控制項的文字框裏的卻只有當次選項內容,到底combobox在離開SelectedIndexChanged事件處理程序之後,又做了那些動作導致ComboBox.Text又被改變了

     

    FelixWang

    2006年8月27日 下午 02:40
  • HI,

    我大概了解您要做的效果了, 這個問題看來有點棘手...

    tihs

    2006年8月28日 下午 01:38
  • HI,

    後來我想了一個愚笨的方法:

    1.引入名稱空間

        Imports System.Runtime.InteropServices
        Imports System.Threading

    2. 宣告類別的變數

        Private s As String
        Private t As Thread

    3. 宣告Win32方法

        <DllImport("User32.Dll")> _
        Public Shared Sub SetWindowText(ByVal Handle As Integer, ByVal s As String)

        End Sub

    4. 製作UpdateText方法

        Private Sub UpdateText()
            SetWindowText(ComboBox1.Handle, s)
        End Sub

    5. 在ComboBox的SelectedIndexChanged事件處理程序中利用執行緒更新ComboBox的文字框的內容

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles    ComboBox1.SelectedIndexChanged
            s &= ComboBox1.SelectedItem & " "
            t = New Thread(AddressOf UpdateText)
            t.Start()
        End Sub

    就可以達到您要求的效果了

    tihs

    2006年8月29日 上午 01:58
  • HI

    太感謝了!終於可以達到需求了

    不過不太瞭解步驟3,4是如何work的 而且為何ComboBox的SelectedIndexChanged事件處理程序中利用執行緒更新ComboBox的文字框的內容後卻不會被ComboBox改掉??

    不知this兄可否說明一下程式邏輯 因為我對於thread不甚瞭解

    另外在步驟5中需加入Control.CheckForIllegalCrossThreadCalls = False

    不然會有errormessage

    THANKS!!!

    Felixwang

    2006年8月29日 下午 03:05
  • HI,

    我放執行緒主要的用意就是等ComboBox控制項更新成使用者選取的項目後再呼叫SetWindowText函數覆蓋ComboBox控制項自動顯示的內容, 不過在我的電腦上不需要加入Control.CheckForIllegalCrossThreadCalls = False, 就可以正常執行

    tihs

    2006年8月30日 上午 12:44