2012-04-13 59 views
0

GretingsC#WinForms將控件顯示爲下拉列表

我需要爲我的應用程序提供自定義控件。基本上它是一個表達式編輯GUI。你有,比如說,表達:

If variable_x is greater than variable_y 

而且你可以點擊「大於」並將其更改爲其他比較(如,等於或小於)。因此

控制必須看起來像一個標籤,但是當你點擊它,它必須顯示一個下拉(如組合框一樣)有一個ListView內(或者一些其他控制),使用戶可以選擇的東西。從某種意義上說,我需要在不盒子本身,別的東西(在這種情況下,標籤)取代的組合框。

我知道如何製作自定義控件,我知道我必須以某種方式在鼠標單擊或輸入按鍵時進行DropDown,並勾選事件,以便在我放棄的任何事物關閉時做出選擇,並以某種方式追蹤用戶是否在其他地方點擊過所以我可以關閉這個下拉控件。但我不知道這是很容易做到(一些內置的方法存在),或者我需要做的這一切我自己?不想重建輪....

請告訴我,如果有簡單的方法可以做到這一點。

謝謝!

+0

如果你有可能改變爲WPF,那麼我建議你這樣做。使用WPF,您可以比使用WinForms更容易地構建這種DropDownList。如果沒有,那麼問題是什麼原因,你沒有隻使用內置的DropDownList?你的任務聽起來像離「平常」的UI行爲很遠,可能會讓用戶感到困惑。 – 2012-04-13 10:42:10

+0

3個標籤。在中間一個是你的「更大」的文本,並添加到該標籤的上下文菜單條,你需要改變行爲,以鼠標左鍵單擊顯示它。 – Reniuz 2012-04-13 10:46:06

+0

我猜我擺脫扭捏的ContextMenuStrip更好。順便說一句,我如何在WinForms中使用DropDownList,它不出現在我的工具箱中可能的控件列表中 – Istrebitel 2012-04-13 10:52:52

回答

1

您可以擴展ComboBox控件以更新EnterLostFocus事件中的DropDownStyle

public partial class MyComboBox : ComboBox 
{ 
    public MyComboBox() 
    { 
     InitializeComponent(); 

     this.Dock = DockStyle.Fill; 

     this.SelectionChangeCommitted += this.OnComboBoxSelectionChangeCommitted; 
     this.Enter += this.OnControlEnter; 
     this.LostFocus += this.OnComboBoxLostFocus; 
    } 

    private void OnControlEnter(object sender, EventArgs e) 
    { 
     this.DropDownStyle = ComboBoxStyle.DropDownList; 
    } 

    private void OnComboBoxLostFocus(object sender, EventArgs e) 
    { 
     this.DropDownStyle = ComboBoxStyle.Simple; 
    } 

    private void OnComboBoxSelectionChangeCommitted(object sender, EventArgs e) 
    { 
     // Notify to update other controls that depend on the combo box value 
    } 
}