0

GUI のコードを書いているときにこのような状況に陥ることがよくありますが、これを解決するためのベスト プラクティスの方法を知りたいと思っています。状況は次のとおりです。

GUI に、異なる変数名を持つ同一の項目が多数あります。つまり、Button1、Button2、Button3 などの名前の「同一の」ボタンが 10 個あります。

ボタンの表示テキストはコード内で更新され、特定の条件を満たしているかどうかを更新時に確認し、その条件に基づいてテキストの色を変更したいと考えています。したがって、button1 については次のように記述します。

if (Button1.text == "true"){
    Button1.textcolor = blue}
else if (Button1.text == "false"){
    Button1.textcolor = red}

ここで、Button1 の変数名を Button2 の変数名に置き換えて、Button10 まで、10 個のボタンのそれぞれに対してこのコードを再度記述する必要があるのは冗長に思えます。ループ内のコードの「Button1」部分を変更し、他のすべてを同じに保つ方法はありますか? したがって、私が探しているものの疑似コードの例は次のようになります。

for (all buttons in (button1-button10)){
    if (thisbutton.text == "true"){
        thisbutton.textcolor = blue}
    else if (thisbutton.text == "false"){
        thisbutton.textcolor = red}}

このシナリオへの最善のアプローチ方法がわかりません。これに関する情報とガイダンスをいただければ幸いです。

ありがとう

4

3 に答える 3

0

独自のボタンを作成します。

using System.Windows.Forms;
using System.Drawing;

namespace TestApp
{
    public class TheButton : Button
    {
        public void ChangeColor()
        {
            ForeColor = (Text == "true")  ? Color.Blue : Color.Red ;

        }
    }
}

ソリューションを再構築すると、ツールボックスのフォームに TheButton が表示されます。パネルなどのコンテナー クラスを追加し、TheButton クラスのインスタンスを追加します。

次に、次のようなメソッドを記述できます。

    private void ChangeAllButtons()
    {
        foreach (var control in panel1.Controls.Cast<object>().Where(control => (control as TheButton) != null))
        {
            (control as TheButton).ChangeColor();
        }
    }

ChangeAllButtons() を呼び出す最適な場所を決定する必要があります。

于 2016-10-10T02:35:48.203 に答える