1

ボタン 1、ボタン 2、ボタン 3 などの名前のボタンが 70 個あります。私の目的は、ボタン1がクリックされるたびに「1」と表示され、ボタン2が「2」と表示されるなどです。

button1 が話すコードは次のとおりです。

SpeechSynthesizer synthesizer = new SpeechSynthesizer();

private void button1_Click(object sender, EventArgs e)
{
    synthesizer.Speak("1");
}

ボタン 2 の場合

private void button2_Click(object sender, EventArgs e)
{
    synthesizer.Speak("2");
}

他の 68 ボタンについても同様です。

現在、70 ボタンのアクションを実装することは困難です。これらのボタン アクションはパターンに従います。これらのボタン ハンドラーを実装して、70 の異なるアクションを記述する手間を省くための、より効率的な方法を提案できる人はいますか?

4

4 に答える 4

5

このようなことを試してください

button1.Tag = "1";
button2.Tag = "2"; 
...

private void button_Click(object sender, EventArgs e)
{
    synthesizer.Speak(((Button)sender).Tag.ToString());
}
于 2013-09-09T15:20:39.363 に答える
4

すべてのボタンに同じハンドラを使用します。イベントの送信元は、イベントを発生させたボタンになります。名前を取得し、テキストを抽出して次のように言うことができます。

private void button_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    string text = button.Name.Substring("button".Length);
    synthesizer.Speak(text);
}
于 2013-09-09T15:20:07.923 に答える
3

すべてのボタンに対して 1 つのハンドラーを作成します。

senderパラメータをキャストしてクリックされたインスタンスを取得し、その、、またはButtonに基づいて何をすべきかを判断します。NameTextTag

UI によっては、これらすべてのボタンをループで生成することもできます。

于 2013-09-09T15:20:23.903 に答える
0

それらを単一のイベントハンドラーにサブスクライブできます。

したがって:

button1.Click += buttonClicked;
button2.Click += buttonClicked;
// and so on

そして、buttonClicked のコード。

private void buttonClicked(object sender, EventArgs e)
    {
//This will get the Type first, the name and then the last character on the Name
        synthesizer.Speak(sender.GetType().Name.Substring(sender.GetType().Name.Length - 1, 1));
    }

これにより、コードの再利用が促進されます:)

于 2013-09-19T11:15:59.273 に答える