【发布时间】:2021-06-27 11:40:19
【问题描述】:
我用鼠标拖动控制
问题是如果 Control.Enabled = false。拖拽不行?有没有什么方法可以重载来防止这种行为?
static void control_MouseEnter(object sender, EventArgs e)
{
(sender as Control).Enabled = false;
(sender as Control).Cursor = Cursors.SizeAll;
}
static void control_MouseLeave(object sender, EventArgs e)
{
(sender as Control).Enabled = true;
// (sender as Control).Cursor = Cursors.Default;
}
static void control_MouseDown(object sender, MouseEventArgs e)
{
mouseLocation = e.Location;
// turning on dragging
draggables[(Control)sender] = true;
}
static void control_MouseUp(object sender, MouseEventArgs e)
{
// turning off dragging
draggables[(Control)sender] = false;
}
static void control_MouseMove(object sender, MouseEventArgs e)
{
// only if dragging is turned on
if (draggables[(Control)sender] == true)
{
var control = (sender as Control);
control.Left = e.X + control.Left - mouseLocation.X;
control.Top = e.Y + control.Top - mouseLocation.Y;
}
}
【问题讨论】:
-
让它看起来被禁用但实际上不是?
-
我不明白为什么要为此禁用/启用控件。您是否出于某种原因修改了原始代码?因为从未使用过
mouseOffset,即使这似乎是一种扩展方法,这里也没有定义扩展。 -
没有完全禁用 Control.Enabled = false。无论如何修改示例它不起作用,因为我无法复制整个代码。因为 SO 阻止了用更少的文字写很多代码。
-
为您的控件拍摄快照,并仅在控件处于“可拖动”状态时显示它而不是您的控件。
-
不是重点。
control_MouseEnter和control_MouseLeave实际上是原始代码的一部分吗?这两个与在运行时拖动控件并不完全相关,并且根本没有理由为此禁用控件。如果您从 NuGet 包中获得此信息,请验证该包是否有更新(使用 NuGet 包管理器),因为如果原始代码是您提供的代码,则它存在错误。
标签: c# .net winforms user-controls controls