2011-10-24 51 views
3

我需要在WinForms應用程序的RichTextBox控件中顯示光標,即使它沒有焦點。我怎樣才能做到這一點?我發現只有WPF的方式(How to keep WPF TextBox selection when not focused?如何在未聚焦的WinForms TextBox/RichTextBox中顯示光標?

+0

我其實不知道解決方案,但如果沒有任何,那麼我會明確寫|並擦除並重新寫入該RTBox的時間間隔。一旦獲得它的焦點或點擊那個組件,我將啓動這個計時器或類似的東西來停止這個操作。我知道它的原始和不正確的方式,這是我迄今爲止頭頂上:) – Zenwalker

+1

出於興趣;爲什麼? –

+1

我不認爲這是一個好主意,因爲那會讓人困惑!你爲什麼要這樣做? 不,我不認爲這是可能的。 –

回答

1

您不能同時將焦點設置到兩個或更多用戶界面,但是您可以通過設置HideSelection=false來保留選擇。

+0

它不工作 - 當HideSelection = false時,只顯示選擇,但不顯示閃爍的光標。 – Singlet

+0

該屬性在控件失去焦點時保留選定的文本,但不保留光標。 – Reniuz

+0

@Reniuz - 閱讀我的文章 - 「您無法同時將焦點設置到兩個或更多用戶界面」 – adatapost

2

您可以使用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只要你想

+0

從Windows API參考「窗口只有在具有鍵盤焦點或處於活動狀態時纔會創建插入符號。窗口在丟失鍵盤焦點或變爲不活動之前,應該銷燬該插入符號。「所以使用沒有自己的光標處理的標準控件來實現這個功能是不可能的? – Singlet

0

我不知道你想什麼來實現,有多少是真正有用的。但如果僅僅是爲了視覺目的,寫一些像'|'在裏面。它是一種糟糕的,奇怪的,尷尬的方式或者你所稱的它,因爲它可能起作用的視覺目的。

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

我不知道如果我給的是你所問的,但要獲得準確的答案,你要揭穿你的這種要求的需要。

希望它有幫助。