バージョンはVB2010です。
tablelayoutpanel内のLabelコントロールで
For i as Integer = 0 to 100
TableLayoutPanel1.Controls("Label" & i).Text = i
TableLayoutPanel1.Controls("Label" & i).BackColor = Color.Blue
TableLayoutPanel1.Controls("Label" & i).ForeColor = Color.White
Next
などはできるのですが、
TableLayoutPanel1.Controls("Label" & i).TextAlign = ContentAlignment.MiddleRight
のようなことができません。入力支援欄にもそれらしいものが出てこなかったのですが、これはそういうものとあきらめるしかないのでしょうか。
もしなかったとしたら、別に方法があるのでしょうか?
連続の質問ですみませんが、宜しくお願いします。
TableLayoutPanel1.Controls("Label" & i) や TableLayoutPanel1.GetControlFromPosition から
返される値のデータ型が、『Control クラス』であることに注意してください。
Control クラスには Text / BackColor / ForeColor プロパティがありますが、
Control クラスに TextAlign プロパティはありません。(Label や TextBox にならありますが)
> 別に方法があるのでしょうか?
本来のデータ型にキャストしてあげれば OK です。
DirectCast(TableLayoutPanel1.Controls("Label" & i), Label).TextAlign = ContentAlignment.MiddleRight
あるいは Linq を使う手法もあります。
'Label1〜Label100 以外の名前のラベルが含まれる場合は、Where などでフィルタリングする
For Each lbl In TableLayoutPanel1.Controls.OfType(Of Label)()
lbl.Text = lbl.Name.Substring("Label".Length)
lbl.TextAlign = ContentAlignment.MiddleRight
lbl.BackColor = Color.Blue
lbl.ForeColor = Color.White
Next
------
上記のほかにも、レイトバインドを利用する手法があります。
具体的には、Object 型に対するアクセスするとか、
CObj(TableLayoutPanel1.Controls("Label" & i)).TextAlign = ContentAlignment.MiddleRight
もしくは、CallByName を利用するという方法です。
CallByName(TableLayoutPanel1.Controls("Label" & i), "TextAlign", CallType.Set, ContentAlignment.MiddleRight)
ただしこれらの手法だと、開発時における入力ヒント(IntelliSense)の支援が受けられませんし、
スペルミス(TextAlign → TextArain など)があっても、コンパイル時点では検出されません。
そのため、レイトバインドを利用することはあまりお奨めしません。
ツイート | ![]() |