1

IDがusercontrol1、usercontrol2、usercontrol3 ...... usercontrol10の10個のカスタムユーザーコントロールがあります。

これらすべてのユーザーコントロールをリスト「allusercontrol」に追加したいと思います。私はこのような力ずくでこれを行います

allusercontrol.Add(usercontrol1);
allusercontrol.Add(usercontrol2);
allusercontrol.Add(usercontrol3);
.
.
.
.
.

この些細な作業を行うためのよりエレガントで簡単な方法はありますか? usercontrols ID がシリーズの一部であることがわかります"usercontrol"+an int

4

3 に答える 3

1

エラーが発生しやすいため、このアプローチには反対することをお勧めします。それらの名前を変更したい場合、これを忘れてButtonX、このリストに含めるべきではない名前の他のコントロールを追加した場合はどうなりますか?

代わりに、のようなコンテナコントロールにそれらを収集しますPanel。次にLINQ、関連するものを見つけるために使用できますButtons

var myButtons = myPanel.Controls.OfType<Button>();

Enumerable.OfTypeそれに応じてコントロールをフィルタリングしてキャストします。それらをさらにフィルタリングしたい場合は、次Enumerable.Whereのように使用できます。

var myButtons = myPanel.Controls
                       .OfType<Button>()
                       .Where(btn => btn.ID.ToLower().StartsWith("button"));

これで、それらを繰り返すことができます。Buttonsたとえば、次のようになります。

foreach(Button btn in myButtons)
{
    // do something amazing
}

ToList()または、電話してList<Button>(質問の核心)を取得することもできます。

List<Button> allbuttons = myButtons.ToList();
于 2012-07-02T10:19:57.440 に答える
0

Control.ControlCollection.AddRangeを使用します-ここを見てください

于 2012-07-02T10:34:17.920 に答える
0

このコードで試してください

List<UserControl> controls = new List<UserControl>
{
    usercontrol1,
    usercontrol2,
    usercontrol3
};
于 2012-07-02T10:17:21.820 に答える