2012-04-13 3 views
0

貪食コントロールをドロップダウンとして表示するWinForms

私のアプリケーションのカスタムコントロールが必要です。基本的にその式の編集GUIです。あなたは、たとえば、持って表現:

If variable_x is greater than variable_y 

そして、あなたは「より大きい」をクリックして(と同様、同等または未満)他のコンパレータにそれを変更することができます。

コントロールはラベルのように見える必要がありますが、クリックすると、ユーザーが何かを選択できるように、リストビュー(または他のコントロール)を持つドロップダウン(コンボボックスのような)が表示される必要があります。ある意味では、ボックス自体がないコンボボックスが必要で、何か他のもの(この場合はラベル)に置き換えられます。

私はカスタムコントロールを作成する方法を知っています。私は何とかドロップダウンをマウスクリックまたはキー入力に入力し、フックイベントを行う必要があることを理解しています。だから私はこのドロップダウンコントロールを閉じることができます。しかし、私はこれが簡単かどうか(いくつかの組み込みメソッドが存在する)、私はそれをすべて自分で行う必要があるかどうかを知りませんか?ホイールを再開発したくありません....

これを行う簡単な方法があるかどうか教えてください。

ありがとうございます!

+0

WPFに変更する可能性がある場合は、そうすることをお勧めします。 WPFでは、この種のDropDownListをWinFormsより簡単に構築できます。そうでない場合、組み込みのDropDownListだけを使用してはならない理由は何ですか?あなたのタスクは、「通常の」UIの動作から非常に離れているように聞こえ、ユーザにとってより混乱するかもしれません。 –

+0

3つのラベル。中間のものはあなたの「より大きい」テキストであり、そのラベルのコンテキストメニューストリップに追加し、マウスの左クリックでその動作を変更する必要があります。 – Reniuz

+0

ええ、私はContextMenuStripを調整する方が良いと思います。 Btw私はどのようにWinFormsでDropDownListを使用するのですか?それは私のためにツールボックスの可能なコントロールのリストに表示されません。 – Istrebitel

答えて

1

ComboBoxコントロールを拡張してDropDownStyleEnterLostFocusイベントに更新することができます。

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 
    } 
} 
関連する問題