2012-01-03 3 views
4

따라서 System.Windows.Forms.Control의 유형은 Control.ControlCollectionControls입니다. 이 컬렉션에는 작은 하위 컨트롤이 포함 된 양식에 대한 컨트롤이 있습니다. 이러한 하위 컨트롤에는 데이터베이스의 필드 이름 인 레이블과 텍스트 식별자가 있습니다.System.Windows.Forms.Control.ControlCollection의 키에 사용되는 것은 무엇입니까?

Controls 컬렉션으로 돌아가 이름으로 컨트롤을 찾을 수 있어야합니다. ControlCollectionpublic 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 통과하기 때문에), I (나는 조회에 사용할 꿔) 데이터베이스 필드 이름을 반환 ToString()을 무시하려 열쇠가 될 오버라이드 (override)해야하지만, ContainsKey 여전히 지정된 필드에 대한 컨트롤이있는 것을 알 때 false를 반환합니다.

this[string key] { get; }에 대한 설명서는 키 매개 변수가 "컨트롤 컬렉션에서 검색 할 컨트롤의 이름"이라고 말합니다. Control에는 재정의 할 수있는 Name 속성이 없으며 유일한 Name 속성에는 추가 할 모든 컨트롤에 대해 동일한 클래스 이름이 포함되어 있습니다. ContainsKey(string key)의 설명서에 따르면 키 매개 변수는 "찾을 수있는 키"로되어있어 덜 도움이됩니다.

답변

7

나는 Name을 무시할 수는 없지만 ...

는 답을 발견하지만 난 이미 나뿐만 아니라 유용 찾을 수있는 IT와 다른 경우 누군가에 다음 자기 대답을 게시 할 수있는 모든이를 썼다 속성, 그것은 {get; set;}입니다. 순수하지는 않습니다. {get;} 나는 바보처럼 추측했습니다. 따라서 Controls 컬렉션에 추가하기 전에 Name을 데이터베이스 필드 이름으로 설정하면 예상대로 찾을 수 있습니다.

대답은 Control[] Find(string key, bool searchAllChildren) 방법의 요약 문서에 있었다, 내가 사용하려고 한 기능이 아니라 문서 : 자신의 System.Windows.Forms.Control.Name 속성에 의해 컨트롤 "검색 및 배열을 구축 일치하는 모든 컨트롤. "

+0

질문에 답변 해 주셔서 감사합니다. 의도 한 말장난 없음! – TheBlastOne

+0

질문에서 보는 것은 어떻게 내려 갔는지입니다. 처음 3 단락을 썼습니다. ToString에 대한 생각과 시도. 4 단락을 썼습니다. 내가 사용할 함수에 대한 문서를 확인했습니다. 단락 5를 썼습니다. Find docs를 넘어 섰습니다. 마지막 문단과 대답을 썼습니다. :) –

+0

그물 결과 : 어리 석다는 이유로 "존경 포인트"가 많습니다. 그렇다면 전혀 그렇지 않습니다 :-) – TheBlastOne

관련 문제