come focalizzare l'attenzione su TextBox al caricamento del modulo?


156

Ho nel mio programma TextBox C #

Ho bisogno che all'avvio del programma, il focus sarà sul textBox

Provo questo su Form_Load:

MyTextBox.Focus();

ma non funzionerà

Risposte:


341

Imposta la ActiveControlproprietà del modulo e dovresti andare bene.

this.ActiveControl = yourtextboxname;

1
Ho provato questo per ComboBox. Ma non funziona neanche!
Alex Jolig

1
Grazie, ha funzionato per me, mentre tutto il resto no. Non sono sicuro del motivo per cui Tab Index = 0 non funzionerà, ma probabilmente ci sono strani ordini di operazioni in corso durante il caricamento del modulo / mostrando la finestra di dialogo.
David Carrigan

1
PROVA QUESTO >>> this.ActiveControl = yourtextboxname.Control;
Polamin Singhasuwich,

3
Funziona benissimo, ma perché non ha MyTextBox.Focus();funzionato - sembra funzionare bene una volta che il programma è in esecuzione.
Levon,

2
Scrivi this.ActiveControl = textBox1;Tutti capiscono il significato di "textBox1". "youttextboxname" suona come... = "MyTextBox";
Bitterblue,

25

controlla l'ordine delle schede e assicurati che la casella di testo sia impostata su zero


Lavorando. O semplicemente tabindex per essere il primo elemento "focalizzabile" del cursore nel modulo.
apincik,

15

Puoi provare:

MyTextBox.Select ();

Secondo la documentazione:

Il metodo Select attiva il controllo se il bit di stile Selezionabile del controllo è impostato su true in ControlStyles, è contenuto in un altro controllo e tutti i suoi controlli padre sono entrambi visibili e abilitati.

Puoi prima verificare se il controllo può essere selezionabile controllando la proprietà MyTextBox.CanSelect .


15

Non è possibile impostare lo stato attivo su un controllo se non è stato eseguito il rendering. Form.Load () si verifica prima del rendering dei controlli.

Vai agli eventi del modulo e fai doppio clic sull'evento "Mostrato". Nel gestore di eventi mostrato nel modulo, chiama il metodo control.Focus ().

    private void myForm_Shown(object sender, EventArgs e)
    {
        // Call textbox's focus method
        txtMyTextbox.Focus();
    }


6

Textbox.Focus()"Tenta" per mettere a fuoco l'elemento della casella di testo. Nel caso in cui la visibilità dell'elemento sia nascosta, ad esempio, Focus()non funzionerà. Quindi assicurati che il tuo elemento sia visibile prima di chiamare Focus().


5

Il motivo per cui non riesci a farlo funzionare è perché l' Loadevento viene chiamato prima che il modulo venga disegnato o reso.

È come dire a una pizzeria come preparare la tua pizza, e poi chiedere loro di inviarti una foto di quanti peperoni ci sono sulla tua pizza prima che ce la facciano.

using System;
using System.Windows.Forms;

namespace Testing
{
    public partial class TestForm : Form
    {
        public TestForm()
        {
            InitializeComponent();

            Load += TestForm_Load;

            VisibleChanged += TestForm_VisibleChanged;

            Shown += TestForm_Shown;

            Show();

        }

        private void TestForm_Load(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_VisibleChanged(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_Shown(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called after the form is rendered.");
            txtFirstName.Focus();
        }
    }
}

4

Ho risolto il mio problema con la modifica della proprietà "TabIndex" di TextBox. Ho impostato 0 per TextBox che desidero focalizzare su Form all'avvio del programma.


3

utilizzare il modulo mostrato evento e impostare

MyTextBox.Focus();

3

Imposta il valore della proprietà dell'indice di tabulazione = 0 e quindi nella funzione di caricamento del modulo scrivi:

YourTextboxName.Focus();

Funzionerà.


2

È possibile utilizzare textBox1.select();o TabIndex nelle impostazioni della casella di testo. TabIndex=0focalizzato per primo.


Se chiamiamo textBox1.select (); nel gestore di eventi load form, imposta lo stato attivo in textBox1.
Tushar R.

1

Imposta Tabstop su True e TabIndex al minimo sul controllo su cui devi concentrarti.

Ad esempio, se si dispone di 2 caselle di testo: TextBox1 e TextBox2, impostare Tabstop su True per entrambi e TabIndex su 0 e 1 rispettivamente. Quando il modulo viene caricato, lo stato attivo sarà su TextBox1 e premendo il tasto 'Tab', lo stato attivo verrà spostato su TextBox2.


1

nel modulo, vai alle proprietà e assicurati che la proprietà "TopMost" sia impostata su true, ciò risolverà il tuo problema.



0

Alla fine ho scoperto il problema che stavo usando metro framework e tutte le tue soluzioni non funzioneranno con metroTextBox e tutte le tue soluzioni funzioneranno con textBox normale in caricamento, show, visible_change, eventi, anche l'indice tab = 0 è valido.

   // private void Form1_VisibleChanged(object sender, EventArgs e)
   // private void Form1__Shown(object sender, EventArgs e)
    private void Form1_Load(object sender, EventArgs e)
    {

        textBox1.Select();
        this.ActiveControl=textBox1;
        textBox1.Focus();
    }

-5

In jquery metti a fuoco

$(function() {
  $("#txtBox1").focus();
});

o in Javascript puoi farlo

window.onload = function() {
  document.getElementById("txtBox1").focus();
};

4
Questa potrebbe essere una buona risposta per una domanda sul sito web, ma questa è taggata c#e winforms.
Ben Voigt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.