| 2019/09/24(Tue) 10:37:43 編集(投稿者)
■No92410 (犬夜叉 さん) に返信 > Form2を作ります。 > public From2()
ありがちなミスですね。 From / Form とか Namae / Name とか Expect / Except とか Drag / Drug とか…。
> その状態でFomr2以外の場所をクリックすると
こっちのスペルミスは珍しいかも。(^^;
> private void From2_Load(object sender, EventArgs e) > { > this.Capture = true; > }
こんなことをしたら、Form2 上に TextBox があっても、 その上にマウスを重ねても「I カーソル」になりませんよね。
Form2 上のコントロールを選択する場合も、 1 回目のクリックが捨てられてしまい、2 回目のクリックで ようやくアクティブになる状態となり、操作性が悪くなりそうですが…。
> Form2をクリックすると、消えなくなります。
最初のクリックで消えないのは、 GetWindowContainState(this) で領域内かどうかを判定しているからですね。 常に消したいなら、領域判定せずに Close(); すれば消えます。
領域内であれ領域外であれ、一度クリックすれば、キャプチャーは終了するので、 それ以降はもう、領域外操作では MouseDown イベントは発生しません。 再 Capture するなどしない限りは。
> Form2以外をクリックするとForm2が消えるようにするにはどうすればよいのでしょうか?
RawInput を捉えるとか。
// Install-Package SharpDX.RawInput
あるいはマウスクリックに拘らないなら、Deactivate イベントで。
public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { Deactivate += delegate { Close(); }; } } |