1

新しいを作成しましたWinForm。そのWinFormに。を入れましたPanel。ドック=塗りつぶし。

プロジェクトを実行します。
フォームのヘッダーで倍増(最大化するため)

パネルでmouseUpを取得します。

関数:WindowsApplication1.Form1.Panel1_MouseUp(Object、System.Windows.Forms.MouseEventArgs)、スレッド:0x2068メインスレッド

それはバグですか、それとも機能ですか?))

パネルの一部をダブルクリックすると、マウスの下にしばらく来たと理解していますが、パネルにmouseUpがありません。

私の問題:パネルに、選択できるオブジェクトと選択できないオブジェクトがあります。パネル(オブジェクトのない「空の」スペース)で(マウスアップ)をクリックすると、通常、すべてのオブジェクトの選択が解除されます。

ただし、最大化の場合は、オブジェクトの選択を変更しないでおく必要があります。

MouseUpの最大化ケースを「フィルタリング」するにはどうすればよいですか?

4

1 に答える 1

2

あなたはそれを完璧に説明しました

  1. タイトルのマウスダウン
  2. タイトルにマウスアップ
  3. タイトルのマウスダウン
  4. WINDOW IS MAXIMIZED、マウスはフォーム上にあります。
  5. フォームのマウスアップ。

あなたは正しく、この振る舞いは非常に迷惑で役に立たないものですが、論理的にはこうあるべきです。

MouseDown/MouseUp はできるだけ避けることをお勧めします。可能な限り、MouseClick/DblClick を使用してください。

よろしく、

編集:

2 つのアイデアがあります。

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 に答える