1

我创建了一个新的WinForm. 在那个 WinForm 中,我放了一个Panel. 停靠=填充。

运行项目。
双击表单标题(最大化)

在面板上获取 mouseUp:

函数:WindowsApplication1.Form1.Panel1_MouseUp(Object, System.Windows.Forms.MouseEventArgs),线程:0x2068 主线程

它是错误还是功能?))

我知道当我双击面板的某些部分时,鼠标在鼠标下一会儿,但是我没有在面板上任何 mouseUp,但是?!

我的问题:我的面板中有一些可以选择或不选择的对象。当我单击面板上的 (MouseUp) 时(在“空白”空间,没有对象),通常我会取消选择所有对象。

但在最大化情况下,我应该保持对象选择不变!

如何“过滤” MouseUp 的最大化情况?

4

1 回答 1

2

好吧,你完美地描述了它

  1. 鼠标按下标题
  2. MouseUp 在标题上
  3. 鼠标按下标题
  4. 窗口最大化,现在鼠标在窗体上。
  5. 窗体上的 MouseUp。

即使您是正确的,并且这种行为非常烦人且无用,但在逻辑上应该是这样。

我建议尽可能避免使用 MouseDown/MouseUp。尽可能使用 MouseClick/DblClick。

问候,

编辑:

我有两个想法给你:

在没有 MouseDown 的情况下跟踪 MouseUp。

private bool bMouseDownState = false;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    bMouseDownState = true;
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
    if (!bMouseDownState)
        return;
    bMouseDownState = false;
}

注意 Maximize 事件并忽略 MouseUp。

但是当窗口几乎最大化(这不会导致鼠标向上!)

最后忽略随后的鼠标(取消选择对象)。

*最后一件事——为什么要发明轮子?* 使用已经制作好的画布(visio?)

于 2012-04-23T11:39:39.777 回答