Created
October 18, 2013 16:40
-
-
Save nissuk/7044239 to your computer and use it in GitHub Desktop.
IMassageFilterでボタン押下を無効化
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Windows.Forms; | |
namespace WindowsFormsApplication1 | |
{ | |
/// <summary> | |
/// ボタン押下の操作をフィルタリングするクラスです。 | |
/// </summary> | |
public class ButtonClickFilter : IMessageFilter | |
{ | |
/// <summary>通常キー押下</summary> | |
private const int WM_KEYDOWN = 0x100; | |
/// <summary>マウス左ボタンクリック</summary> | |
private const int WM_LBUTTONDOWN = 0x201; | |
/// <summary>マウス左ボタンダブルクリック</summary> | |
private const int WM_LBUTTONDBLCLK = 0x203; | |
/// <summary> | |
/// ボタン押下の操作をフィルタリングします。 | |
/// </summary> | |
/// <param name="m">ディスパッチされるメッセージ。このメッセージは変更できません。</param> | |
/// <returns>true の場合、メッセージはフィルタで排除され、ディスパッチされません。false の場合、メッセージは次のフィルタまたはコントロールに継続されます。</returns> | |
public bool PreFilterMessage(ref Message m) | |
{ | |
bool clickOrEnter | |
= m.Msg == WM_LBUTTONDOWN | |
|| m.Msg == WM_LBUTTONDBLCLK | |
|| (m.Msg == WM_KEYDOWN && (Keys)m.WParam == Keys.Enter); | |
// クリック/ダブルクリック時でもENTERキー押下時でもない場合、処理しません。 | |
if (!clickOrEnter) return false; | |
Control control = Control.FromHandle(m.HWnd); | |
// 対象コントロールが取得できない場合、処理しません。 | |
if (control == null) return false; | |
// 対象コントロールがボタンでない場合、処理しません。 | |
if (!(control is Button)) return false; | |
// 何らかの処理... | |
MessageBox.Show("今はボタンを押さないで下さい…"); | |
// trueでメッセージをフィルタ | |
return true; | |
} | |
} | |
static class Program | |
{ | |
/// <summary> | |
/// アプリケーションのメイン エントリ ポイントです。 | |
/// </summary> | |
[STAThread] | |
static void Main() | |
{ | |
// フィルタ追加 | |
Application.AddMessageFilter(new ButtonClickFilter()); | |
Application.EnableVisualStyles(); | |
Application.SetCompatibleTextRenderingDefault(false); | |
Application.Run(new Form1()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment