在 Windows 7 SWT 4.3 setSelection 不移动文本末尾的插入符号
On Windows 7 SWT 4.3 setSelection doesn't move the caret at end of text
我在 swt 中有以下文本。我正在尝试在文本小部件中显示特定文本并将插入符号移至末尾,以防用户想要添加内容。
问题是插入符号总是 before 最后一个字符而不是 after
text = new Text(group, SWT.BORDER);
text.addListener(SWT.KeyDown, e -> {
if (e.keyCode == SWT.ARROW_UP) {
String prevText = "some text from history";
text.setText(prevText);
text.setSelection(prevText.length());
//This doesn't work either: caret is stil before last character
//text.setSelection(prevText.length()+10);
}
});
更多详情:
Windows7
swt-4.3
SWT-OS: win32
SWT-WS: win32
SWT-Arch: x86_64
在 OSX 上它表现正常。
我可以证实你的观察 运行 Windows 7 上带有 SWT 3.106(与 Eclipse 4.6 一起提供)的片段。
Up 键将插入符号的位置更改为最后一个字符。在 Windows 上,Up 和 Down 键分别向左和向右更改光标位置。为防止这种情况发生,您需要阻止文本小部件使用
消耗按键事件
event.doit = false;
此问题仅适用于单行文本输入字段。如果文本是使用 new Text( parent, SWT.MULTI )
创建的,则设置选择会按预期工作。
或者,对于单行文本输入字段,使用重载的 setSelection(in,int)
或 setSelection(Point)
方法。例如:
int selection = text1.getText().length() + 1;
text1.setSelection( selection, selection );
在 Windows 上,使用 ▲ 和 ▼ 箭头键将向左或向右移动插入符号。
虽然这仅适用于单行 Text
小部件。
所以这是预期的行为,而不是错误。
我在 swt 中有以下文本。我正在尝试在文本小部件中显示特定文本并将插入符号移至末尾,以防用户想要添加内容。
问题是插入符号总是 before 最后一个字符而不是 after
text = new Text(group, SWT.BORDER);
text.addListener(SWT.KeyDown, e -> {
if (e.keyCode == SWT.ARROW_UP) {
String prevText = "some text from history";
text.setText(prevText);
text.setSelection(prevText.length());
//This doesn't work either: caret is stil before last character
//text.setSelection(prevText.length()+10);
}
});
更多详情:
Windows7
swt-4.3
SWT-OS: win32
SWT-WS: win32
SWT-Arch: x86_64
在 OSX 上它表现正常。
我可以证实你的观察 运行 Windows 7 上带有 SWT 3.106(与 Eclipse 4.6 一起提供)的片段。
Up 键将插入符号的位置更改为最后一个字符。在 Windows 上,Up 和 Down 键分别向左和向右更改光标位置。为防止这种情况发生,您需要阻止文本小部件使用
消耗按键事件event.doit = false;
此问题仅适用于单行文本输入字段。如果文本是使用 new Text( parent, SWT.MULTI )
创建的,则设置选择会按预期工作。
或者,对于单行文本输入字段,使用重载的 setSelection(in,int)
或 setSelection(Point)
方法。例如:
int selection = text1.getText().length() + 1;
text1.setSelection( selection, selection );
在 Windows 上,使用 ▲ 和 ▼ 箭头键将向左或向右移动插入符号。
虽然这仅适用于单行 Text
小部件。
所以这是预期的行为,而不是错误。