仅在组合框的可编辑区域中捕获点击事件

时间:2011-03-28 19:56:16

标签: c# winforms drop-down-menu

我试图以下列方式使用C#WinForms组合框:

a)常规使用:如果按下“向下箭头”按钮,下拉区域将打开,用户选择所需的项目 - 没有问题..

b)高级用法:如果用户点击下拉控件的可编辑区域,则会打开另一个带有高级选择机制的对话框。

目前,我正在调用combobox的onclick事件处理程序中的高级对话框。但是,现在经常使用DropDownbox不再可用了。即使您仅单击下拉箭头,高级对话框也会打开。

我找不到另一个我可以使用的事件,所以我假设我必须检查eventhandler,如果用户点击了控件的可编辑部分或控件的按钮。有任何想法如何有效地做到这一点?

感谢所有提示。

2 个答案:

答案 0 :(得分:0)

有两件有趣的事件; DropDown和Click。以“正常”方式处理DropDown。对于Click,您可能实际上尝试处理MouseDown,其中包括坐标。将这些坐标(基于光标在整个屏幕上的位置)转换为相对于控件的位置,如果鼠标当前位于控件的箭头部分,则只需退出并允许默认行为发生。否则,显示更高级的下拉列表。

答案 1 :(得分:0)

我做到了(不是很漂亮,但它有效)

void comboBox_Click(object sender, EventArgs e)
{
    // Calculate cursor position
    Point pointCursorLocal = this.PointToClient(Cursor.Position);

    // Calculate rectangle of working area.
    Rectangle rectangle = this.comboBox.Bounds;
    rectangle.Size = new Size(rectangle.Size.Width - 10, rectangle.Height);

    // Check them
    if (rectangle.Contains(pointCursorLocal))
        // CLICK ON WORKING AREA ...
}