我正在编写一个像记事本一样的Windows应用程序,但是在MDI格式中。我已经找到了很多样本,但没有一个实现状态栏,它位于视图菜单项中,我的意思是在每个记事本中是一个名为View的菜单项,如果单击此项,则可以在未选中自动换行选项时激活或取消激活状态栏,如果这样做,行号和列号出现在StatusBarLabel中,请告诉我如何我应该在我的应用程序中实现这部分记事本吗?我为这个目标找到了这些用户定义的属性,但我不能为我工作!
public int CurrentColumn
{
get { return textBox1.SelectionStart - textBox1.GetFirstCharIndexOfCurrentLine() + 1; }
}
public int CurrentLine
{
get { return textBox1.GetLineFromCharIndex(textBox1.SelectionStart) + 1; }
}
答案 0 :(得分:0)
虽然我从未使用过这个功能,TextBoxBase.GetPositionFromCharIndex看起来就像你需要的那样。它给出了一个Point,它告诉我你可以从单个函数中获得列和行信息。
我希望这会有所帮助。
答案 1 :(得分:0)
我找到了这个链接!!它对我有用!!
http://weblogs.sqlteam.com/mladenp/archive/2007/10/19/C--Get-current-Caret-Line-and-Column-in-a.aspx
答案 2 :(得分:0)
迟来回答的方法,但是
根据我对您问题的理解,我认为您也想实现一个状态栏。为此,您可以从工具箱中将控件 StatusStrip 添加到存在键入区域的表单中。
此后,您必须添加一个状态标签,在其中显示当前行号和当前行中插入符号的位置,即列号。您可以通过单击小按钮并从出现的列表中选择“状态标签”来添加标签。看起来像 this:
这是可选的,但是您可以通过将对齐属性更改为“向右”来将状态标签向右对齐(就像在Microsoft记事本中一样)。如果在“属性”窗口中找不到对齐属性。您可以通过添加以下行来将其手动添加到Form的Designer.cs文件中:
this.StatusLabel.Alignment=System.Windows.Forms.ToolStripItemAlignment.Right;
您还可以通过将Border属性更改为蚀刻
,在左侧的标签上添加边框您描述的用户定义属性用于从MultiLine文本框中获取当前行和列。
正如您所提到的,这些属性不适合您使用,您可以在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;