如何仅在需要时使用TextBox.GetPositionFromCharIndex显示垂直滚动条?

时间:2019-02-09 10:40:01

标签: c# winforms textbox

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}

0 个答案:

没有答案