C# WindowsForm Button押下判定

このQ&Aのポイント
  • C#でタイマー発火時にボタンが押されているか判定する方法はありますか
  • 現在はButtonDownイベントでフラグをONにし、ButtonUpイベントでフラグをOFFにしていますが、ボタンをクリックしたままマウスを移動しボタン上を離れる場合は、ボタン押下は元に戻るのにButtonUpイベントは発行されません。ボタンの状態をすぐに検出したい場合にはどうしたらよいでしょうか。
  • C#や.NETとは異なるカテゴリになりますが、Windows Formアプリケーションでボタンが押されているか判定する方法について教えてください。
回答を見る
  • ベストアンサー

C# WindowsForm Button押下判定

C#でタイマー発火時に, Button(タクトスイッチのイメージ)が押されていることを判定したいのですが, そのようなプロパティはあるのでしょうか.MSDNをざっと見ましたが見つけられませんでした. (仕方ないので現在は以下のようにしています) ButtonDownイベントで,フラグON ButtonUpイベントで,フラグOFF (問題)Buttonをクリック -> クリックしたままマウスを移動しボタン上を離れる このとき,ボタン押下は元に戻るのに, ButtonUpイベントは,マウスクリックをやめるまで発行されない. ボタンが元に戻れば,それをすぐに検出したいのですが 難しいでしょうか. (カテゴリ選択でC#や.NETがなかったため,その他にしました.カテゴリ違いであればご指摘ください)

質問者が選んだベストアンサー

  • ベストアンサー
  • byDesign
  • ベストアンサー率75% (45/60)
回答No.1

