首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF中RichTextBox内的光标位置

WPF中RichTextBox内的光标位置
EN

Stack Overflow用户
提问于 2014-06-26 07:29:04
回答 2查看 6.4K关注 0票数 4

我正在开发一个小的WPF应用程序,其中有多个选项卡。我在底部有一个状态栏;要求显示光标的行号和列。因此,当用户更改光标位置时,行号和列必须自动更新。下面是我添加RichTextBox的代码;计算行号和列数的代码在KeyDown事件处理程序中,但是这个事件从未被调用过。我应该处理哪个事件来获取游标的行号和列?

代码语言:javascript
运行
复制
private void AddTabitem(string filePath, mode fileMode)
{
    if (fileMode == mode.openFile)
    {
        if (File.Exists(filePath))
        {
            RichTextBox mcRTB = new RichTextBox();
            mcRTB.KeyDown += new KeyEventHandler(LineNumber);
//rest of the code goes here
        }
    }
}
mcRTB.KeyDown += new KeyEventHandler(LineNumber);

private void LineNumber(object sender, KeyEventArgs e)
{          
    TextPointer tp1 = rtbList[EditorTabcontrol.SelectedIndex].Selection.Start.GetLineStartPosition(0);
    TextPointer tp2 = rtbList[EditorTabcontrol.SelectedIndex].Selection.Start;

    int column = tp1.GetOffsetToPosition(tp2);

    int someBigNumber = int.MaxValue;
    int lineMoved, currentLineNumber;
    rtbList[EditorTabcontrol.SelectedIndex].Selection.Start.GetLineStartPosition(-someBigNumber, out lineMoved);
    currentLineNumber = -lineMoved;
    string LineColumnLabel;

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

回答 2

Stack Overflow用户

发布于 2014-06-26 08:12:21

在MSDN (http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.caretposition%28v=vs.110%29.aspx)上有一个你的任务的标准例子。请注意,在此上下文中,“cursor”被称为“脱字符”。来自MSDN的示例如下:

代码语言:javascript
运行
复制
// Create a new FlowDocument, and add 3 paragraphs.
FlowDocument flowDoc = new FlowDocument();
flowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1"))); 
flowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2"))); 
flowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));
// Set the FlowDocument to be the content for a new RichTextBox.
RichTextBox rtb = new RichTextBox(flowDoc);

// Get the current caret position.
TextPointer caretPos = rtb.CaretPosition;

// Set the TextPointer to the end of the current document.
caretPos = caretPos.DocumentEnd;

// Specify the new caret position at the end of the current document.
rtb.CaretPosition = caretPos;
票数 4
EN

Stack Overflow用户

发布于 2014-06-26 08:25:12

使用此代码查找直线和位置

WPF

代码语言:javascript
运行
复制
  "<Label x:Name="LabellineNr" Content="line#" BorderThickness="1" BorderBrush="DarkGray" />
  "<Label x:Name="LabelColumnNr" Content="Column#" BorderThickness="1" BorderBrush="DarkGray"/>

C#代码

代码语言:javascript
运行
复制
    private int privLineID = 1; 
    public int LineID
    {
        get { return privLineID; }
        set 
        { 
            privLineID = value;
            LabellineNr.Content = "Line: " + value;
        }
    }

    private int privColumnID = 1; 
    public int ColumnID
    {
        get { return privColumnID; }
        set 
        { 
            privColumnID = value;
            LabelColumnNr.Content = "Column: " + value;
        }
    }
    private int LineNumber()
    {
        TextPointer caretLineStart = RichTextControl.CaretPosition.GetLineStartPosition(0);
        TextPointer p = RichTextControl.Document.ContentStart.GetLineStartPosition(0);
        int currentLineNumber = 1;

        while (true)
        {
            if (caretLineStart.CompareTo(p) < 0)
            {
                break;
            }
            int result;
            p = p.GetLineStartPosition(1, out result);
            if (result == 0)
            {
                break;
            }
            currentLineNumber++;
        }
        return currentLineNumber;
    }

    private int ColumnNumber()
    {
        TextPointer caretPos = RichTextControl.CaretPosition;
        TextPointer p = RichTextControl.CaretPosition.GetLineStartPosition(0);
        int currentColumnNumber = Math.Max(p.GetOffsetToPosition(caretPos) - 1, 0);

        return currentColumnNumber;
    } 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24420235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档