0

我正在编写一个像记事本一样的 Windows 应用程序,但采用 MDI 格式。我为此找到了很多示例,但没有一个实现了视图菜单项中的状态栏,我的意思是在每个记事本中都有一个菜单名为 View 的项目,如果单击此项目,则可以在未选中自动换行选项时激活或停用状态栏,如果这样做,行号和列号会出现在 StatusBarLabel 中,请告诉我应该如何实现我的应用程序中记事本的这一部分?我为此目标找到了这些用户定义的属性,但它们对我不起作用!

public int CurrentColumn
{
     get { return textBox1.SelectionStart - textBox1.GetFirstCharIndexOfCurrentLine() + 1; }
}

public int CurrentLine
{
    get { return textBox1.GetLineFromCharIndex(textBox1.SelectionStart) + 1; }
} 
4

2 回答 2

0

尽管我从未使用过此函数,但 TextBoxBase.GetPositionFromCharIndex看起来就像您需要的那样。它给出了一个点,它告诉我您将从单个函数中获取列和行信息。

我希望这有帮助。

于 2012-12-30T18:35:05.937 回答
0

回答太晚了,但是,

根据我对您的问题的理解,我认为您也想实现一个状态栏。为此,您可以将工具箱中的控件StatusStrip添加到存在输入区域的表单中。

之后,您必须添加一个状态标签,您将在其中显示当前行号和当前行中的插入符号位置,即列号。您可以通过单击小按钮并从出现的列表中选择状态标签来添加标签。它看起来像 这样

这是可选的,但您可以通过将对齐属性更改为 Right 来将状态标签向右对齐(就像在 Microsoft 记事本中一样)。如果在属性窗口中找不到对齐属性。您可以通过添加以下行将其手动添加到表单的 Designer.cs 文件中:

     this.StatusLabel.Alignment=System.Windows.Forms.ToolStripItemAlignment.Right;

您还可以通过将 Border 属性更改为Etched来为左侧标签添加边框

您描述的用户定义属性用于从多行文本框获取当前行和列。

正如您所提到的,这些属性对您不起作用,您可以在 TextBox 的SelectionChanged事件中使用它们,这样当您在 TextBox 中移动光标时它会不断更新。如果您使用这些属性,它将看起来像这样。

private void TextBox_SelectionChanged(object sender, EventArgs e)
        {
            StatusLabel.Text = String.Format("Ln {0}, Col {1}", CurrentLine, CurrentColumn);
        }

要隐藏状态栏,您可以通过以下方式切换其可见性:

StatusBar.Visible=!StatusBar.Visible;
于 2020-08-04T10:31:41.210 回答