3

私はC#を初めて使用し、現在このC#チュートリアルに従っています。このチュートリアルでは、電卓を開発するための演習に出くわしました。

AC#.NetCalculator-設計段階

演習で示したソリューションでは、各桁ボタンにbtn * _clickメソッドが与えられました。これは、非常に簡単に一般化できます。

1
(出典:homeandlearn.co.uk

これらの10個の関数を一般化できるように、どのようにコードを書くことができますか?initializeComponent()を変更することで実行できますが、コードエディタを使用して変更するべきではないとコメントしています。

この問題にどのように取り組むことができますか。

4

3 に答える 3

9

すべてのボタンを同じクリックイベントハンドラーに結び付けてsender、テキストを取得するために使用できます。

private void btnAnyButton_Click(object sender, EventArgs e)
{
    Button theButton = sender as Button;
    txtDisplay.Text += theButton.Text;
}
于 2012-06-21T17:33:33.203 に答える
6

投稿したチュートリアルは、ビジュアルスタジオでビジュアルエディターを使用しています。デフォルトでは、デザイナーは規則{controlname} _ {eventname}を使用してコードを生成します。プロパティウィンドウで別のイベント名を明示的に割り当てることができ、すべてのボタンが同じイベントメソッドを共有できます。

ここに画像の説明を入力してください

そして、次のようにリファクタリングできるようです。

private void btn_click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    if(btn != null)
       txtDisplay.Text += btn.Text;
}

それがお役に立てば幸いです。

于 2012-06-21T17:41:54.330 に答える
1

これらのボタンをコードから動的に生成し、tag属性に値を割り当てることができます。そこから、それらすべてを同じイベントハンドラーに接続できます(0、1、2、3、4のように数字ボタンについて話します...)。onClickイベントハンドラーtagでは、呼び出し元の値を取得し、実行する必要があることを実行します。

擬似コード:

void onClick(Button caller){
  int btnNb = (int) caller.Tag;
  //do what you have to do
}

tag属性は必要ありませんが、ボタンのテキストを取得してintに変換するよりもクリーンだと思います。

于 2012-06-21T17:32:33.937 に答える