gpt4 book ai didi

c# - Windows 窗体文本框 : Selection and Caret position

转载 作者:可可西里 更新时间:2023-11-01 10:44:36 26 4
gpt4 key购买 nike

设置 SelectionStart 和 SelectionLength 后,插入符号位于选择的末尾。

如何将插入符号移动到所选内容的开头?


我现在试了这个:其他线程没有回答这个问题

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

但是......然后我按下退格键或向左/向右移动光标,插入符号的行为仍然像它仍在选择的末尾一样。

最佳答案

不幸的是,您不能使用 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

更新:

如果您需要将位置设置为开头,您可以使用以下方法将插入符位置重置为在显示文本之前开始:

SetSel (0,0);

您不能在使用基本 C#/C++ 函数保持选中文本的同时将插入符号移动到开头,但是您可以使用 C++ 或/和汇编程序覆盖基本的“插入符号”逻辑。

关于c# - Windows 窗体文本框 : Selection and Caret position,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com