문제

Winforms에서는 특정 컨트롤에 초점을 맞추기 위해 항상 전화를 걸고있는 것 같습니다. Control.Select() 그리고 Control.Focus() 작동하기 위해.

차이점은 무엇이며 이것이 올바른 접근법입니까?

도움이 되었습니까?

해결책

초점은 주로 사용자 정의 제어 저자를위한 저수준 방법입니다. 대신, 응용 프로그램 프로그래머는 자식 제어에 대한 선택 방법 또는 ActiveControl 속성을 사용하거나 양식에 대한 활성화 방법을 사용해야합니다.

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

다른 팁

Focus ()는 실제로 초점을 설정하는 낮은 레벨 기능입니다.

SELECT ()는 HIGER 레벨 방법입니다. 컨테이너 컨트롤을 찾을 때까지 컨트롤의 상위 계층 구조에서 처음으로 반복적으로 위로 보입니다. 그런 다음 컨테이너의 ActiveControl 속성 (호출 컨트롤)을 설정합니다. 그러나 이러한 방법의 논리는 간단하지 않으며 Usercontrol 컨테이너에 대한 특별 처리가 있습니다.

어떻게 다른지에 대한 예를 들어, 폼 앱의 컨트롤을 기본적으로 열 때 초점을 맞추기 위해 컨트롤을 설정하려는 경우 initializecomponent () 이후 생성자에서 호출 될 때만 select () 만 작동합니다. Focus ()는 그렇지 않습니다.

이 스레드에 추가하기 위해 다른 컨트롤을 한 형식에서 다른 양식으로 옮기는 사용자 컨트롤을 작성할 때 (새로 생성 된 양식)을 발견했습니다. 원래 양식은 더 이상 컨트롤을 선택할 수 없지만 초점을 사용하면 그렇게 할 수있었습니다. 나는 이것이이 방법이 작동하는 수준에 대한 답을 강조한다고 생각합니다. 그러나 그것은 또한 Orginal Form에서 예상대로 더 이상 작동하지 않기 때문에 더 높은 수준에서 Select를 사용한다고 말하는 것이 간단하지 않다는 것을 의미합니다 (다른 형태로 배치해서는 안됩니다 - 나는 그것을 받아들입니다).

Focus ()는 어떤 상황에서는 컨트롤을 소유 한 창이 초점이 맞지 않으면 포커스를 얻을 수 있습니다. SELECT ()는 창에 초점을 맞추지 않습니다.

개인적인 경험에서 나는 Windows Combobox를 상속하는 사용자 컨트롤을 썼습니다. 나는 그것을 무시하기 위해 코드를 작성해야했다 OnEnter 이벤트와 나는 거기에서 진술을했다

If Me.Focused Then ... Else ...

그러나 불행히도 예상치 못한 결과를 반환했습니다. 내가 전화했다면 MyCustomerComboControl.Select (로드, 표시 또는 활성화 된 이벤트에서) OnEnter 방법이지만 등록하지 못했습니다. 초점이 맞았지만 (예 : 초점은 거짓이었습니다) 포커스라고 불렀다면 작동했습니다. 뿐만 아니라 Select 양식이 열린 경우 즉, 다른 컨트롤을 선택하면 원래 컨트롤을 다시 선택하면 괜찮 았습니다. 그래서 내 시나리오 이외의 다른 상황에서는 Select 위에 그렇게 말하기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top