簡単にできるはずの何かに苦労しています(っぽい)。フォームの下部にウィンドウ フォームとフローグリッド レイアウト パネルがあります。このフォーム内に、X 個のユーザー コントロールを動的に入力します。コントロールはすべて同じタイプです。
目標は、ユーザーがユーザー コントロールの上にマウスを移動すると、別のフォームが開き、マウスがある場所に配置されることです。マウスがフォームから離れると、開いているフォームが消えます。
これはほとんどうまくいきます。問題は、ユーザー コントロールにラベルやテキスト ボックスのようなものが含まれている場合です。UC を離れたと見なされるため、フォームは消えます。
私の考えは、X と Y を使用して UC 内にあるかどうかを判断することでしたが、これを理解することはできません。
質問してもいいですか:
1) これに対する最善のアプローチは何ですか? 2)UCは動的であるため、どのようにコーディングできますか。UCがどこにあるかを正確に知ることはできません。
ありがとう
編集
マウスポインターを見つけようとしていますが、そこに到達しません。以下のコードは、UC SmallTagBox_MouseLeave イベント内にあります。
Point loc = this.Location;
Point p = this.PointToScreen(this.Location);
Point p2 = this.PointToScreen(this.Parent.Location);
Point ms = MousePosition;
Rectangle screenBounds = new Rectangle(this.PointToScreen(this.Location), this.Size);
if (!screenBounds.Contains(ms))
{
thw.Close();
thw = null;
}
- loc {X = 275 Y = 3} System.Drawing.Point
- p {X = 808 Y = 908} System.Drawing.Point
- p {X = 808 Y = 908} System.Drawing.Point
- p2 {X = 545 Y = 1542} System.Drawing.Point
- ms {X = 574 Y = 914} System.Drawing.Point
- screenBounds {X = 808 Y = 908 幅 = 62 高さ = 29} System.Drawing.Rectangle
p2 (その親) が画面に対してより大きな Y 値を持つことができる方法がわかりません。