2009-07-16 537 views
92

我需要從幾個文本框中刪除焦點。我試着使用:如何從WinForms中的文本框中移除焦點?

textBox1.Focused = false; 

ReadOnly屬性值是true

我又試圖將焦點設置在窗體上,以便從所有的文本框將其刪除,但是這也不能工作:

this.Focus(); 

當選擇一個文本框的函數返回false

那麼,如何從TextBox中刪除焦點?

回答

93

您需要一些其他可調焦控件來將焦點移至。

請注意,您可以將焦點設置爲標籤。你可能想要考慮你想要[Tab]鍵在哪裏接下來。

另請注意,您無法將其設置爲表單。像Form和Panel這樣的容器控件將Focus傳遞給它們的第一個子控件。這可能是你想讓它離開的文本框。

+0

謝謝;我只是試圖專注於一個標籤,現在文本框變得毫無意義。由於某種原因,你似乎無法專注於表單。 – 2009-07-16 21:05:35

+7

容器控件(Form,Panel)將把焦點傳遞給他們的第一個子控件。 – 2009-07-16 21:09:02

+0

很棒的建議。這解決了我的問題。我使用KeyPress來對付表單本身,並有幾個按鈕等。問題是,該應用程序正在從讀卡器獲取輸入,因此如果焦點遠離表單本身,則所有地獄都會崩潰。點擊按鈕之後專注於標籤解決了我的問題。非常感謝! – joelc 2013-04-17 05:55:15

30

嘗試禁用並啓用文本框。

+5

這工作非常聰明的,因爲它會自動選擇在此期間的標籤列表中的下一個控件。 – Nick 2010-05-12 23:50:00

+3

我正在使用MVVM在Silverlight中開發,並使用以TextBox爲目標的行爲來實現此目的。由於我沒有其他UIElement方便地將焦點設置爲禁用/啓用解決方案創造奇蹟。謝謝! – 2010-06-10 22:31:20

+2

這個作品很有魅力 – grabah 2012-02-07 15:31:21

8

Focus設置輸入焦點,因此將它設置爲表單不會工作,因爲表單不接受輸入。嘗試將窗體的ActiveControl屬性設置爲不同的控件。您也可以使用Select來選擇特定控件或SelectNextControl以按Tab鍵順序選擇下一個控件。

+1

在這裏試了一下,'Select()'爲我工作。 – 2014-10-02 20:45:41

+0

@Derek W你是男人 – 2016-04-19 22:00:01

3

我發現了一個很好的選擇!它最適合我,不需要把重點放在別的東西上。

試一下:

private void richTextBox_KeyDown(object sender, KeyEventArgs e) 
{  
    e.SuppressKeyPress = true; 
} 
43

聚焦在標籤上,我沒有工作,做這樣的事情label1.Focus()吧? 文本框中仍然加載表單時,但試圖Velociraptors 答案集中,工作對我來說,窗體的主動控制設定的標籤是這樣的:

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.ActiveControl = label1;  
} 
+5

我希望我能給你百萬箭頭了。我試過別人的建議,這是唯一有效的。 出於某種原因,文本框始終偷走了所有東西的焦點...... – eladyanai 2013-03-12 14:58:07

+3

這也適用於面板等容器控件。我只是想完全消除焦點,它的工作原理:'this.ActiveControl = panelOnMyForm;' – 2013-04-09 14:32:14

+0

太棒了!感謝爲我工作:) – 2017-06-07 09:12:57

3

看來,我沒有設置關注任何其他因素。在Windows Phone 7應用程序中,我一直使用Focus方法取消設置文本框的焦點。

給予以下命令將焦點設置到什麼:

void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     Focus(); 
    } 
} 

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

它爲我,但我不知道爲什麼沒有爲你工作:/

6

試試這個..

先設置Tab順序..

然後在窗體加載事件中,我們可以發送一個標籤按鍵以編程方式按下應用程序。 ,以便應用程序將焦點按Tab鍵順序排列在第1個控件上。

在表單加載中甚至寫入此行。

SendKeys.Send("{TAB}"); 

這確實對我有用。

+0

