2016-10-03 3 views
0

私はC#とWindowsフォームを使用しています.20個のラベルを含むグループボックスがあります(最上列に10、最下列に10)。グループボックス内のlocationプロパティに基づいてlabel.textを設定します

これらのラベルのTextプロパティは、グループボックス内の位置座標に基づいて設定します。同じ行のすべてのラベルのY座標は同じままであり、X座標のみが変更されます。

Example locations: 

label1.Location is (6,16), label2.Location is (33,16) ... label10.Location is (150,16) 

label11.Location is (6,43), label12.Location is (33,43) ... label20.Location is (150,43) 

次に元々label.Textはint aが「列」数とint bが「行」番号のいずれか1 OR 2であることを示すための1と10の間の数であるlabel_[int a]_[int b]として設定されています。

これはすべて素晴らしいですが、20個のラベルが付いた60個のグループボックスが必要です。名前を変更するとそれぞれの名前を変更するのはかなり苦しいです。

このように設定されている理由は、すべての「列」が最上位または最下行のいずれかで1つの数字しか得られないからです。

私の最初の質問は次のとおりです。 テキストプロパティをlocationプロパティで設定することはできますか?

第2に、stackoverflowハイブの心はこれを行うためのより良い/効率的な方法を考えることができますか?

注:ループを使用しようとすると、ラベルをリストに読み込もうとしましたが、適切なラベルを選択すると複雑になります。

私は、各グループボックスで個別に使用できる単一の方法を開発しようとしています。

今のところこれは私の心の中では意味がありますが、私はすぐに他の情報を提供することはできません。

+1

最初に、これは私には意味がありません "私はそれに12のラベル(最上列に10、最下列に10)を持つグループボックスを持っています"。私はいくつかの数学の授業で眠っているかもしれませんが、私は10 + 10 = 20 = 12ではないことを覚えていると思います.2番目に、一般的に、コンテナをパラメータとして取り、ラベルを設定するために子供をループさせるメソッドを作成します。 – Kevin

答えて

-1

私は、foreachをGroupBox.Controlsに試してみることができます。このforeach内でも名前を確認できます。例:

foreach(Label lbl in groupBox1.Controls 
{ 
    if (lbl.Name.Contains("[int_a]_[int_b]")) 
    { 
     lbl.Text = "Label Text"; 
    } 
} 

私は、これはあなたがこれは私へのユーザーコントロールのための良い候補のように聞こえる

1

を必要としているものにベースを与えると思います。

グループボックスとラベルを持つユーザーコントロールを設計します。 外部で必要な操作を公開します。おそらく、命名規則をより意味のあるものに設定する良い時期です。

@Kevin氏のように、デザインタイムではなく、コードからラベルを生成する別の方法があります。あなたが必要とするグループボックスやその他の値を取得するメソッドを作成します。次に、ラベル名と場所を必要に応じて設定します(デザイナーファイルを参照)。

+0

definitly私が探していた返答、今これを試してみて、それが必要な方法で動作するかどうかを見て、他の人が私の答えとしてこれをマークする前に思い付きたい。コントロール+1 –

関連する問題