タイマーの中でボタンが押されてるの判定したいのでしょか? であれば以下でどうでしょうか? private void timer1_Tick(object sender, EventArgs e) { var button = this.button1; var isDown = (bool)typeof(Button).GetProperty("MouseIsDown", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(button, null); System.Diagnostics.Debug.WriteLine(isDown); }

risoutogenjitsu
質問者

お礼

意図した動作ができるようになりました. MouseIsDownというのは,通常のプロパティではなく, メタデータ内の属性と理解しました.(Reflectionは初めて知りました) 本当にありがとうございました.

risoutogenjitsu
質問者

補足

ありがとうございます. 教えていただいたやり方でいけそうな気がします. 出先のため,週明けに確認してご報告申し上げます.

関連するQ&A

  • ボタンをマウスで押し続けたときのイベント

    VB2005,Frameworks2を使用しています。 フォームに設置したButtonは、通常マウスをクリックする度にイベントが発生しますが、これをボタンをマウスで押している間だけイベントを発生されたいのですがその様なイベントやボタンの設定が見つかりません。 やはりタイマー等を使わないと再現できないのでしょうか? よろしくお願いします。

  • ::電源ボタンが押下されたことを知りたい

    電源ボタンが押下されたことをソフトで知りたいのです。 ※ボタン押下イベントをフック。シャットダウンをさせたくはありません。 電源ボタンは通常のPUSHスイッチです。 OS:Windows XP Pro SP2 イメージとしては、下記のどちらかだと思います。 1.何かメッセージを受けとる。MSDNなど調べてみましたが、該当するメッセージはなさそうでした。 2.[コントロールパネル]-[電源オプション]の中に”コンピュータの電源ボタンを押したとき”の動作設定があります。”入力を求める”の代わりに何かソフトを起動させたい。その様な設定(レジストリなど)ありますでしょうか? ACPI関連の資料を探してみましたが、良く分かりませんでした。 よろしくお願いします。

  • マウスのボタン判定について

    仕事でJAVAを使ってWINDOWSのアプリ画面を作っています。 質問なのですが、マウスイベントで右ボタン、左ボタンどちらが押されたか 判定すると思いますが、 1.右ボタンが押された場合、左ボタンは押されているか? という所で詰まっています。逆のパターンは判定できたのですが、何故か1のパターンが 判定できません。 ・JAVAのバージョン(1.3.1) ・開発端末のOS(WindowsXP HomeEdition) public void mousePressed( MouseEvent e ) { int modifiers = e.getModifiers(); // 右左同時押しの場合 if ( ( modifiers & InputEvent.BUTTON1_MASK ) == InputEvent.BUTTON1_MASK && ( modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK ) { // この判定には入る。 System.out.println( "同時押しです。" ) ; } // 左ボタンが押された場合 else if ( ( modifiers & InputEvent.BUTTON1_MASK ) == InputEvent.BUTTON1_MASK ) { // 右ボタンも押されているか? if ( ( modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK ) { // この判定には入っている。 System.out.println( "右ボタンも押されています。" ) ; } } // 右ボタンが押された場合 else if ( ( modifiers & InputEvent.BUTTON3_MASK ) == InputEvent.BUTTON3_MASK ) { // 右ボタンも押されているか? if ( ( modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK ) { // この判定には入らない。 System.out.println( "右ボタンも押されています。" ) ; } } } ※(大雑把に書くとこんな感じです。) 個人的にはJAVAのバージョンに依存するものなのかなぁと考えているのですが、 1.3.1では駄目なのでしょうか? 乱文、雑文ではありますが、ぜひともご教授をお願いします。

    • ベストアンサー
    • Java
  • C#での書き方

    vb.netでは別のイベントを呼び出すとき下記のような書き方ができたのですが、C#ではどう書くんでしょうか? (ボタン2を押したらボタン1の処理が走る) Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Button1_Click(sender, e) End Sub

  • Excel2000 BeforePrintイベントで印刷かプレビューかの判定

    いつもお世話になっております。 Excel2000を使用しております。 Workbook_BeforePrintイベント内で処理を行っております。 印刷ボタン押下時と、プレビューボタン押下時とで 処理を分岐させたいのですが、 どちらが実行されたのか判定する方法がどうしてもわかりませんでした。 ご教授いただけましたら幸いです。 何卒よろしくお願いいたします。

  • KeyListenerをButtonコンポーネントに追加

    ある問題集の問題なのですが、 どういうことなのかほとんどわかりません・・・ 問.KeyListenerをButtonコンポーネントに追加する際の説明として正しいのはどれですか。 a.キーイベントとマウスクリックイベントを有効にするためには、ButtonオブジェクトのenablEvents()メソッドを呼び出して定義をわたさなければならない。(×) b.ButtonオブジェクトのenableEvents()メソッドを呼び出し、定数AWTEvent.KEY_EVENT_MASKを渡さなければならない。(×) 解説.addkeyListener()メソッドはCompornentクラスに含まれているので、すべてのAWTコンポーネントにKeylistenerを追加することができます。したがって、選択肢a,bは間違いです。 ということなんですが、解説を読んでもよくわかりません。 もう少しわかりやすく教えてください。

    • ベストアンサー
    • Java
  • C# イベント処理について

    GUIなどの処理はイベントというのを使っていますが、イベントの実際の内部処理は一体どんな仕組みで動いているのでしょうか。  単純に無限ループをして状態が変化しているかチェックしているのでしょうか。 例えばボタンが2つあり、マウスが上に来たらボタンの色を反転させるイベントは、マウスと2つのボタンの当たり判定を監視し、繰り返す。という感じなのでしょうか。 (ということはボタンの数やボタン自体のイベントが増えれば負荷も増えてしまう?)

  • C# ユーザコントロール内のボタン押下を親で知る

    こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか? ---------------------------------------------------------------------- [Form1.cs] void Inform_UserControlButton1Click() { //親が持っている変数を使って処理を行いたい } void Form1_Load(....) { //ユーザコントロールを設置 UserControl1 ctrl = new UserControl1(); this.Controls.Add(ctrl);   //ユーザコントロール内のbutton1を見つける List<Control> ctrl = new List<Control>(cps.Controls.Find("button1", false)); //Form1が持っている変数を使う為の関数を通るようにしたい (Button)ctrl[0].Click += new System.EventHandler(Inform_UserControlButton1Click); //←エラー } ---------------------------------------------------------------------- [UserControl.cs] button1が配置されています。 ---------------------------------------------------------------------- こんな感じにしてできないかなー?と思っていたのですが、//←エラーのところで、 イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。 となってしまい上手くいきません。 どのようにすればよいでしょうか?

  • いままでbuttonが押された回数をリアルタイムで表示したい

    タイトル通りです。 <INPUT type="button" value="どうぞ"> が押されたとき、そのボタンの下に(どこでもいいけど)いままでそれがクリックされた回数をリアルタイムで表示したいんです。 例えば、今までボタンはAさん、Bさん、Cさんに合計100回押されていて、Dさんがbuttonをクリックすると、直後に[100]というのが[101]になってほしいんです。 なにかそういうタグはないでしょうか? (他のユーザにも継続するタグだから、CGIって感じがしたのでここに書きました)

    • 締切済み
    • CGI
  • マウスの右クリック押下中サイドボタン5が無効になる

    使用商品:M-BL21DB,XGM10DBの2種 詳細: マウスアシスタントでボタン5をSHIFTに割り当て済み ボタン4はCTRLに割り当て済み 基本的に意図通り(割り当てした各ボタンがキーボードのそれと同様に扱える)に動作します。右クリック押下中もボタン4は正しく機能します。 なぜ右クリック押下中だけボタン5が機能しなくなるのでしょうか。 ご存じでしたらご教授いただけると幸いです。 ※OKWAVEより補足:「エレコム株式会社の製品」についての質問です。

専門家に質問してみよう