¿Cómo eliminar el foco de un TextBox en WinForms?

Necesito eliminar el foco de varios TextBoxes. Intenté usar:

textBox1.Focused = false; 

Su valor de propiedad ReadOnly es true .

Luego intenté establecer el foco en el formulario, para eliminarlo de todos los TextBoxes, pero esto tampoco funciona:

 this.Focus(); 

y la función devuelve false cuando se selecciona un cuadro de texto.

Entonces, ¿cómo elimino el foco de un TextBox?

Necesitas algún otro control enfocable para mover el foco.

Tenga en cuenta que puede establecer el enfoque en una etiqueta. Es posible que desee considerar dónde desea que llegue la tecla [Tabulador].

También tenga en cuenta que no puede establecerlo en el formulario. Los controles de contenedor como Formulario y Panel pasarán el Enfoque a su primer control secundario. ¿Cuál podría ser el TextBox del que quería que se alejara?

Centrarse en la etiqueta no funcionó para mí, haciendo algo como label1.Focus() ¿no? el cuadro de texto todavía tiene foco cuando se carga el formulario; sin embargo, probar la respuesta de Velociraptors , funcionó para mí, estableciendo el control Activo del Formulario en la etiqueta como este:

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

Puede agregar el siguiente código:

 this.ActiveControl = null; //this = form 

Intenta deshabilitar y habilitar el cuadro de texto.

También puede configurar la propiedad activecontrol formularios para activecontrol como

 ActiveControl = null; 

Focus establece el foco de entrada, por lo que establecerlo en el formulario no funcionará porque los formularios no aceptan entrada. Intente establecer la propiedad ActiveControl del formulario en un control diferente. También puede usar Select para seleccionar un control específico o SelectNextControl para seleccionar el siguiente control en el orden de tabulación.

Prueba este:

Primero configure el orden de tabulación.

Luego, en el evento de carga de formulario, podemos enviar una tecla de tabulación presionar programáticamente a la aplicación. Entonces esa aplicación dará el foco al primer contol en el orden de tabulación.

en forma de carga incluso escribir esta línea.

 SendKeys.Send("{TAB}"); 

Esto funcionó para mí.

Esta publicación me llevó a hacer esto:

 ActiveControl = null; 

Esto me permite capturar toda la entrada del teclado en el nivel superior sin que otros controles se vuelvan locos.

Parece que no tengo que enfocarme a ningún otro elemento. En una aplicación de Windows Phone 7, he estado usando el método Focus para desarmar el Focus of a Textbox.

Dar el siguiente comando establecerá el enfoque en nada:

 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

Me funcionó, pero no sé por qué no funcionó para ti: /

Una solución simple sería eliminar el foco, solo crea tu propia clase:

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

¡He encontrado una buena alternativa! Funciona mejor para mí, sin poner el foco en otra cosa.

Trata eso:

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

Hice esto en mi control personalizado, hice esto enFocus ()

 this.Parent.Focus(); 

Entonces, si texbox se enfoca, enfoca instantáneamente el cuadro de texto padre (formulario, o panel …) Esta es una buena opción si desea hacer esto en control 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(); }); } } } 

La forma en que lo soluciono es colocar todos mis controles de winform. Realizo todas las tags y controles de winform que no se seleccionan como orden de tabulación 0, luego mi primer control como orden de tabulación 2 y luego aumento el orden de cada control seleccionable por 1, por lo que 3, 4, 5 etc.

De esta forma, cuando se inicien mis Winforms, ¡el primer TextBox no tiene foco!

puedes hacer esto por dos métodos

  • simplemente haga que las propiedades “TabStop” del cuadro de texto deseado sean falsas, ahora no se enfocará, incluso si tiene un campo de texto
  • arrastre dos cuadros de texto

    1. hacer uno visible en el que no quiere foucus que es textbox1
    2. hacer que el 2º sea invisible e ir a las propiedades de ese campo de texto y seleccionar

valor de tabindex a 0 de textbox2

  1. y seleccione el tabindex de su textbox1 a 1 ahora no se enfocará en textbox1

Si lo único que desea es el efecto óptico de que el cuadro de texto no tiene una selección azul en todo su contenido, simplemente no seleccione ningún texto:

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

Después de esto, al agregar contenido con .Text += "..." , no se mostrará ninguna selección azul.

Intente configurar TabStop en False para su control de vista que no se enfoca.

Por ejemplo:

 txtEmpID.TabStop = false; 

En el constructor de Form o UserControl que contiene la escritura de TextBox

 SetStyle(ControlStyles.Selectable, false); 

Después de InitializeComponent (); Fuente: https://stackoverflow.com/a/4811938/5750078

Ejemplo:

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