C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: フォーム外のクリックでフォームを閉じたい


(過去ログ 140 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■82429 / inTopicNo.1)  フォーム外のクリックでフォームを閉じたい
  
□投稿者/ 夜叉丸 (31回)-(2017/01/10(Tue) 15:38:18)

分類:[.NET 全般] 

「フォーム2の外を左クリックされたらフォーム2をクローズしたい。」のですが、
http://himag.blog26.fc2.com/blog-entry-43.html
上記URLを参考に以下のように作成して実行するとフリーズしました。
なにが間違っているのでしょうか?
(目的が達成できれば以下のコードでなくてもいいのですが)


≡Form1≡
 private void button1_Click(object sender, EventArgs e)
 {
  Form2 frm = new Form2();
  frm.Show();
 }


≡Form2≡
  public class CaptureRegion
  {
   internal class NativeMethods
   {
    [DllImport("user32.dll")]
    extern public static void
     mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
    [DllImport("user32.dll")]
    extern public static int GetMessageExtraInfo();

    public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
    public const int MOUSEEVENTF_RIGHTUP = 0x0010;
   }

   public static void SetMouseRButtonDown()
   {
    NativeMethods.mouse_event(
     NativeMethods.MOUSEEVENTF_RIGHTDOWN,
     0, 0, 0, NativeMethods.GetMessageExtraInfo());
   }

   public static void SetMouseRButtonUp()
   {
    NativeMethods.mouse_event(
     NativeMethods.MOUSEEVENTF_RIGHTUP,
     0, 0, 0, NativeMethods.GetMessageExtraInfo());
   }
  }

  private void button1_Click(object sender, EventArgs e)
  {
   this.Capture = true;
   Cursor.Current = Cursors.Cross;
   CaptureRegion.SetMouseRButtonDown();
  }

  private void Form2_MouseDown(object sender, MouseEventArgs e)
  {
   MessageBox.Show("MouseDown");
   this.Capture = false;
   CaptureRegion.SetMouseRButtonDown();
  }
引用返信 編集キー/
■82432 / inTopicNo.2)  Re[1]: フォーム外のクリックでフォームを閉じたい
□投稿者/ Jitta (257回)-(2017/01/10(Tue) 16:49:54)
No82429 (夜叉丸 さん) に返信

とりあえず、フォームのCaptureをTrueでいけるようですが?
その記事は2005年に書かれています。
その記事に至った経過を教えてください。

ちなみに、mouse_event 関数も古いです。
pinvoke使うなら、SetCapture 関数でいけました。
引用返信 編集キー/
■82439 / inTopicNo.3)  Re[2]: フォーム外のクリックでフォームを閉じたい
□投稿者/ 夜叉丸 (33回)-(2017/01/10(Tue) 19:09:39)
No82432 (Jitta さん) に返信

検索していくと、Capture = true; にするとできます。
というのはわかっていたのですが、
この状態で、フォーム外をクリックした場合に MouseDown 等でイベントが
発生するようになるということがどこにも記述されていなくて。
どうしたらいいのかわからず、しばらく検索を続けると上記のURLに辿り着いて
そのまま利用しようとして失敗しました。

どうも、すみませんでした。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -