0

グレーティングス

アプリケーション用のカスタム コントロールが必要です。基本的には式編集 GUI です。たとえば、次のような表現があります。

If variable_x is greater than variable_y

そして、「より大きい」をクリックして、他のコンパレーター (等しい、またはより小さいなど) に変更できます。

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

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

簡単にできる方法があれば教えてください。

ありがとう!

4

1 に答える 1

1

コントロールを拡張して、 onイベントとeventsComboBoxを更新できます。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
    }
}
于 2012-04-13T12:48:57.340 に答える