0

私はc#でマクロ置換を行おうとしています。実は私はc#を学ぼうとしています。私は Visual fox の経験があります。

とにかくこれは私が必要とするものです:

プログラムで新しいコントロールを追加しようとしているとしましょう:

ProgressBar progressBar1 = new ProgressBar();
progressBar1.Size = new System.Drawing.Size(516, 23);
progressBar1.Location = new Point(10, 36);
groupBox4.Controls.Add(progressBar1);

コントロールの名前 (progressBar1) を置き換える方法を知り、文字列変数の名前を取得して、for ステートメントを使用して複数のプログレス バーを作成できるようにする必要があります。

アイデアはありますか?

4

2 に答える 2

1

プログレスバーの複数のインスタンスを作成するには、コードをforループ内に配置する必要があります。アイテムの参照を保持する場合は、次のように辞書に保存できます。

Dictionary<int, ProgressBar> progressBars = new Dictionary<int, ProgressBar>();

for(int i = 0; i < someValue; i++) {
ProgressBar progressBar = new ProgressBar();
progressBar.Size = new System.Drawing.Size(516, 23);
progressBar.Location = new Point(10, 36);
groupBox4.Controls.Add(progressBar);
progressBars.Add(i, progressBar);
}

これで、辞書で、インデックス(またはキーとして定義した他の何か)で、目的のプログレスバーを取り戻すことができます...

インデックス3のプログレスバーを(インデクサーを介して)戻す例:

ProgressBar bar = progressBars[3]; 
bar.Value = //Assign some value
于 2012-08-05T15:56:28.187 に答える
1

progressBar1はコントロールの名前ではありません。ProgressBarの現在のインスタンスを操作するために使用されるProgressBar型の変数の名前です。

Controlから派生したすべてのクラスには、 Name ofstringtypeというプロパティがあります。

int xPos = 10;
int yPos = 36;

// Add 10 progressbars to the groupbox control collection
for(x = 0; x < 10; x++)
{
    yPos = yPos + (x * 30);
    ProgressBar progressBar1 = new ProgressBar(); 
    progressBar1.Name = "pgb" + x.ToString();
    progressBar1.Size = new System.Drawing.Size(516, 23); 
    progressBar1.Location = new Point(10, yPos); 
    groupBox4.Controls.Add(progressBar1); 
}

追加したプログレスバーの1つを取得するには、グループボックスのControlsオブジェクトコレクションを使用するだけです。

ProgresBar pb = groubBox4.Controls["pgb1"] as ProgressBar;
pb.Increment(1);
于 2012-08-05T15:57:14.137 に答える