0

问候

我需要为我的应用程序提供自定义控件。基本上它是一个表达式编辑 GUI。你有,说,表达:

If variable_x is greater than variable_y

您可以单击“大于”并将其更改为其他比较器(例如,等于或小于)。

因此,该控件必须看起来像一个标签,但是当您单击它时,它必须显示一个下拉列表(就像组合框一样),其中包含一个列表视图(或者可能是其他一些控件),以便用户可以选择一些东西。从某种意义上说,我需要一个没有盒子本身的组合框,用其他东西代替(在这种情况下,是一个标签)。

我知道如何制作自定义控件,我知道我必须以某种方式在鼠标单击或输入按键时 DropDown,并挂钩事件,以便当我放下的任何东西都关闭时,做出选择,并且还以某种方式跟踪用户是否点击了其他地方,这样我就可以关闭这个下拉控件。但我不知道这是否容易做到(存在一些内置方法)还是我必须自己做?不想重新开发轮子......

请告诉我是否有简单的方法可以做到这一点。

谢谢!

4

1 回答 1

1

您可以扩展ComboBox控件以更新DropDownStyleonEnterLostFocus事件。

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 回答