2015-07-19 39 views
2

設置SelectionStart和SelectionLength後,插入符號位於選擇的末尾。Windows窗體文本框:選擇和插入位置

如何將插入符號移動到選擇的開頭?


我現在嘗試這樣做:這個問題不是由其他線程

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

不要以爲只有託管代碼纔有可能。查看[this](https://stackoverflow.com/questions/9104320/textbox-selectionstart-selectionend-and-caret-cursor-position)類似的問題。 – Saragis

+1

您也可以查看鏈接[here](http://stackoverflow.com/questions/15138165/how-to-set-textbox-cursor-position-without-selectionstart) – sundeep

回答

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 

硒在#1提問E詳細:CEdit control MFC, placing cursor to end of string after SetWindowText

更新:

如果您需要設置位置開始的時候你可以重新插入位置顯示使用文本之前開始:

SetSel (0,0); 

你不能將插入符移到開頭,同時使用基本的C#/ C++函數保留選定的文本,但是可以使用C++或/和彙編程序覆蓋基本的「插入符號」邏輯。

+0

問題不在於設置插入/光標到文本的結尾,但是到了選擇的開始。 (選定區域左側的插入符號) – bebo

+0

使用SetSel(0,0),光標位於編輯控件的開頭。但是我想要的是例如選擇4到10的字符並且在第四個字符之前而不是在第10個之後有脫字符。 – bebo

相關問題