C# 如何在未聚焦的WinForms TextBox/RichTextBox中显示光标?

C# 如何在未聚焦的WinForms TextBox/RichTextBox中显示光标?,c#,.net,winforms,textbox,richtextbox,C#,.net,Winforms,Textbox,Richtextbox,我需要在WinForms应用程序的RichTextBox控件中显示光标,即使它不在焦点中。我该怎么做?我只找到了WPF()的方法。您不能同时将焦点设置为两个或多个UI,但是您可以通过设置HideSelection=false来保留选择。您可以使用WinAPI [DllImport("user32.dll", EntryPoint = "ShowCaret")] public static extern long ShowCaret(IntPtr hwnd); [DllImport("use

我需要在WinForms应用程序的RichTextBox控件中显示光标,即使它不在焦点中。我该怎么做?我只找到了WPF()的方法。

您不能同时将焦点设置为两个或多个UI,但是您可以通过设置
HideSelection=false
来保留选择。您可以使用WinAPI

 [DllImport("user32.dll", EntryPoint = "ShowCaret")]
 public static extern long ShowCaret(IntPtr hwnd);
 [DllImport("user32.dll", EntryPoint = "HideCaret")]
 public static extern long HideCaret(IntPtr hwnd);

随时给ShowCaret打电话

我不知道你想要实现什么,它到底有多大用处。但是,如果只是为了视觉目的,请在其中写一些类似“|”的东西。这是一种糟糕、怪异、笨拙的方式,或者你管它叫什么,从视觉上看,它可能会起作用

    public void blink()
    {
        while (true)
        {
            textBox1.Text = "|";
            Thread.Sleep(200);
            textBox1.Text = "";
            Thread.Sleep(200);
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Thread t1 = new Thread(new ThreadStart(blink));
        t1.Start();
    }
我不确定我给出的是否是你所要求的,但为了得到准确的答案,你必须公开你对这个要求的需求


希望能有帮助。

我实际上不知道解决方案,但如果没有,我会明确地写|然后擦除,然后每隔一段时间再写一次到该框中。在获得其焦点或点击该组件后,我将启动该计时器或类似的东西来停止该操作。我知道这是一种粗鲁和不恰当的方式,这就是我迄今为止所想到的:)我认为这不是一个好主意,因为那会让人困惑!你为什么要这样做?不,我认为这是不可能的。对于像Transcriber这样的应用程序,它同时显示声音和文本编辑器的不工作-当HideSelection=false时,只有选择显示,但没有闪烁的光标。当控件失去焦点时,此属性保留选定的文本,但不保留光标。@Reniuz-阅读我的帖子-“您不能同时将焦点设置到两个或更多的UI”从Windows Api参考“窗口应仅在具有键盘焦点或处于活动状态时创建插入符号。窗口应在失去键盘焦点或变为非活动状态之前销毁插入符号。”因此,如果没有自己的光标处理,则无法使用标准控件实现此功能?