C# 如何在未聚焦的WinForms TextBox/RichTextBox中显示光标?
我需要在WinForms应用程序的RichTextBox控件中显示光标,即使它不在焦点中。我该怎么做?我只找到了WPF()的方法。您不能同时将焦点设置为两个或多个UI,但是您可以通过设置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
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参考“窗口应仅在具有键盘焦点或处于活动状态时创建插入符号。窗口应在失去键盘焦点或变为非活动状态之前销毁插入符号。”因此,如果没有自己的光标处理,则无法使用标准控件实现此功能?