2010-01-27 4 views
1

Eclipse RCP 응용 프로그램에서 작업하고 있습니다. MultiPageEditorPart를 확장하는 클래스에서 텍스트 필드에 포커스를 설정하려고합니다. 그러나 setFocus 메서드는 항상 false를 반환합니다.setFocus() always false

내가 뭘 잘못하고 있니?

MultiPageEditor에는 다양한 페이지가 있으며이 페이지 안에는 복합 클래스가 있습니다. 이러한 클래스에는 텍스트 필드가 포함됩니다. 여기

이 코드 조각입니다 : (의 errorpage은 INT이며, 내 유효성 검사가 발견되는 PAGENUMBER 오류가)

if(!dataValid) { 
    MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Fehler bei der Dateneingabe", stringBuilder.toString()); 
    this.setActivePage(errorPage); 
    Composite errorComposite = (Composite) this.getControl(errorPage); 
    Control[] children = errorComposite.getChildren(); 
    for (Control child : children) { 
    if(child instanceof Form) { 
    Form form = (Form) child; 
    Composite body = form.getBody(); 
    Control[] formChildren = body.getChildren(); 
    for (Control formChild : formChildren) { 
     if(formChild.equals(errorControl)) 
          formChild.setFocus(); 
     return dataValid; 
    } 
    } 
    } 
    }

답변

3

는 :

  1. 아마 제어는
  2. 복합 복용하기 전에 아이들에게 초점을 대입 할 때 라벨 같은 unfocusable 컨트롤은 자신에게
  3. 제어를 집중한다 비활성화되었거나 숨겨져있는 경우 포커스를 얻지 못합니다.
  4. 입력이 모달로 인해 차단되었습니다.

그래서 나는 (1) 올바른 컨트롤에 포커스를 설정했는지, (2) 컨트롤이 보이는지, 컨트롤이 들어있는 폼이 현재 선택된 탭에 없는지 확인하는 것이 좋습니다. (3) 다른 모달 대화 상자가 열려 있습니다.

+0

아마도'Shell '이 보이기 전에'setFocus()'를 호출하고있을 것입니다. –

0

당신은) (컨트롤 # forceFocus를 시도?

setFocus void 현재()는 다음과 같은 경우에 false를 반환 할 수 있습니다
관련 문제