C# 单击右键时,如何获得光标的位置

时间:2021-12-13 10:33:14
现有一TextBox  内有一字符串,当我右键单击某个字符的位置时,我将如何 获得此时 光标所在字符串索引的位置?如果 是单击左键 的话, 光标会随着单击而移动位置,但是单击右键 时光标位置 没有因此而改变。请各位大哥大姐帮帮忙, 本人菜鸟,请尽量表述祥细,分不是问题,答者有分!先感谢各位了!

15 个解决方案

#1


TextBox.SelectionStart

#2


引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键 

#3


引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。

#4


引用 3 楼 caozhy 的回复:
引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。


哦, 感谢你的提醒.现在的问题是这样的, 当我在文本框中单击右键后,选择右键菜单中的值,并且插入到光标的位置,但此时,光标的位置必须先用左键定位后,才能插入到相应的位置,我想改成右键就可直接找到相应的位置。
对于你说的这种情况 (会遭用户厌),只要在文本框中才改变右键的功用,而其它位置还是用Windows标准(还原默认) 就可以了

#5


可以获取鼠标的位置,在区分左右键..不知道这个思路是否可以解决你的问题

#6


你右击之前不选中字符么

#7


引用 4 楼 lwbjyl 的回复:
引用 3 楼 caozhy 的回复:
引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。


哦, 感谢你的提醒.现在的问题是这样的, 当我在文本……

你可以用 RichTextBox 看看。

#8


引用 5 楼 viki117 的回复:
可以获取鼠标的位置,在区分左右键..不知道这个思路是否可以解决你的问题


如果单纯区分左右键 的话, 用e.Button 就可以区分, 您可能没看懂我的问题

#9


引用 6 楼 rx78gp01 的回复:
你右击之前不选中字符么


我的意思 就是不在左键 辅助光标定位的情况下,直接用右键 定位光标 并且 插入 指定 的值到光标位置

#10


引用 7 楼 caozhy 的回复:
引用 4 楼 lwbjyl 的回复:
引用 3 楼 caozhy 的回复:
引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。


哦, 感谢你……


因其它原因,不能用RichTextBox ,如果 能用的话就好办多了,
我现在就想改变windows 右键 消息
但还没找到解决方案

#11


一种思路,自己写一个类,继承自TextBox,在里面重载鼠标消息,是可以获取鼠标位置的,然后就可以判断鼠标位置了

#12


帮你搞定了。

新建一个类,编写如下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class UserControl1 : TextBox
    {
        public UserControl1()
        {
            //InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0204)
            {
                m.Msg = 0x0201;
                base.WndProc(ref m);
                m.Msg = 0x0204;
            }
            base.WndProc(ref m);
        }
    }
}


使用 UserControl1 代替 TextBox。

#13


请问如果重载的话怎么知道要改哪个地方,他有哪些方法

#14


引用 12 楼 caozhy 的回复:
帮你搞定了。

新建一个类,编写如下代码:


C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
……



感谢ing!此方法很好!

#15


引用 13 楼 rx78gp01 的回复:
请问如果重载的话怎么知道要改哪个地方,他有哪些方法


不知道你问的什么? 我要结贴 了,哈哈

#1


TextBox.SelectionStart

#2


引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键 

#3


引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。

#4


引用 3 楼 caozhy 的回复:
引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。


哦, 感谢你的提醒.现在的问题是这样的, 当我在文本框中单击右键后,选择右键菜单中的值,并且插入到光标的位置,但此时,光标的位置必须先用左键定位后,才能插入到相应的位置,我想改成右键就可直接找到相应的位置。
对于你说的这种情况 (会遭用户厌),只要在文本框中才改变右键的功用,而其它位置还是用Windows标准(还原默认) 就可以了

#5


可以获取鼠标的位置,在区分左右键..不知道这个思路是否可以解决你的问题

#6


你右击之前不选中字符么

#7


引用 4 楼 lwbjyl 的回复:
引用 3 楼 caozhy 的回复:
引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。


哦, 感谢你的提醒.现在的问题是这样的, 当我在文本……

你可以用 RichTextBox 看看。

#8


引用 5 楼 viki117 的回复:
可以获取鼠标的位置,在区分左右键..不知道这个思路是否可以解决你的问题


如果单纯区分左右键 的话, 用e.Button 就可以区分, 您可能没看懂我的问题

#9


引用 6 楼 rx78gp01 的回复:
你右击之前不选中字符么


我的意思 就是不在左键 辅助光标定位的情况下,直接用右键 定位光标 并且 插入 指定 的值到光标位置

#10


引用 7 楼 caozhy 的回复:
引用 4 楼 lwbjyl 的回复:
引用 3 楼 caozhy 的回复:
引用 2 楼 lwbjyl 的回复:
引用 1 楼 caozhy 的回复:
TextBox.SelectionStart


请注意:如果 是左键的话,这样用肯定可以, 但是现在是右键

右键不应该改变插入点位置。这是Windows标准体验,建议你也不要轻易改动,不然会遭用户厌的。


哦, 感谢你……


因其它原因,不能用RichTextBox ,如果 能用的话就好办多了,
我现在就想改变windows 右键 消息
但还没找到解决方案

#11


一种思路,自己写一个类,继承自TextBox,在里面重载鼠标消息,是可以获取鼠标位置的,然后就可以判断鼠标位置了

#12


帮你搞定了。

新建一个类,编写如下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class UserControl1 : TextBox
    {
        public UserControl1()
        {
            //InitializeComponent();
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0204)
            {
                m.Msg = 0x0201;
                base.WndProc(ref m);
                m.Msg = 0x0204;
            }
            base.WndProc(ref m);
        }
    }
}


使用 UserControl1 代替 TextBox。

#13


请问如果重载的话怎么知道要改哪个地方,他有哪些方法

#14


引用 12 楼 caozhy 的回复:
帮你搞定了。

新建一个类,编写如下代码:


C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
……



感谢ing!此方法很好!

#15


引用 13 楼 rx78gp01 的回复:
请问如果重载的话怎么知道要改哪个地方,他有哪些方法


不知道你问的什么? 我要结贴 了,哈哈