偉大的解決方案! – Yuriy 2012-11-29 19:25:16

3

一個簡單的解決辦法是殺死焦點,剛剛創建自己的類:

public class ViewOnlyTextBox : System.Windows.Forms.TextBox { 
    // constants for the message sending 
    const int WM_SETFOCUS = 0x0007; 
    const int WM_KILLFOCUS = 0x0008; 

    protected override void WndProc(ref Message m) { 
     if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS; 

     base.WndProc (ref m); 
    } 
} 
+0

正是我尋找的解決方案。謝謝! – LeftyCoder 2015-12-09 19:19:12

12

您還可以設置形式activecontrol屬性null

ActiveControl = null; 
+2

我希望人們一路向下滾動,並且不要只使用解決方法標記爲答案 – makoshichi 2017-04-10 14:41:03

3

我在做這個我自定義控件,我做了onFocus()

this.Parent.Focus(); 

所以如果te Xbox集中 - 它立即集中文本框的父母(窗體,或面板...) 這是不錯的選擇,如果你想在自定義控件上做到這一點。

+0

這一個爲我工作。 – 2016-12-09 15:26:52

+0

nvm:/我使用ActiveControl = null; – 2018-01-29 18:51:24

4

這篇文章使我做到這一點:

ActiveControl = null; 

這讓我捕捉到在頂層的全鍵盤輸入沒有其他控件將堅果。

1
//using System; 
    //using System.Collections.Generic; 
    //using System.Linq; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     FocusOnOtherControl(Controls.Cast<Control>(), button1); 
    } 

    private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control 
    { 
     foreach (var control in controls) 
     { 
      if (control.GetType().Equals(typeof(TextBox))) 
      { 
       control.TabStop = false; 
       control.LostFocus += new EventHandler((object sender, EventArgs e) => 
       {      
        focusOnMe.Focus(); 
       }); 
      } 
     } 
    } 
1

我解決它的方法是放置我所有的winform控件。我做所有標籤和非選擇winform控件爲製表訂單0,然後我的第一個控制爲製表訂單2,然後增加每個可選控件的訂單1,所以3,4,5等...

這樣,當我的Winforms啓動時,第一個TextBox沒有焦點!

29

您可以添加以下代碼:

this.ActiveControl = null; //this = form 
+4

我相信這是最好的答案。如果您閱讀MSDN,許多其他方法(如「Focus」)都列爲控制設計人員的低級別方法。如果你想讓其他所有東西都「沒有被選中」,這似乎是最簡單的方法,因爲它只是一條小線。 – Rostov 2014-07-16 15:42:51

+0

這可能是Microsoft首先添加此屬性的原因的一半。 – Panzercrisis 2016-10-20 19:19:30

1

您可以通過兩種方法做到這一點

  • 只是使所需的文本框,以虛假的「接受tab」屬性現在也不會,即使關注你有一個文本字段
  • 拖動兩個文本框

    1. 使一個可見上你不想foucus這是TextBox1的
    2. 使第二一個無形的,去到文本字段的屬性,然後選擇

tabIndex值到TextBox2中的0

  • 並選擇您TextBox1的tabindex屬性爲1 現在它不會集中在TextBox1中
  • 0

    如果你想要的是文本框中有沒有藍色選擇遍佈其內容的光學效果,只要選擇任何文字:

    textBox_Log.SelectionStart = 0; 
    textBox_Log.SelectionLength = 0; 
    textBox_Log.Select(); 
    

    在此之後,隨着.Text += "..."添加內容時,沒藍的選拔會所示。

    0

    請嘗試設置TabStopFalse您的視圖控制,這是不重點。

    對於例如:

    txtEmpID.TabStop = false; 
    
    -1

    在窗體的構造或用戶控件保持在TextBox寫入

    SetStyle(ControlStyles.Selectable, false); 
    

    在InitializeComponent後(); 來源:https://stackoverflow.com/a/4811938/5750078

    例子:

    public partial class Main : UserControl 
    { 
    
        public Main() 
        { 
         InitializeComponent(); 
         SetStyle(ControlStyles.Selectable, false); 
        } 
    
    相關問題