2012-01-03 10 views
4

したがって、System.Windows.Forms.Controlは、タイプControl.ControlCollectionControlsプロパティを持っています。私はこのコレクションに小さなサブコントロールの束を持っているフォームのコントロールを持っています。これらのサブコントロールには、データベースのフィールド名であるラベルとテキスト識別子があります。System.Windows.Forms.Control.ControlCollectionのキーに使用されるものは何ですか?

私は戻ってControlsコレクションにアクセスし、名前でコントロールを見つけることができるようにする必要があります。 ControlCollectionにはpublic virtual Control this[string key] { get; }public virtual bool ContainsKey(string key)がありますので、私はそれらを見ることができるはずです。

ただし、追加機能(public virtual void Add(Control value))はキーストリングを使用せず、追加するのはSystem.Windows.Forms.Controlで、ContainsKeyへのすべてのコールはfalseを返します。 Controlに何かを考え出す

は(のみControlが渡されたので)キーであることを上書きする必要があり、私は(私は、ルックアップのために使いたいんだ)データベースのフィールド名を返すためにToString()を上書きしようとしたが、 ContainsKeyは、指定したフィールドのコントロールが存在することがわかっても、依然としてfalseを返します。

this[string key] { get; }のドキュメントは、重要なパラメータがあると言い、「コントロールコレクションから取得するためのコントロールの名前。」 Controlには、オーバーライドできるNameプロパティはありません。唯一のNameプロパティにはクラス名が含まれています。クラス名は、追加するすべてのコントロールで同じになります。 ContainsKey(string key)のドキュメントでは、キーパラメータは「キーを特定する」ことを示しています。

答えて

7

私はNameをオーバーライドすることはできませんが...

は答えを見つけましたが、私はすでにので、私もそれが役立つかもしれないことと、他のケースの誰かではその後、自己の答えを公開する可能性のあるすべての本を書きましたプロパティ、それは私が愚かに仮定して{get;}ではなく、{get; set;}です。だから私が Controlsコレクションに追加する前にデータベースのフィールド名に私のコントロールの Nameを設定すると、私は期待どおりにそれを見ることができます。

答えがControl[] Find(string key, bool searchAllChildren)方法ではなく、私が使用しようとしていた機能のためのドキュメントの概要ドキュメントにあった:彼らのSystem.Windows.Forms.Control.Nameプロパティでコントロールの 「検索との配列を作成します一致するすべてのコントロール。 "

+0

あなた自身の質問にお答えいただきありがとうございます。いいえ、いたずらしない! – TheBlastOne

+0

あなたが問題で見るのは、それがどうして落ちたかです。最初の3つの段落を書いた。 ToStringのことを考えて試しました。 4段落を書きました。私が使用している機能に関するドキュメントをチェックしました。 5段落を書きました。最後の段落と答えを書きました... :) –

+0

ネットの結果:愚かなことのための "尊敬のポイント"がたくさんあります。そして、全くそうではありません:-) – TheBlastOne

関連する問題