2013-08-01 29 views
5

WinForms'tan WPF'ye bir uygulama yüklüyorum ve seçimin metin kutusunda nerede olduğu için satır ve sütun numarasını almaya çalışırken bir çakma yakaladım. WinForms'da oldukça basit bir şekilde yapabildim ancak WPF'in bir RichTextBox'ı uygulamak için tamamen farklı bir yolu var, bu yüzden nasıl gideceğimi bilmiyorum.C# WPF Satır ve Column numarası, RichTextBox

İşte benim WinForms mevcut seçim dizinini alamayan çünkü bu WPF ile çalışmayacak çözüm

int line = richTextBox.GetLineFromCharIndex(TextBox.SelectionStart); 
int column = richTextBox.SelectionStart - TextBox.GetFirstCharIndexFromLine(line); 

LineColumnLabel.Text = "Line " + (line + 1) + ", Column " + (column + 1); 

olduğunu. Böyle

int lineNumber; 
textBox.CaretPosition.GetLineStartPosition(-int.MaxValue, out lineNumber); 
int columnNumber = richTextBox.CaretPosition.GetLineStartposition(0).GetOffsetToPosition(richTextBox.CaretPosition); 
if (lineNumber == 0) 
    columnNumber--; 

statusBarLineColumn.Content = string.Format("Line {0}, Column {1}", -lineNumber + 1, columnNumber + 1); 
+0

Bir şey denediniz mi, nasıl tamamen farklı olduğunu anlatmak için? –

+0

Şunlarla ilgili: http://stackoverflow.com/questions/957441/richtextbox-wpf-does-not-have-string-property-text?rq=1 –

+0

Bağımlılıklara bakmanız gerekecek ama bu bir kolay görev Buna baktım, ne kadar çalışmanın gerekli olduğunu (ya da en azından ne kadar öğrenmem gerektiğini) gördüm ve ürün özellikümü değiştirdim, böylece bundan kaçınabildim! Projeniz için zaman önemliyse, üçüncü bir tarafa en iyi bakmak olabilirsiniz. – Dave

cevap

7

birşey bir başlangıç ​​noktası verebilir: BURADA

ÇALIŞMA ÇÖZÜM OLDUĞU.

TextPointer tp1 = rtb.Selection.Start.GetLineStartPosition(0); 
TextPointer tp2 = rtb.Selection.Start; 

int column = tp1.GetOffsetToPosition(tp2); 

int someBigNumber = int.MaxValue; 
int lineMoved, currentLineNumber; 
rtb.Selection.Start.GetLineStartPosition(-someBigNumber, out lineMoved); 
currentLineNumber = -lineMoved; 

LineColumnLabel.Content = "Line: " + currentLineNumber.ToString() + " Column: " + column.ToString(); 

Dikkat edilmesi gereken birkaç şey. İlk satır 0 satırı olacak, bu yüzden satır numarasına bir + 1 eklemek isteyebilirsiniz. Ayrıca bir satır ilk sütununu sararsa 0 olur, ancak ilk satır ve bir CR'yi izleyen herhangi bir satır, ilk konumu sütun 1 olarak listeler.

+1

Teşekkürler! Cevabınız gerçekten yardımcı oldu. Eğer satır numarası 1 ise sütundan eksi 1 olan küçük bir şey yapmak zorunda kaldım. Çalışma çözümümü göndereceğim –

İlgili konular