从带有换行的文本框中获取 LineCount
Get LineCount from a textbox with wrapping
我想得到有多少行的文本框换行。以下代码无效。
void txt_Loaded(object sender, RoutedEventArgs e)
{
TextBox t = (TextBox)sender;
var count = t.LinesCount; // wrong;
// or
var lineCount = t.Text.Split(new[] {'\n','r'}).length;
}
我有三行,但是var lineCount = t.Text.Split(new[] {'\n','r'}).length;
returns 4.
您的代码中有错字,正在寻找字母 r
而不是回车符 return \r
尝试var lineCount = t.Text.Split(new[] {'\n','\r'}).length;
另一种选择是如上所述拆分,然后将每行的长度除以单行上可以包含的字符数。您可能需要对此进行计算,因为 TextBox 似乎没有 Columns
属性.
如果要查找换行数,可以使用GetLineIndexFromCharacterIndex()。
作为参数,您可以传递最后一个字符(对应于 Text.Lenght
)。
int WrappedLines1 = TextBox.GetLineIndexFromCharacterIndex(TextBox.Text.Length) + 1;
或TextBox.LineCount().
第一种方法returns一个从零开始的索引,第二种方法从1开始计数。
int WrappedLines2 = TextBox.LineCount;
物理行数(用换行符分隔的行数)可以用Split().Count()
来计算。
int LineFeedsCount = TextBox.Text.Split(new[] { "\n" }, StringSplitOptions.None).Count();
如果您不想计算空行,请使用 StringSplitOptions.RemoveEmptyEntries
作为选项参数。
您可以验证行数是否正确,将 TextWrapping
属性 设置为 .NoWrap
并用 .LineCount
.
计算行数
TextBox1.TextWrapping = TextWrapping.NoWrap;
int LineFeedsCount = TextBox1.LineCount;
我想我找到了 LineCount
不起作用的原因。`
TextBox 实际上在DataColumn 中。我将宽度设置为 2*.
<telerik:GridViewDataColumn Header="Info" DataMemberBinding="{Binding Info}" Width="2*">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBox
AcceptsReturn="True"
TextWrapping="Wrap"
Text="{Binding Info, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Loaded="TextBox_Loaded"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>`.
宽度 属性 导致了问题。如果我删除它然后它工作。但我需要宽度,不确定为什么以及如何?
我想得到有多少行的文本框换行。以下代码无效。
void txt_Loaded(object sender, RoutedEventArgs e)
{
TextBox t = (TextBox)sender;
var count = t.LinesCount; // wrong;
// or
var lineCount = t.Text.Split(new[] {'\n','r'}).length;
}
我有三行,但是var lineCount = t.Text.Split(new[] {'\n','r'}).length;
returns 4.
您的代码中有错字,正在寻找字母 r
而不是回车符 return \r
尝试var lineCount = t.Text.Split(new[] {'\n','\r'}).length;
另一种选择是如上所述拆分,然后将每行的长度除以单行上可以包含的字符数。您可能需要对此进行计算,因为 TextBox 似乎没有 Columns
属性.
如果要查找换行数,可以使用GetLineIndexFromCharacterIndex()。
作为参数,您可以传递最后一个字符(对应于 Text.Lenght
)。
int WrappedLines1 = TextBox.GetLineIndexFromCharacterIndex(TextBox.Text.Length) + 1;
或TextBox.LineCount().
第一种方法returns一个从零开始的索引,第二种方法从1开始计数。
int WrappedLines2 = TextBox.LineCount;
物理行数(用换行符分隔的行数)可以用Split().Count()
来计算。
int LineFeedsCount = TextBox.Text.Split(new[] { "\n" }, StringSplitOptions.None).Count();
如果您不想计算空行,请使用 StringSplitOptions.RemoveEmptyEntries
作为选项参数。
您可以验证行数是否正确,将 TextWrapping
属性 设置为 .NoWrap
并用 .LineCount
.
计算行数
TextBox1.TextWrapping = TextWrapping.NoWrap;
int LineFeedsCount = TextBox1.LineCount;
我想我找到了 LineCount
不起作用的原因。`
TextBox 实际上在DataColumn 中。我将宽度设置为 2*.
<telerik:GridViewDataColumn Header="Info" DataMemberBinding="{Binding Info}" Width="2*">
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<TextBox
AcceptsReturn="True"
TextWrapping="Wrap"
Text="{Binding Info, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Loaded="TextBox_Loaded"/>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>`.
宽度 属性 导致了问题。如果我删除它然后它工作。但我需要宽度,不确定为什么以及如何?