none
請問要如何在 ComboBox 中顯示提示文字呢? RRS feed

  • 問題

  • 請問要如何在 Combobox 上執行時顯示提示字串呢?  像是在 Combobox 上顯示 "選擇姓名",提示使用者可以點選下拉式清單,然後點開下拉式清單去選擇 index = 0 的項目。

    請問要如何實現類似 "提示字串" 的功能呢?



    下方是我的完整程式碼;

        Dim table1 As DataTable = New DataTable       

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim str As String = "Provider=Microsoft.Jet.Oledb.4.0;Data source=C:\ac.mdb"
            Dim conn As OleDbConnection = New OleDbConnection(str)
            conn.Open()


            Dim str1 As String = "Select * from 客戶"
            Dim adp1 As OleDbDataAdapter = New OleDbDataAdapter(str1, conn)


            Dim set1 As DataSet = New DataSet
            adp1.Fill(set1, "客戶")


            table1 = set1.Tables("客戶")
            ComboBox1.DataSource = table1
            ComboBox1.DisplayMember = "姓名"
     
           conn.Close()
        End Sub


        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

            TextBox1.Text = table1.Rows(ComboBox1.SelectedIndex)("ID")
            TextBox2.Text = table1.Rows(ComboBox1.SelectedIndex)("性別")
            TextBox3.Text = table1.Rows(ComboBox1.SelectedIndex)("電話")
            TextBox4.Text = table1.Rows(ComboBox1.SelectedIndex)("住址")
            TextBox5.Text = table1.Rows(ComboBox1.SelectedIndex)("生日")

       End Sub





    ----------------------------------------------------------------------------------------------------------


    我在程式中這樣修改但執行的結果跟原來的一樣;


             table1 = set1.Tables("客戶")
             ComboBox1.DataSource = table1
             ComboBox1.DisplayMember = "姓名"
             ComboBox1.Text = "選擇姓名"                      '<------多了這一行

    或在 Combobox 中,執行結果也是相同;

            ComboBox1.Text = "選擇姓名"                       '<------多了這一行
            TextBox1.Text = table1.Rows(ComboBox1.SelectedIndex)("ID")
            TextBox2.Text = table1.Rows(ComboBox1.SelectedIndex)("性別")
            TextBox3.Text = table1.Rows(ComboBox1.SelectedIndex)("電話")



    • 已編輯 C.Kevin 2012年3月3日 上午 08:25
    2012年3月3日 上午 08:19

解答


  • 以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 C.Kevin 2012年3月7日 上午 01:45
    2012年3月6日 下午 03:47
  • 看了你的程式碼,我找到我的程式碼一直無法 index = -1 的原因了,
    因為 Rows() 沒有 -1 的儲存格,處理這問題後這樣你的方法就會動了。
    謝謝你~~~~ : )

    Combobox 中的項目被選定後,項目會被反白顯示在 Combobox 中,
    不過因為屬性 DropDownStyle = DropDown 的關係,可以用鍵盤的 Backspace、Esc、Delete 鍵刪除被選中的反白項目,
    這時設定 ComboBox1_Leave 事件可以大致改善 Combobox "提示文字" 只會顯一次的情況,
    以這篇問題,Combobox_DropDownClosed 事件作用似乎不大,因為 SelectedIndex 無法再選回 Index = -1 了。

    測試程式碼:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim str As String = "Provider=Microsoft.Jet.Oledb.4.0;Data source=C:\ac.mdb"
            Dim conn As OleDbConnection = New OleDbConnection(str)
            conn.Open()

            Dim str1 As String = "Select * from 客戶 "
            Dim adp1 As OleDbDataAdapter = New OleDbDataAdapter(str1, conn)

            Dim set1 As DataSet = New DataSet
            adp1.Fill(set1, "客戶")

            table1 = set1.Tables("客戶")
            ComboBox1.DataSource = table1
            ComboBox1.DisplayMember = "姓名"
            ComboBox1.SelectedIndex = -1

            conn.Close()
        End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

            If ComboBox1.SelectedIndex < 0 Then
                ComboBox1.Text = "122"
            Else
                TextBox1.Text = table1.Rows(ComboBox1.SelectedIndex)("ID")
                TextBox2.Text = table1.Rows(ComboBox1.SelectedIndex)("性別")
                TextBox3.Text = table1.Rows(ComboBox1.SelectedIndex)("電話")
                TextBox4.Text = table1.Rows(ComboBox1.SelectedIndex)("住址")
                TextBox5.Text = table1.Rows(ComboBox1.SelectedIndex)("生日")
            End If
        End Sub

    Private Sub ComboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.Leave
            If ComboBox1.Text.Equals(String.Empty) Then
                ComboBox1.Text = "122"
            End If
        End Sub



    • 已標示為解答 C.Kevin 2012年3月7日 上午 01:45
    • 已編輯 C.Kevin 2012年3月7日 上午 01:51
    2012年3月7日 上午 01:44

