从this previous question开始,我有以下方法:
for (int i = 0; i < noRows; i++) {
for (int j = 0; j < noCols; j++) {
cin >> val;
if (val != commonValue) {
new (myMatrix + count) SparseRow(i, j, val);
count++;
}
}
}
由于目前未知的原因,它在我需要的上下文中不起作用,因此我尝试了另一种解决方案。
我创建了一个新多行internal static int NumberOfPhysicalLinesInTextBox(TextBox tb)
{
int lc = 0;
while (tb.GetFirstCharIndexFromLine(lc) != -1)
{
++lc;
}
return lc;
}
,其中没有字符。我只在其中输入一个Enter键(它在TextBox
属性中显示为“ \ r \ n”,即2个字符)。上面的方法Text
可正确返回物理行数2(插入符号在第二和最后一条物理行上)。
使用以下方法,在这种特定情况下,我无法获得相同的结果(通常,效果很好):
NumberOfPhysicalLinesInTextBox
internal static int NumberOfPhysicalLinesInTextBox_2(TextBox tb)
{
string t = tb.Text;
int lines = 1;
int firstCharY = tb.GetPositionFromCharIndex(0).Y;
int lastCharY = tb.GetPositionFromCharIndex(t.Length - 1).Y;
lines += (lastCharY - firstCharY) / tb.Font.Height;
return lines;
}
用参数0调用,然后用1返回相同的Point:TextBoxBase.GetPositionFromCharIndex
,对于2(不包含字符),它返回Point:{X = 1, Y = 1}
。