2016-08-16 9 views
0

私は複数のボタンを持つWindowsフォームアプリケーションを持っています。私はデータベースにクエリを作成するためにクリックされた任意のボタンのテキストプロパティを取得する必要があります。私が知っている唯一の方法は、ボタンのクリックイベントを作成して送信者をボタンとしてキャストし、各ボタンのIDを非常に忙しいように見せかけることです。アプリケーション全体に100以上のボタンがある可能性が高いからです。だから私の質問はフォーム上で押された/クリックされたボタンのテキストプロパティを取得できる汎用のキープレスメソッドです。もしその質問があまり明確でないなら、私を許してください。任意のヘルプが歓迎されます1つの方法でWindowsフォームでクリックしたボタンのテキストを取得する方法

+0

送信者をButtonとしてキャストできたら、簡単にcontrol.Textプロパティにアクセスできます。なぜあなたは私によれば不要なスイッチを必要としたのですか? –

+0

私は同じ質問があります。なぜあなたはできないのですか((ボタン)送信者)。テキストを取得するためのテキスト?なぜスイッチが必要ですか? – GuidoG

答えて

3

すべての同様の種類のボタンに対して単一のクリックイベントハンドラを使用します。この方法では、すべてのボタンに対してクリックイベントが登録されますが、すべてのボタンに対して実行されるメソッドは1つだけです。どのボタンが押されたかは次のように判断できます。 送信者オブジェクトを次のように使用します。

private void button_Click(object sender, EventArgs e) 
    { 
     var buttonText = ((Button)sender).Text; 
     //Query using buttonText 
    } 

更新:答え上記 はまだ各ボタンのイベントをクリックしてサブスクライブする必要がします。あなたがそれを望んでいないなら、次のアプローチを見てください。

ClickTransparentButtonまたは)(Enabled=false)これらのボタンをすべて無効にし、親フォームにclickイベントを追加することができます。クリックイベントを取得すると、次のようにクリックされたボタンを取得できます。

private void Form1_Click(object sender, EventArgs e) 
{ 
    var p = PointToClient(Cursor.Position); 
    var control = GetChildAtPoint(p); 

    if(control is Button) 
    { 
    var buttonText = ((Button)control).Text; 
    //Query using buttonText 
    } 
} 

しかし、これはキーボードを使用してこれらのボタンを操作することができないなど、いくつかの欠点があります。 など...

+0

こんにちは、早急な答えのためにありがとう。上記のコードでは、私が正しく理解していれば、このイベントにアタッチするための各ボタンのコード行を書く必要があります。または、このカスタムハンドラにすべてのボタンを割り当てることができる単一のメソッドまたはコード行がありますか? –

+0

答えを更新しました。それがあなたのために今働くかどうかを見ますか? –

0
  1. ボタンをクリックハンドラとして、いくつかの関数を作成します:

    private void buttonClickHandler(object sender, EventArgs e) 
    { 
        string buttonName = (sender as Button).Text; 
    } 
    

2Aを。接続このハンドラへのすべてのボタンのイベントをクリックします。

2B。ボタンのクリックハンドラの接続を自動化するためにそのようなものを使用します。

private void connectButtonsHandlers() 
{ 
    foreach(var c in this.Controls) 
    { 
     if(c is Button) 
     { 
      (c as Button).Click += buttonClickHandler; 
     } 
    } 
} 

は、プログラム開始時に接続を行うために、コンストラクタを形成するために、このコードを追加します。

+0

なので、このハンドラに接続するために各ボタンのコードを書く必要があることを意味していますか?私はこのイベントハンドラにすべてのボタンを登録できるメソッドを探していますか?それは可能ですか? –

+0

回答が更新されました。 – fat

関連する問題