2012-04-23 51 views
1

我创建了一个新的WinForm。 在那个WinForm中我放了一个Panel。 Dock =填充。面板上的MouseUp?

运行该项目。
DoubleClicked上的形式的报头(最大化)

获取一个mouseUp事件面板上:

功能:WindowsApplication1.Form1.Panel1_MouseUp(对象, System.Windows.Forms.MouseEventArgs),主题:0x2068主线程

它是一个错误或功能? ))

我明白,当我双击面板的某个部分来了一下鼠标,但我没有在面板上的任何mouseUp,但??

我的问题: 我在我的面板中有一些可以选择或不可以选择的对象。 当我点击(的MouseUp)面板(在“空”的空间,免费OBJETS的)上,通常情况下,我取消选择所有对象。

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

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

+0

Tomer W是对的。但也许你可以先在面板上寻找MouseDown事件?因为没有mouseDown没有mouseUp? – basti 2012-04-23 11:47:22

+0

MouseUp是特定的,因为打开上下文菜单,我需要在里面使用一些检查... – serhio 2012-04-23 11:48:24

+0

:)喜欢你对GUI的态度。0ld-5ch00l 快速编辑一键菜单? – 2012-04-23 12:27:01

回答

2

以及你完美

  1. 的MouseDown描述它放在标题
  2. 的MouseUp在标题
  3. 的MouseDown在标题
  4. 窗口最大化,现在的鼠标在窗体上。
  5. 的MouseUp上的形式。

即使你是正确的,而这种行为是非常恼人的和无用的, 这是怎样的逻辑上应。

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

问候,

编辑:

我对你有两个想法:

跟踪的MouseUp没有的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; 
} 

通知最大化事件和漠视。

但是,这是一个棘手的时候几乎是最大化的窗口(这不会导致鼠标了!)

终于不顾跟随鼠标向上(取消选择对象)。

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

+0

看到我的更新。不幸的是,我不能在我的案例中使用MouseClick – serhio 2012-04-23 11:46:30

+0

为什么第二个MouseDown调用DoubleClick事件,而不是第二个MouseUp? – serhio 2012-04-23 11:51:51

+0

鼠标点击由MouseDown事件定义,并且在某些情况下由MouseUp在相同位置确认... 在桌面图标上的鼠标一般感觉就像选择它(考虑到焦点在桌面上)... – 2012-04-23 12:24:10