65.9K
CodeProject 正在变化。 阅读更多。
Home

DragExtender - 用于拖动功能的ExtenderProvider

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.65/5 (12投票s)

2004年10月28日

1分钟阅读

viewsIcon

39388

downloadIcon

812

一个用于拖拽功能的扩展提供程序。

Sample Image - DragExtender.jpg

引言

这是我编写的一段代码,用于简化创建无边框窗体。

背景

你是否使用过无边框窗体? 你需要自己编写移动事件处理程序。 如果你在该窗体中包含(例如)一个面板,你也需要为该面板编写移动事件处理程序。 因此,我编写了一个小的 IExtenderProvider 实现来提供此功能。 你可以通过一些小的调整,以其他方式使用这段代码,例如,在窗体上移动控件。

使用代码

我还没有将这段代码集成到窗体设计器中,使其易于使用。 然而,以当前的形式使用它非常简单。

将扩展程序作为private变量添加到窗体中。

private DragExtender dragExtender1;

在构造函数中,在调用 InitializeComponent() 之后添加以下代码:

this.dragExtender1 = new DragExtender();

你还应该指定哪个组件应该是拖拽目标(这留下了很多实验空间)。

this.dragExtender1.Form = this;

剩下的唯一代码就是分配可拖拽的控件了。

// make the form draggable
this.dragExtender1.SetDraggable(this, true);
// make panel1 draggable
this.dragExtender1.SetDraggable(this.panel1, true);

DragExtender 然后会捕获该控件的 OnMouseDown 事件并处理拖拽代码。

private void control_MouseDown(object sender, MouseEventArgs e)
{
    if (!DesignMode && m_form!=null)
    {
        Control control = sender as Control;
        ReleaseCapture(control.Handle);
        int nul =0;
        SendMessage(m_form.Handle, WM_SYSCOMMAND, MOUSE_MOVE, ref nul);
    }
}

关注点

我将在下一次更新中尝试集成 Windows Forms 设计器功能。

历史

  • 版本 1.0,2004-10-28。
© . All rights reserved.