1

我们有一个定制的 WinForms 网格控件,它继承了标准的 Control 类。用户可以在设计时使用我们的自定义动词和交互式列集合编辑器创建列,但他们不能在设计时使用正常的鼠标操作以交互方式调整已创建列的大小(类似于 Windows 资源管理器中的列大小调整)。

为了实现这一点 - 即当鼠标指针位于其区域上方时,将所有鼠标输入传递给网格标题,我们覆盖了附加到我们控件的设计器的 GetHitTest 方法(继承 ControlDesigner)。从结构上看,它如下所示:

protected override bool GetHitTest(System.Drawing.Point point)
{
  if (IsMouseInGridHeaderArea())
    return true;
  else
    return false;
}

当我们只是移动鼠标指针时,一切几乎都按预期工作:当用户将鼠标移到列标题上时,列标题在设计时正确突出显示,当鼠标指针更改为双箭头 WE-resize 光标时位于列分隔符区域上方。后一种情况的唯一小问题是光标不断变回 4 箭头光标,这表明可以选择/移动整个控件(WinForms 表单设计器中表单上所有控件的标准行为)。

当我们在可以执行列大小调整时按住鼠标左键时,什么也没有发生。甚至整个网格控件也不会在表单上移动。

如何解决这个问题?

4

0 回答 0