【问题标题】:Catching click event only in combobox's editable area仅在组合框可编辑区域中捕获单击事件
【发布时间】:2011-03-28 19:56:16
【问题描述】:

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

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

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

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

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

感谢所有提示。

【问题讨论】:

    标签: c# winforms drop-down-menu


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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 ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 2021-06-25
        • 2012-01-15
        相关资源
        最近更新 更多