两个问题
1:TextBox是多行的 如何使TextBox的光标始终处于能看到的第一个文字的前面 也就是控件的座上角 (或者可以描述为让光标随着滚动条的移动改变位置)
2:如何在TextBox里实现右键单击移动光标位置(让右键单击和左键单击有一样的效果)

解决方案 »

  1. 第1个问题可能要计算行距还有要触发滚动条事件,你看Richtextbox能不能实现你的需求?
    第2个问题,下面代码可以实现,需要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);
                }
            }
      

  2. 如果你不想右键时出来那个弹出菜单,你在Form_Load事件里加上这句代码
    textBox1.ContextMenu = new ContextMenu();
      

  3. richtextbox.SelectionStart=1;  
    richtextbox.Focus();
      

  4. 其实第一个问题关键是textbox没有滚动条事件,如果有这个事件,你也可以用我给你第二个问题的代码实现
    找到textbox左上角的位置调用AutoClick方法,把里面的SetCursorPos(p.X, p.Y);
    改成SetCursorPos(x,y);
      

类似问题 »