/* 获得多文本光标位置
* 本文转自 http://blog.163.com/yl32940@126/blog/static/50356084201312614191/
*/
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices; //引用钩子
namespace 测试版11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.richTextBox1.Text = "sdfdsfsdfsdfsdg你\nsdkfopdksfo
kldkf;lsdkf;ldsk;flkd;sk;dlsk;sdgsddddddddddddddddddd";
}
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(
int hwnd,
int wMsg,
int wParam,
ref int lParam
);
int EM_LINEINDEX = 0xBB;
int EM_LINEFROMCHAR = 0xC9;
int EM_GETSEL = 0xB0;
int EM_GETLINE = 0xC4;
/*
private void button1_Click(object sender, EventArgs e)
{
Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());//文本句柄
//this.textBox1.Text = string.Format("第:{0}行, 第:{1}列", p.X, p.Y);
this.textBox1.Text = string.Format("Line:{0}, Col:{1}", p.X, p.Y);
} //*/
//鼠标单击 richTextBox1.text事件
private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());
this.textBox1.Text = string.Format("第:{0}行, 第:{1}列", p.X, p.Y);
}
//释放键时发生,键盘响应事件
private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());
this.textBox1.Text = string.Format("第:{0}行, 第:{1}列", p.X, p.Y);
}
//获取位置的函数
private Point GetCursorPos(int TextHwnd)
{
int i = 0, j = 0, k = 0;
int lParam = 0, wParam = 0;
i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);
j = i / 65536;
int lineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1;
k = SendMessage(TextHwnd, EM_LINEINDEX, -1, ref lParam);
int colNo = j - k + 1;
Point ret = new Point(lineNo, colNo);
return ret;
}
}
}
如果这些都不是你想要的,请到
这里 看一下