[C#]ボタンに関するマウスイベントはこうなっている

わけあって、ボタンが押しっぱなしの時の処理を書くことになった。標準のイベントではなさそうなのだが、スクロールバーの上下(もしくは左右)にある▲▼ボタンは押しっぱなしにすると、スクロールゲージが移動していく。きっとタイマなどを使ってやらないとだめそうだ。

んで、ボタンをクリックしたときのイベントってどないなっとんやー?ということで調べてみたのが以下のプログラム。


class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.IO.StreamWriter m_sWriter;

public Form1()
{
InitializeComponent();
System.IO.FileInfo fInfo = new System.IO.FileInof("log.txt");
m_sWriter = fInfo.CreateText();
m_sWriter.WriteLine("start");
m_sWriter.Flush();
}

protected override void Dispose( bool disposing )
{
// 略
m_sWriter.Close();
}

private void button1_Click(...)
{
m_sWriter.WriteLine("button1_Click");
m_sWriter.Flush();
}

private void button1_MouseDown(...)
{
m_sWriter.WiretLine("button1_MouseDown");
m_sWriter.Flush();
}

private void button1_MouseUp(...)
{
m_sWriter.WriteLine("button1_MouseUp");
m_sWriter.Flush();
}
}

※だいぶ端折ってます

で、ボタンを押すと、


button1_MouseDown
button1_Click
button1_MouseUp
とログファイルに記述される。
また、ボタンを押して、そのまま押しながらマウスカーソルをボタンの領域外まで持っていくと、

button1_MouseDown
button1_MouseUp
となりました。

なので、ボタンの押しっぱなし処理を実装するには、MouseDownでタイマ起動、MouseUpされるたらタイマ待機、というようになりそう。