设置SelectionStart和SelectionLength后,插入符号位于选择的末尾。
如何将Caret移至选择的开头?
我现在尝试过这个问题:其他线程没有回答这个问题
SelectionStart = selStart; // set the desired position
SelectionLength = 0;
MyLibs.WindowsDll.POINT point;
MyLibs.WindowsDll.GetCaretPos(out point); // save the position
SelectionLength = restOfWord.Length; // extend the selection
MyLibs.WindowsDll.SetCaretPos(point.X, point.Y); // restore caret position
GetCaretPos和SetCaretPos正在以某种方式工作,但不是应该的。 使用上面的代码片段,插入符号确实在选择开始时闪烁。
但是......然后我向左/右击了退格键或光标,插入符仍然表现得像是在选择的结尾。
答案 0 :(得分:0)
不幸的是,您无法使用C#等托管代码执行此操作,
但要实现这一目标,您可以使用C ++,SetFocus()
函数,
例如:
//use SetFocus()
pEdit->SetFocus()
//place caret at the end:
pEdit->SendMessage (WM_KEYDOWN,VK_END,0);
//simulate keyup:
m_Edit->SendMessage (WM_KEYUP,VK_END,0);
//send the key code:
m_Edit->SendMessage(WM_CHAR,'A',0);
了解MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646312(v=vs.85).aspx
您也可以使用CEdit::SetSel
来实现这一目标:
CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetFocus();
e->SetSel(0,-1); // move cursor at the end
e->SetSel(-1); // remove selection
请参阅Stackoverflow问题中的详细信息:CEdit control MFC, placing cursor to end of string after SetWindowText
更新:
如果您需要将位置设置为开头,则可以在使用以下项目显示文本之前重置Caret位置以开始:
SetSel (0,0);
在使用基本C#/ C ++函数保持文本选择的同时,不能将插入符号移动到开头,但是您可以使用C ++或/和汇编程序覆盖基本的“插入符号”逻辑。