所有回覆

  • 參考小章的文章

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已提議為解答 91MVP 2012年3月3日 上午 08:44
    2012年3月3日 上午 08:40
  • 謝謝~~~
    所以 VB.Net 沒有這樣的功能就是了~~

    2012年3月5日 上午 01:26
  • 範例不是用VB.Net寫的嗎?

    2012年3月5日 上午 01:47
  • 範例有,跟想要的不一樣而已啦~~


    像現在這一頁的發問,頁面最上頭的 Bing 搜尋引擎的 Box 那樣,
    Box 中用灰色字串提示使用者可以在那邊輸入文字。
    2012年3月5日 上午 02:07
  • 我本來是想說讓 ComboBox 預選在 Index = -1
    ComboBox.text = "選擇客戶" 這樣嘗試完成想要的結果,但是弄不出來..
    2012年3月5日 上午 03:42
  • 如果你的combobox 有繫結 資料來源 是不能加item的

    如果你的combobox DropDownStyle 設為 DropDownList 則 combobox Text屬性會被忽略


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年3月5日 上午 03:59
  • 我的 DropDownStyle 是預設的 DropDown
    沒有要在 Item 中加資料。


    • 已編輯 C.Kevin 2012年3月5日 上午 05:18
    2012年3月5日 上午 05:08
  • 設定 SelectedIndex = -1

    在 OnSelectedIndexChanged , OnDropDown , OnDropDownClosed三個Event Handle中

    設定字型有無斜體 及 文字顏色


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年3月5日 下午 02:20
  • 無法設定 SelectedIndex = -1
    F5 除錯時出現「
    位置 -1 沒有資料列。」~

    2012年3月6日 上午 03:11

  • 以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 C.Kevin 2012年3月7日 上午 01:45
    2012年3月6日 下午 03:47
  • 看了你的程式碼,我找到我的程式碼一直無法 index = -1 的原因了,
    因為 Rows() 沒有 -1 的儲存格,處理這問題後這樣你的方法就會動了。
    謝謝你~~~~ : )

    Combobox 中的項目被選定後,項目會被反白顯示在 Combobox 中,
    不過因為屬性 DropDownStyle = DropDown 的關係,可以用鍵盤的 Backspace、Esc、Delete 鍵刪除被選中的反白項目,
    這時設定 ComboBox1_Leave 事件可以大致改善 Combobox "提示文字" 只會顯一次的情況,
    以這篇問題,Combobox_DropDownClosed 事件作用似乎不大,因為 SelectedIndex 無法再選回 Index = -1 了。

    測試程式碼:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim str As String = "Provider=Microsoft.Jet.Oledb.4.0;Data source=C:\ac.mdb"
            Dim conn As OleDbConnection = New OleDbConnection(str)
            conn.Open()

            Dim str1 As String = "Select * from 客戶 "
            Dim adp1 As OleDbDataAdapter = New OleDbDataAdapter(str1, conn)

            Dim set1 As DataSet = New DataSet
            adp1.Fill(set1, "客戶")

            table1 = set1.Tables("客戶")
            ComboBox1.DataSource = table1
            ComboBox1.DisplayMember = "姓名"
            ComboBox1.SelectedIndex = -1

            conn.Close()
        End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

            If ComboBox1.SelectedIndex < 0 Then
                ComboBox1.Text = "122"
            Else
                TextBox1.Text = table1.Rows(ComboBox1.SelectedIndex)("ID")
                TextBox2.Text = table1.Rows(ComboBox1.SelectedIndex)("性別")
                TextBox3.Text = table1.Rows(ComboBox1.SelectedIndex)("電話")
                TextBox4.Text = table1.Rows(ComboBox1.SelectedIndex)("住址")
                TextBox5.Text = table1.Rows(ComboBox1.SelectedIndex)("生日")
            End If
        End Sub

    Private Sub ComboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.Leave
            If ComboBox1.Text.Equals(String.Empty) Then
                ComboBox1.Text = "122"
            End If
        End Sub



    • 已標示為解答 C.Kevin 2012年3月7日 上午 01:45
    • 已編輯 C.Kevin 2012年3月7日 上午 01:51
    2012年3月7日 上午 01:44