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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.82429 の関連記事表示

<< 0 >>
■82429  フォーム外のクリックでフォームを閉じたい
□投稿者/ 夜叉丸 -(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();
      }
親記事 /過去ログ140より / 関連記事表示
削除チェック/

■82432  Re[1]: フォーム外のクリックでフォームを閉じたい
□投稿者/ Jitta -(2017/01/10(Tue) 16:49:54)
    No82429 (夜叉丸 さん) に返信

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

    ちなみに、mouse_event 関数も古いです。
    pinvoke使うなら、SetCapture 関数でいけました。
記事No.82429 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82439  Re[2]: フォーム外のクリックでフォームを閉じたい
□投稿者/ 夜叉丸 -(2017/01/10(Tue) 19:09:39)
    No82432 (Jitta さん) に返信

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

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

記事No.82429 のレス / END /過去ログ140より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -