【问题标题】:Movable Panel control using C#使用 C# 的可移动面板控件
【发布时间】:2019-09-27 08:26:14
【问题描述】:

我正在尝试使用 c# 使我的面板控件可移动,但我的主窗体在拖动时会随着面板控件一起移动。有更好的代码吗?

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
public static extern bool ReleaseCaptre();

public static void _MOVE_PANEL(IntPtr Handle, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
       ReleaseCaptre();
       SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    } 
}

private void sub_inv_pcount_edit_MouseMove(object sender, MouseEventArgs e) //panel move
{
    _MOVE_PANEL(Handle, e);
}

查看示例:see screenshot

【问题讨论】:

  • 这就是 WM_NCLBUTTONDOWN 所做的,它假装你点击了一个主窗口的标题栏。哪个移动了整个shebang。谷歌“c# move panel with mouse”可以找到更好的代码,MSDN 论坛上的热门文章以及 Stackoverflow 看起来不错。
  • This SOMSDN 可以帮到你!?

标签: c# winforms panel


【解决方案1】:

恐怕这不是您可以调整以获得所需结果的方法。 WM_NCLBUTTONDOWN 本质上是窗口管理器决定如何处理 顶级 窗口上的鼠标事件的方式。它允许您制作具有自定义镶边的窗口,但不允许您对非顶级窗口(例如面板)执行任何操作。

您可以在做显而易见的事情时获得相当不错的拖动 - 在 MouseMove 中,自己处理移动控件。不过,它不会像移动整个窗口那样好。

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 2011-01-27
    • 2011-07-19
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    相关资源
    最近更新 更多