2009-06-30 8 views
7

레이블, 텍스트 상자 및 단추가있는 양식을 만들었습니다. 양식로드 이벤트에서 텍스트 상자에 focus() 함수를 호출했습니다. 하지만 내 코드를 실행할 때 커서가 텍스트 상자에 나타나지 않습니다. 폼이로드 되 자마자 커서가 텍스트 상자로 이동해야합니다. 그것을하는 방법?텍스트 상자에 초점

답변

7

당신은 단순히해야 할 경우 반드시 특정 컨트롤을 사용하면 먼저 (디자이너에) 모든 컨트롤의 TabOrder 속성을 변경 양식을로드 할 때 해당 컨트롤이 '0'이되도록 포커스를 취득 다른 요소는 '1', '2'등으로 올라갑니다.

일부 조건에 따라 양식을 표시 할 때 다른 컨트롤을 동적으로 선택해야하는 경우 다음 코드를 사용하십시오.

private void Form1_Load(object sender, EventArgs e) { 
    // You need to show the form otherwise setting focus does nothing 
    // (there are no controls to set focus to yet!) 
    this.Show() 
    if (someCondition == true) 
     control.Focus(); 
    else 
     control2.Focus(); 
} 
+0

포커스 '는 양식 표시 이벤트에서 설정할 수 있습니다. –

+1

+1 : 컨트롤의 올바른 탭 순서를 설정하고 프레임 워크가 제대로 작동하도록합니다. –

+4

특정 탭 순서가 필요할 수 있지만 0 탭 순서 속성으로 시작하고 싶지 않을 수 있습니다. –

3

대신 Shown 이벤트를 처리하십시오. 이 코드는 작동해야합니다.

private void Form1_Shown(object sender, EventArgs e) 
{ 
    textBox2.Focus(); 
} 
+0

+1 시도해 보았습니다. –

+0

동일한 양식을 숨기거나 표시 할 때 항상 포커스를 다시 설정한다는 점에서 활성화 된 솔루션과 동일한 문제가 있습니다. 이것은 좋은 일이 아닐 수도 있습니다. –

1

로드에서 포커스를 호출하지 마십시오. 행사. Activate 이벤트에서 호출하십시오. 그게 작동 할 것입니다

+0

폼이 활성화 될 때마다 포커스를받는 텍스트 상자로 연결되기 때문에 바람직하지 않을 수도 있습니다. –

+0

오 예. 나는 그 세부를 놓쳤다 – Sahas

+0

그래서 어느 쪽이 더 좋은 길일 것이냐? 이벤트를 활성화하거나 TabOrder를 설정 하시겠습니까? – Vicky

1

언제 양식을로드 할 때 항상 텍스트 상자에 포커스를 원한다면 텍스트 상자의 TabIndex 속성을 0으로 설정할 수 있습니다. 이 속성은 결국 form.designer.cs에 항상 설정되며 form.c에 여분의 코드를 작성할 필요가 없습니다.

관련 문제