您的位置:首页 > 编程语言 > C#

c# 在TextBox里实现右键单击移动光标位置(让右键单击和左键单击有一样的效果)

2010-08-11 11:42 507 查看
需要using System.Runtime.InteropServices;

[DllImport("User32")]
public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
[DllImport("User32")]
public extern static void SetCursorPos(int x, int y);
[DllImport("User32")]
public extern static bool GetCursorPos(out POINT p);
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
}
public enum MouseEventFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
Wheel = 0x0800,
Absolute = 0x8000
}
private void AutoClick(int x, int y)
{
POINT p = new POINT();
GetCursorPos(out p);
try
{
SetCursorPos(p.X, p.Y);
mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
}
finally
{
SetCursorPos(p.X, p.Y);
}
}

private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
AutoClick(e.X,e.Y);
}
}


TextBox是多行的 如何使TextBox的光标始终处于能看到的第一个文字的前面 也就是控件的座上角 (或者可以描述为让光标随着滚动条的移动改变位置)
思路:问题关键是textbox没有滚动条事件,如果有这个事件,用上面代码实现
找到textbox左上角的位置调用AutoClick方法,把里面的SetCursorPos(p.X, p.Y);
改成SetCursorPos(x,y);

思路是有 但还是不知道怎么 想到的请留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