2014-10-30 13 views
5

Metni bir arama kutusu aracılığıyla bulduktan sonra seçili metni bir metin kutusu denetiminde görünmeye çalışıyorum. Seçilen metin ya da seçilen metnin son satır sonuna`ScrollToCaret` seçili metnin sonuna kayar, bunun başlangıcına nasıl gidebilirim?

String searchText = "multiple lines of text."; 
int position = textBox.Text.IndexOf(searchText); 
textBox.SelectionStart = position; 
textBox.SelectionLength = searchText.Length; 
textBox.ScrollToCaret(); // caret is at the end of the selected text 

ScrollToCaret yöntem kaydırır

Aşağıdaki kod çalıştı. Dolayısıyla, birden çok satıra yayılıyorsa ve bu bölümün uzunluğu metin kutusunun yüksekliğinden daha büyükse, seçilen metnin bir kısmı görünmeyebilir.

Lütfen dikkat edin, seçili metinde vurgulamayı kaybedeceğim için, kareyi seçimin başlangıcına ayarlayamıyorum.

Seçilen metnin göründüğünden nasıl emin olabilirim veya başka bir deyişle, vurgulanmış olarak kaldığında seçili metnin ilk satırına kaydırılabilir?

+0

Onaylanamam, burada gösterilen tam seçim. – TaW

+0

Çok fazla aşağı kaydırdığınızı varsayalım ki, birden çok satıra yayılan hedeflenen metin gizlidir, şimdi bu metni seçtiyseniz ve ScrollToCaret'i kullandıysanız, kaydırma çubuğu yalnızca seçilen metnin sonundaki duracak şekilde yerleştirilir. – Ahmad

cevap

1
[DllImport("user32.dll")] 
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);  

int numLines = textBox1.GetLineFromCharIndex(textBox1.SelectionStart); 
//scroll to top 
SendMessage(textBox1.Handle, 0x115, 6, 0); //WM_VSCROLL 
//scroll numLines 
SendMessage(textBox1.Handle, 0xB6, 0, numLines); //EM_LINESCROLL 
+3

Bu kod pasajı [bir açıklama dahil] [http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers] sorusunu çözebilirken, yayınınızın kalitesini artırmanıza yardımcı olur. İleride okuyucuları için soruya cevap olduğunu hatırlayın ve bu kullanıcıların da kod öneri nedenlerini bilmiyor olabilir. – gunr2171

İlgili konular