在RichTextBox中,如何得到光标所在的行号和列号?

jiuxingwhere 2003-08-12 10:37:27
WinForm的。
...全文
55 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheAres 2003-08-12
  • 打赏
  • 举报
回复
调用GetCaretPos来实现。


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace csTest
{
public class Form1 : System.Windows.Forms.Form
{

[DllImport("user32")]
public static extern bool GetCaretPos(ref System.Drawing.Point lpPoint);

private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button buttonGetResult;
private System.ComponentModel.Container components = null;

public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code

private void InitializeComponent()
{
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.buttonGetResult = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// richTextBox1
//
this.richTextBox1.Location = new System.Drawing.Point(19, 26);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.Size = new System.Drawing.Size(634, 250);
this.richTextBox1.TabIndex = 0;
this.richTextBox1.Text = "";
//
// buttonGetResult
//
this.buttonGetResult.Location = new System.Drawing.Point(547, 293);
this.buttonGetResult.Name = "buttonGetResult";
this.buttonGetResult.Size = new System.Drawing.Size(90, 25);
this.buttonGetResult.TabIndex = 1;
this.buttonGetResult.Text = "行数列数";
this.buttonGetResult.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(672, 324);
this.Controls.Add(this.buttonGetResult);
this.Controls.Add(this.richTextBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private int X=0;
private int Y=0;
private void button1_Click(object sender, System.EventArgs e)
{
Point P=new Point(0);
GetCaretPos(ref P);
int Pos=this.richTextBox1.GetCharIndexFromPosition(P);
this.Y=this.richTextBox1.GetLineFromCharIndex(Pos);

if (this.Y>0)
{
int offset=1;
while(this.richTextBox1.Text[Pos-offset]!='\n')
offset++;
this.X=offset;
this.Y++;
}
else
{
this.X=Pos+1;
this.Y=1;
}

MessageBox.Show("当前位置: 第"+this.Y.ToString()+"行 "+"第"+this.X.ToString()+"列");
}
}
}

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