Windows窗体文本框:选择和插入位置

时间:2015-07-19 12:40:08

标签: c# windows forms textbox

设置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正在以某种方式工作,但不是应该的。 使用上面的代码片段,插入符号确实在选择开始时闪烁。

但是......然后我向左/右击了退格键或光标,插入符仍然表现得像是在选择的结尾。

1 个答案:

答案 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 ++或/和汇编程序覆盖基本的“插入符号”逻辑。