2010-03-30 69 views
2

當C#中的組合框動態填充時,組合框顯示爲空白,直到用戶單擊它以查看下拉列表中的可用項目。理想情況下,我想使用這個空白區域(在點擊下拉菜單之前)用於向用戶提供關於他/她應該做什麼的提示。例如,它可能會這樣說:「選擇這樣那樣的......」有沒有辦法做到這一點?我嘗試設置文本屬性,但沒有做任何事情。我正在使用Microsoft Visual C#2008速成版。謝謝。如何將C#comboBox中的空白空間填充爲用戶的提示?

回答

5

添加了「提示」項組合框:

yourComboBox.Items.Insert(0, "Select one"); 

然後設置組合框的選擇指數爲0,這樣的:

yourComboBox.SelectedIndex = 0; 
+0

是的,但如果ComboBox是數據綁定將無法正常工作... – 2010-03-30 21:42:28

+0

我還沒有嘗試過在C#中,但我知道在VB.Net你仍然可以添加項目即使它是數據綁定的組合框。技巧是按照插入數據的順序(在數據綁定之前插入數據)。 – 2010-03-30 21:55:55

0

集comboBox.SelectedText而不是文本。 (Yay的一致性。)

0

所有你需要做的就是設置一個事件處理程序。在這種情況下,點擊事件處理程序應該工作。添加如下內容:

private void comboBox1_Click(object sender, EventArgs e) 
{ 
     comboBox1.Text = "Please select...?"; 
} 
6

它被稱爲「提示橫幅」。 Windows窗體不支持它,但它可以用螺栓固定。爲您的項目添加一個新類並粘貼下面顯示的代碼。編譯。將工具箱頂部的按鈕和新控件放到窗體上。將Cue屬性設置爲要顯示的文本。 Vista或Win7需要,只有組合框沒有焦點時,纔會顯示提示。

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

public class ComboBoxEx : ComboBox { 
    private string mCue; 
    public string Cue { 
     get { return mCue; } 
     set { 
      mCue = value; 
      updateCue(); 
     } 
    } 
    private void updateCue() { 
     if (this.IsHandleCreated) 
      SendMessageCue(this.Handle, CB_SETCUEBANNER, IntPtr.Zero, mCue ?? ""); 
    } 
    protected override void OnHandleCreated(EventArgs e) { 
     base.OnHandleCreated(e); 
     updateCue(); 
    } 
    // P/Invoke 
    private const int CB_SETCUEBANNER = 0x1703; 
    [DllImport("user32.dll", EntryPoint="SendMessageW", CharSet = CharSet.Auto)] 
    private static extern IntPtr SendMessageCue(IntPtr hWnd, int msg, IntPtr wp, string lp); 
} 
+1

+1,我不知道這是可能的......它可能會派上用場;) – 2010-03-30 21:40:05

+1

順便說一句,你的實現阻止用戶清除提示,因爲當字符串爲空時你沒有調用SendMessageCue .. 。 – 2010-03-30 21:42:01

+1

是的。嗯,你爲什麼要清除它?代碼調整。 – 2010-03-30 21:44:50

0

集:

comboBox.SelectedIndex = -1 
+1

?這看起來好像只是選擇列表中的第一個選項,而不是實際提示到選擇框中。它是如何工作的? – 2012-08-28 05:29:13