0

我正在尝试创建一个用户控件,该控件将在自定义 IDesignerHost 实现中提供两个面板之间的可拖动拆分器 - 就像 SplitContainer 一样。据我所知,SplitContainer 本身不是一种选择。除非在 Visual Studio 的设计器中使用,否则它将引发异常。

我的实现大致如下所示,除了我没有收到必要的鼠标事件。我在用户控件本身、主机控件和父窗体中尝试了事件处理程序、On*覆盖和覆盖WndProc,但我似乎没有在任何地方WM_MOUSEMOVE接收或事件。根据这个错误报告,我应该在“控件设计器”中收到;我不确定在这种情况下指的是什么。WM_LBUTTONDOWNWM_LBUTTONUPWM_MOUSEMOVE

有什么想法可以实现可拖动的拆分器吗?

4

1 回答 1

0

事实证明这很容易——一旦你知道怎么做。

  1. Designer控件上的属性设置为继承自ControlDesigner.
  2. 覆盖该OnSetCursor方法,以便在拆分器区域上方时分别显示HSplitVSplit光标。根据这张票,请确保不要设置控件的光标(这会导致堆栈溢出、崩溃或其他不稳定的行为,当然不是您想要的),而是Cursor.Current.
  3. 覆盖OnMouseDragBegin,OnMouseDragMoveOnMouseDragEnd调整内部面板的大小。
于 2010-07-17T16:59:19.387 回答