Como remover o foco de um TextBox no WinForms?

Eu preciso remover o foco de vários TextBoxes. Eu tentei usar:

textBox1.Focused = false; 

Seu valor da propriedade ReadOnly é true .

Em seguida, tentei definir o foco no formulário, para removê-lo de todos os TextBoxes, mas isso também não funciona:

 this.Focus(); 

e a function retorna false quando uma checkbox de texto é selecionada.

Então, como faço para remover o foco de um TextBox?

Você precisa de algum outro controle para mover o foco para.

Note que você pode definir o foco para um label. Você pode querer considerar onde você deseja que a tecla [Tab] apresente em seguida.

Observe também que você não pode configurá-lo para o formulário. Os controles de contêiner, como Formulário e Painel, passarão o Foco para o primeiro controle filho. Qual poderia ser o TextBox que você queria se afastar.

Concentrar-se no label não funcionou para mim, fazendo algo como label1.Focus() certo? a checkbox de texto ainda tem foco ao carregar o formulário, no entanto tentar responder Velociraptors , funcionou para mim, definindo o controle Active do formulário para o label como este:

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

Você pode adicionar o seguinte código:

 this.ActiveControl = null; //this = form 

Tente desativar e ativar a checkbox de texto.

Você também pode definir a propriedade activecontrol formulários como null

 ActiveControl = null; 

Focus define o foco de input, portanto, configurá-lo para o formulário não funcionará porque os formulários não aceitam a input. Tente definir a propriedade ActiveControl do formulário para um controle diferente. Você também pode usar Select para selecionar um controle específico ou SelectNextControl para selecionar o próximo controle na ordem de tabulação.

Tente este:

Primeiro, configure a ordem de tabulação.

Em seguida, no evento de carregamento de formulário, podemos enviar uma tecla de pressionamento de tecla programaticamente para o aplicativo. Então, esse aplicativo dará foco ao primeiro contol na ordem de tabulação.

na carga de formulário, escreva essa linha.

 SendKeys.Send("{TAB}"); 

Isso funcionou para mim.

Este post me levou a fazer isso:

 ActiveControl = null; 

Isso me permite capturar toda a input do teclado no nível superior sem que outros controles fiquem malucos.

Parece que não preciso definir o foco para outros elementos. Em um aplicativo do Windows Phone 7, tenho usado o método Focus para remover o foco de uma checkbox de texto.

Dando o seguinte comando irá definir o foco para nada:

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

http://msdn.microsoft.com/pt-br/library/system.windows.forms.control.focus.aspx

Funcionou para mim, mas não sei porque não funcionou para você: /

Uma solução simples seria matar o foco, basta criar sua própria class:

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

Eu encontrei uma boa alternativa! Funciona melhor para mim, sem definir o foco em outra coisa.

Tente isso:

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

Eu fiz isso no meu controle personalizado, eu fiz isso onFocus ()

 this.Parent.Focus(); 

Então, se texbox focado – ele se concentrar instantaneamente pais checkbox de texto (formulário ou painel …) Esta é uma boa opção se você quiser fazer isso no controle personalizado.

  //using System; //using System.Collections.Generic; //using System.Linq; private void Form1_Load(object sender, EventArgs e) { FocusOnOtherControl(Controls.Cast(), button1); } private void FocusOnOtherControl(IEnumerable 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(); }); } } } 

A maneira como eu dou a volta é colocar todos os meus controles winform. Eu faço todos os labels e controles winform não-selecionados como ordem de tabulação 0, então meu primeiro controle como ordem de tabulação 2 e, em seguida, incrementa a ordem de cada controle selecionável por 1, então 3, 4, 5 etc …

Desta forma, quando o meu WinForms iniciar, o primeiro TextBox não terá foco!

você pode fazer isso por dois methods

  • Basta fazer com que as propriedades “TabStop” da checkbox de texto desejada sejam falsas, agora ela não será focada, mesmo se você tiver um campo de texto
  • arraste duas checkboxs de texto

    1. fazer um visível em que você não quer foucus que é textbox1
    2. tornar o segundo invisível e ir para propriedades desse campo de texto e selecione

valor de tabindex para 0 de textbox2

  1. e selecione o tabindex do seu textbox1 para 1 agora ele não irá focar textbox1

Se tudo o que você quer é o efeito óptico de que a checkbox de texto não tem uma seleção azul em todo o seu conteúdo, apenas não selecione nenhum texto:

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

Depois disso, ao adicionar conteúdo com .Text += "..." , nenhuma seleção azul será mostrada.

Por favor, tente definir o TabStop como False para o seu controle de visualização, que não é focalizado.

Por exemplo:

 txtEmpID.TabStop = false; 

No construtor do Form ou UserControl mantendo o Write TextBox

 SetStyle(ControlStyles.Selectable, false); 

Após o InitializeComponent (); Fonte: https://stackoverflow.com/a/4811938/5750078

Exemplo:

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