私はprivate
の形式でカスタムコントロールを持っています。私は、フォームのこのc#どの修飾子をプライベートにするか
foreach(Form f in Application.OpenForms)
1のようなコードを持っている他の形式では
がFormthatcontaincontrols
で、
Formthatcontaincontrols
はprivate
あるカスタムコントロールが含まれている、私は、フォーム"f"
私はprivate
の形式でカスタムコントロールを持っています。私は、フォームのこのc#どの修飾子をプライベートにするか
foreach(Form f in Application.OpenForms)
1のようなコードを持っている他の形式では
がFormthatcontaincontrols
で、
Formthatcontaincontrols
はprivate
あるカスタムコントロールが含まれている、私は、フォーム"f"
パブリックプロパティでコントロールを公開することができます:
private List<T> FindControls<T>(Control.ControlCollection controls) where T: Control
{
List<T> list = new List<T>();
foreach (Control control in controls)
{
var matched = control as T;
if (matched != null)
list.Add(matched);
else
list.AddRange(FindControls<T>(control.Controls));
}
return list;
}
たとえば、あなたが持つすべてのボタンを検索することができます:あなたは、フォーム内のすべてのコントロールを探索することができ
foreach(Formthatcontaincontrols f in Application.OpenForms.OfType<Formthatcontaincontrols>())
{
TheCustomControlYouWant ctrl = f.TheCustomControl;
}
おかげで私はそれを試してみましょう –
:Formthatcontaincontrols
public TheCustomControlYouWant TheCustomControl
{
get { return this.CustomControl; }
}
で次に、あなたは、このプロパティにアクセスすることができますこれは:
foreach (var btn in FindControls<Button>(yourForm.Controls))
{
Trace.WriteLine(btn.Name);
}
コントロールを使用する場合は、実装の詳細を公開しないでください。
親カスタムコントロール(Formthatcontaincontrols
)のコンシューマーの観点からは、実装の詳細を隠す必要があります。
あなたはFormthatcontaincontrols
の消費者にとって重要な何らかの種類のプロパティにアクセスする必要があると思います。
このプロパティを公開して、コントロール自体が関連する子を見つけ、子コントロールに定義されている内部プロパティにアクセスできるようにすることをお勧めします。
Formthatcontaincontrols
は、@Tim Schmelterが貼り付けたソリューションを使用して見つけることができます。
なぜあなたはパブリックプロパティを介してコントロールを公開しませんか? –
そのカスタムコントロールがプライベートに設定されている約40のフォームがあるので、 はすべて変更できませんので、解決策が必要です。 –
もちろんですが、できない場合は、これらのフォームに共通の祖先そのプロパティにアクセスするためのパブリックメソッドを作成することができます – Icepickle