如何使richtextbox控件失去焦点?

时间:2021-11-15 08:32:22
我现在想在richtextbox中用鼠标点击时,失去光标,双击也不能选择内容。
因为只设置 readonly属性false的话,光标还是能在控件中点击,也能全选。

13 个解决方案

#1


enable=false

#2


做个隐藏控件比如一个TextBox tbHide;


//RichTextBox Enter 事件中
tbHide.Focus();

#3


可以这样,控制只能选0个字符:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
  richTextBox1.Select(richTextBox1.SelectionStart, 0);
}

#4


来看看,
ps:好久没挣分了,来挣 点分,

#5


屏蔽RichTextBox的消息:可以将下面的代码加到你窗体Form1的后面,然后修改Designe文件,让
this.richTextBox1 = new PoorBox();

    public class PoorBox : RichTextBox
    {
        const int DBCLCIK = 0x0203;//双击
        const int GETFOCUS = 0x0007;//得到焦点
        protected override void WndProc(ref Message msg)
        {
            if (msg.Msg == DBCLCIK || msg.Msg == GETFOCUS)
            {
                return;
            }
            base.WndProc(ref msg);
        } 
    }

#6


在鼠标事件里设置:e.Handled=true;
或enable=false
或重写WndProc方法,捕获信息。

#7


楼主的最终目标应该是防止复制吧,只控制不让选择、不让复制就够了吧。
如果控制不得到焦点,翻页功能也就没了,第1页后的文字翻不出来。

#8


引用 7 楼 lzsh0622 的回复:
楼主的最终目标应该是防止复制吧,只控制不让选择、不让复制就够了吧。
如果控制不得到焦点,翻页功能也就没了,第1页后的文字翻不出来。

复制和粘贴的两个常量
0x0301
0x0302

#9


我是想在richtextbox中鼠标一点击后,光标就消失,这样也就不会就选中文本了。

#10


这样试试,不过你一旦输入字符,光标又有了
[DllImport("user32", EntryPoint = "HideCaret")]
        private static extern bool HideCaret(IntPtr hWnd);
private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
        {
            HideCaret(((RichTextBox)sender).Handle);
        }
 

#11


防止复制的话你可以复写ctrl+c和鼠标copy事件使他们无效化,最彻底的方法是干脆不要用richbox,用picturebox,图片显示点阵字

#12


引用 8 楼 sohighthesky 的回复:
引用 7 楼 lzsh0622 的回复:
楼主的最终目标应该是防止复制吧,只控制不让选择、不让复制就够了吧。
如果控制不得到焦点,翻页功能也就没了,第1页后的文字翻不出来。

复制和粘贴的两个常量
0x0301
0x0302

请问不知如何针对特定的richtextbox进行控制?

#13


重写RichTextBox类,禁止复制。

public class NewTextBox : RichTextBox
{
    protected override void WndProc(ref Message msg)
    {
       if (msg.Msg == 0x0300 || msg.Msg == 0x0301) return; // 禁止复制或剪切
        base.WndProc(ref msg);
    }
}

#1


enable=false

#2


做个隐藏控件比如一个TextBox tbHide;


//RichTextBox Enter 事件中
tbHide.Focus();

#3


可以这样,控制只能选0个字符:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
  richTextBox1.Select(richTextBox1.SelectionStart, 0);
}

#4


来看看,
ps:好久没挣分了,来挣 点分,

#5


屏蔽RichTextBox的消息:可以将下面的代码加到你窗体Form1的后面,然后修改Designe文件,让
this.richTextBox1 = new PoorBox();

    public class PoorBox : RichTextBox
    {
        const int DBCLCIK = 0x0203;//双击
        const int GETFOCUS = 0x0007;//得到焦点
        protected override void WndProc(ref Message msg)
        {
            if (msg.Msg == DBCLCIK || msg.Msg == GETFOCUS)
            {
                return;
            }
            base.WndProc(ref msg);
        } 
    }

#6


在鼠标事件里设置:e.Handled=true;
或enable=false
或重写WndProc方法,捕获信息。

#7


楼主的最终目标应该是防止复制吧,只控制不让选择、不让复制就够了吧。
如果控制不得到焦点,翻页功能也就没了,第1页后的文字翻不出来。

#8


引用 7 楼 lzsh0622 的回复:
楼主的最终目标应该是防止复制吧,只控制不让选择、不让复制就够了吧。
如果控制不得到焦点,翻页功能也就没了,第1页后的文字翻不出来。

复制和粘贴的两个常量
0x0301
0x0302

#9


我是想在richtextbox中鼠标一点击后,光标就消失,这样也就不会就选中文本了。

#10


这样试试,不过你一旦输入字符,光标又有了
[DllImport("user32", EntryPoint = "HideCaret")]
        private static extern bool HideCaret(IntPtr hWnd);
private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
        {
            HideCaret(((RichTextBox)sender).Handle);
        }
 

#11


防止复制的话你可以复写ctrl+c和鼠标copy事件使他们无效化,最彻底的方法是干脆不要用richbox,用picturebox,图片显示点阵字

#12


引用 8 楼 sohighthesky 的回复:
引用 7 楼 lzsh0622 的回复:
楼主的最终目标应该是防止复制吧,只控制不让选择、不让复制就够了吧。
如果控制不得到焦点,翻页功能也就没了,第1页后的文字翻不出来。

复制和粘贴的两个常量
0x0301
0x0302

请问不知如何针对特定的richtextbox进行控制?

#13


重写RichTextBox类,禁止复制。

public class NewTextBox : RichTextBox
{
    protected override void WndProc(ref Message msg)
    {
       if (msg.Msg == 0x0300 || msg.Msg == 0x0301) return; // 禁止复制或剪切
        base.WndProc(ref msg);
    }
}