1

私はEclipse RCPアプリケーションに取り組んでいます。MultiPageEditorPart を拡張するクラスで、フォーカスをテキスト フィールドに設定しようとしています。しかし、setFocus メソッドは常に false を返します。

私は何を間違っていますか?

MultiPageEditor にはさまざまなページがあり、これらのページ内には Composite クラスがあります。これらのクラスには、テキスト フィールドが含まれています。

スニペットは次のとおりです: (errorPage は int であり、検証でエラーが見つかったページ番号です)

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;
     } 
    }
   }
  }

4

2 に答える 2

3

setFocus() は、次の状況で false を返すことがあります。

  1. おそらく、コントロールはラベルのようなフォーカスできないコントロールです
  2. コンポジットは、自分自身がフォーカスを取得する前に、子供にフォーカスを割り当てようとします
  3. コントロールが無効または非表示の場合、コントロールはフォーカスされません
  4. モダリティが原因で入力がブロックされています。

したがって、(1)右のコントロールにフォーカスを設定しているか、(2)コントロールが表示されているか、コントロールを含むフォームが現在選択されているタブにないかどうかを確認することをお勧めします。(3) は、開いている他のモーダル ダイアログです。

于 2010-01-28T02:03:44.960 に答える
0

Control#forceFocus() を試しましたか?

于 2010-01-27T23:20:53.963 に答える