none
TextBox e Focus RRS feed

  • Domanda

  • Buongiorno. Nella mia applicazione sono presenti diversi TextBox ed ho la necessità di impostare il focus esclusivamente in quello in cui il TabIndex sia pari ad 1. Quindi, indipendentemente dal nome che ho assegnato allo stesso. Attualmente ho trovato la seguente soluzione:

     private bool isFocused(Control root)
            {
                bool isFocus = false;
    
                foreach (Control c in root.Controls)
                {
                    if (c is TextBox && (c as TextBox).TabIndex == 1)
                    {
                        c.Focus();
                        isFocus = true;
                        break;
                    }
                }
                return isFocus;
            }

    e per attivarlo:

    public void Action()
            {
                bool isFocus = isFocused(this);
                isFocus = true;
            }
    Tuttavia credo che tale soluzione si possa migliorare. Cosa ne pensate?
    domenica 30 dicembre 2012 15:42

Risposte

Tutte le risposte

  • Ciao Piedatt80,

    Buongiorno. Nella mia applicazione sono presenti diversi TextBox ed ho la necessità di impostare il focus esclusivamente in quello in cui il TabIndex sia pari ad 1. Quindi, indipendentemente dal nome che ho assegnato allo stesso. Attualmente ho trovato la seguente soluzione:

     private bool isFocused(Control root)
            {
                bool isFocus = false;
    
                foreach (Control c in root.Controls)
                {
                    if (c is TextBox && (c as TextBox).TabIndex == 1)
                    {
                        c.Focus();
                        isFocus = true;
                        break;
                    }
                }
                return isFocus;
            }

    e per attivarlo:

    public void Action()
            {
                bool isFocus = isFocused(this);
                isFocus = true;
            }
    Tuttavia credo che tale soluzione si possa migliorare. Cosa ne pensate?

    un modo per ridurre il codice e utilizzare LinqToObjects e gli Estension Method , per meglio spiegare vedi questo esempio.

            private void Button1Click(object sender, EventArgs e)
            {
                foreach(var items in Controls.OfType<TextBox>().Where(w => w.TabIndex.Equals(1)))
                {
                    items.Focus();
                }
            }

    Questo esempio seleziona l'oggetto TextBox con valore TabIndex uguale a uno.

    Altra soluzione il metodo ToList() e ForEach().

            private void Button1Click(object sender, EventArgs e)
            {
                Controls.OfType<TextBox>().Where(w => w.TabIndex.Equals(1)).ToList().ForEach(f => f.Focus());
            }

    Ciao.


    domenica 30 dicembre 2012 15:55
  • Effettivamente, immaginavo che la mia soluzione andava sistemata...ma così ottimizzata adesso è il massimo!

    Ho utilizzato la prima soluzione LinqToObjects da te suggerita, con notevole risparmio di codice. Anche la seconda idea è interessante.

    Grazie, come al solito.

    • Contrassegnato come risposta piedatt80 domenica 30 dicembre 2012 16:35
    • Contrassegno come risposta annullato piedatt80 giovedì 31 gennaio 2013 10:42
    • Contrassegnato come risposta piedatt80 giovedì 31 gennaio 2013 10:55
    • Contrassegno come risposta annullato piedatt80 giovedì 31 gennaio 2013 10:57
    domenica 30 dicembre 2012 16:34
  • Ciao Piedatto80,

    Effettivamente, immaginavo che la mia soluzione andava sistemata...ma così ottimizzata adesso è il massimo!

    Ho utilizzato la prima soluzione LinqToObjects da te suggerita, con notevole risparmio di codice. Anche la seconda idea è interessante.

    Grazie, come al solito.

    di nulla  , ti auguro un buon 2013.

    Ciao.


    domenica 30 dicembre 2012 16:36
  • Grazie e contraccambio!

    domenica 30 dicembre 2012 16:37
  • Ciao Carmelo,

    scusa se riapro un thread chiuso solo un mese fa. Purtroppo ho notato che la soluzione (a mio dire eccezionale):

    private bool TxtInserted()
            {
                bool isInsert = false;
                foreach (var MyControl in Controls.OfType<TextBox>().Where(w => !w.TextLength.Equals(0)))
                {
                    isInsert = true;
                }
                return isInsert;
            }

    non funziona correttamente nel caso in cui i / il textbox si trovano all'interno di un GroupBox.

    Come posso riscriverla?

    giovedì 31 gennaio 2013 11:01
  • Ciao piedatt80,

    il controllo groupbox dispone della proprietà controls esattamente come il Form , quindi va eseguita al suo interno quindi groupbox1.controls e non me.controls

    Ciao.



    • Modificato Carmelo La Monica giovedì 31 gennaio 2013 11:12
    • Contrassegnato come risposta piedatt80 giovedì 31 gennaio 2013 11:55
    giovedì 31 gennaio 2013 11:10
  • Si, ho capito.

    Nuovamente Grazie!!!

    ...e chiudo definitivamente (questo thread)!

    giovedì 31 gennaio 2013 11:55
  • Ciao piedatt80,

    Si, ho capito.

    Nuovamente Grazie!!!

    ...e chiudo definitivamente (questo thread)!

    di nulla.

    Ciao.


    giovedì 31 gennaio 2013 19:00