【问题标题】:How to show cursor in unfocused WinForms TextBox/RichTextBox?如何在未聚焦的 WinForms TextBox/RichTextBox 中显示光标?
【发布时间】:2011-12-13 23:39:39
【问题描述】:

我需要在 WinForms 应用程序的 RichTextBox 控件中显示光标,即使它不在焦点上。我怎样才能做到这一点?我只找到了 WPF 的方式(How to keep WPF TextBox selection when not focused?

【问题讨论】:

  • 我实际上不知道解决方案,但如果没有,那么我会明确地写 |并擦除并再次写入该 RTBox 的间隔。在获得焦点或单击该组件后,我将启动此计时器或类似的东西以停止执行此操作。我知道它的粗鲁和不恰当的方式,这就是我到目前为止所得到的一切:)
  • 我认为这不是一个好主意,因为那会令人困惑!你为什么要做那样的事?不,我认为这不可能。
  • 对于像 Transcriber trans.sourceforge.net/en/presentation.php 这样的应用程序,它同时显示声音和文本编辑器

标签: c# .net winforms textbox richtextbox


【解决方案1】:

你可以使用 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

【讨论】:

  • 来自 Windows Api 参考“只有在具有键盘焦点或处于活动状态时,窗口才应创建插入符号。窗口应在失去键盘焦点或变为非活动状态之前销毁插入符号。”所以如果没有自己的光标处理,就不能用标准控件来实现这个功能吗?
【解决方案2】:

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

【讨论】:

  • 它不起作用 - 当 HideSelection= false 时,只显示选择,但没有闪烁的光标。
  • 当控件失去焦点而不是光标时,此属性保留选定的文本。
  • @Reniuz - 阅读我的帖子 - “您不能同时将焦点设置到两个或多个 UI”
【解决方案3】:

我不知道您要达到什么目标,以及它真正有用的程度。但如果只是为了视觉目的,写一些像'|'这样的东西在里面。这是一种糟糕、奇怪、尴尬的方式,或者你怎么称呼它,出于视觉目的,它可能会起作用。

    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();
    }

我不确定我给的是否是你所要求的,但要得到准确的答案,你必须暴露你对这个要求的需求。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多