-1

mouseclicksウィンドウで作成されたすべてをカウントしたい。textboxボタン、フォーム自体、その他などであっても、クリックするすべてのオブジェクトでカウンターを増やしたい.

私はこれまでのところこれを持っていますが、うまくいかないようです:

int mouseCounter = 0;
private void Form1_Load(object sender, EventArgs e)
{
    foreach (Control c in this.Controls)
    {
        c.Click += ClickCounter;
    }
}

void ClickCounter(object sender, EventArgs e)
{
    mouseCounter++;
    label8.Text = mouseCounter.ToString();
}

カウンターは今のところコントロールのクリックにのみ反応し、フォーム自体には反応しません。どうすれば簡単に修正できますか?

4

3 に答える 3

0

メッセージ フィルタを使用して、(メイン) フォームでのマウス クリックを除外することができます。

基本的に、メッセージがコントロールにディスパッチされる前にメッセージを取得し、必要なことを何でも行うことができます (あなたの場合: カウンターを増やします)。の戻り値はPreFilterMessage(ref Message m)、メッセージがコントロールにディスパッチされるかどうかを決定します。falseつまり、メッセージをフィルタリングしなかったため、メッセージはディスパッチされます。

詳細については、ドキュメントを参照してください。

public partial class Form1 : Form, IMessageFilter
{
    public Form1()
    {
        InitializeComponent();
        label1.Text = "0";

        Application.AddMessageFilter(this);

    }

    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == 0x201) //wm_lbuttondown
        {
            label1.Text = "" + (Int32.Parse(label1.Text) + 1);
        }
        return false;
    }
}

.NET4.0 およびさまざまなコントロールでいっぱいのフォームでテスト済み。

于 2013-10-23T11:18:34.730 に答える
-1

これを使って:

namespace TicTacToe
{
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        button1.Visible = false;
    }
  }
}
于 2017-03-22T18:27:03.007 に答える