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. 也许 control 是一个不可聚焦的控件,如 Label
  2. 复合材料试图在自己集中注意力之前将注意力分配给他们的孩子
  3. 如果控件被禁用或隐藏,它将不会获得焦点
  4. 由于模态,输入被阻止。

所以我最好检查一下,(1)我是否将焦点设置在正确的控件上,(2)控件是否可见,可能包含该控件的表单不在当前选定的选项卡中。(3) 是否打开了任何其他模态对话框。

于 2010-01-28T02:03:44.960 回答
0

您是否尝试过 Control#forceFocus()?

于 2010-01-27T23:20:53.963 回答