none
Configurazione controlli RRS feed

  • Domanda

  • Ciao a tutti,

    E' possibile cambiare un parametro in tutti i controlli dello stesso tipo?

    Ad esempio: 3 label (label, label1, label2), posso cambiare il colore di background di tutte in un solo colpo senza farlo per ogni singolo elemento?

    Grazie

    martedì 10 agosto 2021 13:32

Risposte

  • Buongiorno,

    Ma in che modo e' possibile specificare canaleOrario1 o canaleOrario2?

    Ho fatto l'esempio delle label perche' mi sembrava piu' semplice, sarebbe come scrivere all'avvio dell'applicazione: 

    label1.BackColor = System.Drawing.Color.Green;

    label2.BackColor = System.Drawing.Color.Green;

    ma se ho 40 label dovrei scrivere 40 righe?

    Ciao Marco!

    Potresti fare così: all'avvio dell'applicazione caricati tutte le label in una Lista di label.

    Quando vuoi cambiare colore alle label è sufficiente scorrere la lista con un ciclo for e per ogni label della lista impostare il colore.

    Con 3 righe di codice hai risolto !

    mercoledì 11 agosto 2021 17:07
  • Ciao Marco,

    usando il WPF è molto semplice. Basta che tu metti tutte le Label all'interno dello stesso contenitore (ad esempio un Grid che qua ho chiamato MyGrid):

    <Grid x:Name="MyGrid">
            <Label Content="Prima etichetta" HorizontalAlignment="Left" Margin="50,50,0,0" VerticalAlignment="Top" Width="120"/>
            <Label Content="Seconda etichetta" HorizontalAlignment="Left" Margin="50,100,0,0" VerticalAlignment="Top" Width="120"/>
            <Label Content="Terza etichetta" HorizontalAlignment="Left" Margin="50,150,0,0" VerticalAlignment="Top" Width="120"/>
        </Grid>

    e poi nel programma, con un ciclo foreach, puoi facilmente cambiare in un solo colpo tutti i figli (Children) del contenitore MyGrid, così:

    public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                //definiamo un brush di colore blu:
                SolidColorBrush blueBrush = new SolidColorBrush();
                blueBrush.Color = Colors.Blue;
    
                //prendiamo tutte le label contenute nella Grid
                //e cambiamo il colore di fondo:
                foreach (Label myLabel in MyGrid.Children)
                    myLabel.Background = blueBrush;
    
            }
        }

    Se invece usi Windows Forms, puoi, ad esempio cambiare le proprietà di tutte le label contenute in un form, così:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                foreach (var elemento in this.Controls)
                {
                    //se l'elemento è un'etichetta
                    if (elemento.GetType().Name == "Label")
                    {
                        Label myLabel = elemento as Label;
                        //cambia tutte le etichette il cui nome comincia per "label"
                        if (myLabel.Name.StartsWith("label"))
                            myLabel.BackColor = Color.Blue;
                    }
                }

    }

         }

    La stessa cosa puoi fare se invece di voler modificare la proprietà di alcune Label, volessi modificare la proprietà di qualunque altro controllo del Form, cercandolo col nome che gli hai assegnato (con .StartsWith(...)).

    Più facile di così...

    venerdì 13 agosto 2021 16:52
  • Buongiorno, Marco,

    Vediamo se potrei aiutare.

    Per cambiare il colore di sfondo di un controllo è sufficiente impostare la sua proprietà BackColor su un colore, ad esempio System.Drawing.Color.Red.
    3 etichette che mostrano "qualcosa", significa che sono cambiate. Puoi usare l'evento TextChanged sull'etichetta (nel designer del modulo premi F4 e vai al menu degli eventi).

    private void label1_TextChanged( object sender, EventArgs e )
        {
            if ( "a value" < 0 )
            {
                this.lb_Main.BackColor = Color.Red;
            }
            else
            {
                this.lb_Main.BackColor = Color.Green;
            }
        }

    altrimenti cosi:

    if ("a value"> 0)
        label1.BackColor = System.Drawing.Color.Green;
    else
        label1.BackColor = System.Drawing.Color.Red;

    o cosi:

    label1.BackColor = ("a value" > 0) ? System.Drawing.Color.Green : System.Drawing.Color.Red;


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    mercoledì 11 agosto 2021 06:42
    Moderatore

Tutte le risposte

  • Buongiorno, Marco,

    Vediamo se potrei aiutare.

    Per cambiare il colore di sfondo di un controllo è sufficiente impostare la sua proprietà BackColor su un colore, ad esempio System.Drawing.Color.Red.
    3 etichette che mostrano "qualcosa", significa che sono cambiate. Puoi usare l'evento TextChanged sull'etichetta (nel designer del modulo premi F4 e vai al menu degli eventi).

    private void label1_TextChanged( object sender, EventArgs e )
        {
            if ( "a value" < 0 )
            {
                this.lb_Main.BackColor = Color.Red;
            }
            else
            {
                this.lb_Main.BackColor = Color.Green;
            }
        }

    altrimenti cosi:

    if ("a value"> 0)
        label1.BackColor = System.Drawing.Color.Green;
    else
        label1.BackColor = System.Drawing.Color.Red;

    o cosi:

    label1.BackColor = ("a value" > 0) ? System.Drawing.Color.Green : System.Drawing.Color.Red;


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    mercoledì 11 agosto 2021 06:42
    Moderatore
  • Ciao, grazie.

    Ho fatto l'esempio della label per semplificare, in realta' vorrei semplificare questa parte di codice che inizializza un controllo personalizzato:

            void CaricaOrariSuControllo()
            {
                    canaleOrario1.Orari = xmlDoc;
                    canaleOrario2.Orari = xmlDoc;
                    canaleOrario3.Orari = xmlDoc;
                    canaleOrario4.Orari = xmlDoc;
                    canaleOrario5.Orari = xmlDoc;
                    canaleOrario6.Orari = xmlDoc;
                    canaleOrario7.Orari = xmlDoc;
                    canaleOrario8.Orari = xmlDoc;
                    canaleOrario9.Orari = xmlDoc;
                    canaleOrario10.Orari = xmlDoc;
            }
    
            void AssTipoGiorno(string idTipoGiorno)
            {
                canaleOrario1.idTipoGiorno = idTipoGiorno;
                canaleOrario2.idTipoGiorno = idTipoGiorno;
                canaleOrario3.idTipoGiorno = idTipoGiorno;
                canaleOrario4.idTipoGiorno = idTipoGiorno;
                canaleOrario5.idTipoGiorno = idTipoGiorno;
                canaleOrario6.idTipoGiorno = idTipoGiorno;
                canaleOrario7.idTipoGiorno = idTipoGiorno;
                canaleOrario8.idTipoGiorno = idTipoGiorno;
                canaleOrario9.idTipoGiorno = idTipoGiorno;
                canaleOrario10.idTipoGiorno = idTipoGiorno;
            }
    

    mercoledì 11 agosto 2021 08:54
  • Salve Marco,

    sono due discorsi diversi dunque.

    Per primo, da moderatori noi non scriviamo il codice degli utenti.

    I metodi sopra le potrebbero dare la dritta ed idea di come semplificare diversi parti del codice. 

    Tutto dipende di come e che cosa sta provando a fare. Nonostante, poteva specificare che la domanda sia un esempio. Un codice pronto, purtroppo, non potrei fornirle.

    Come una risposta definitiva - si, si puo fare. Di nuovo dipende che cosa sta provando a fare.

    Io suggerirei di creare un algoritmo che venne poi usato per ogni "cosa" che deve passare prima da li, poi cambiata continua nel codice. 


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    mercoledì 11 agosto 2021 12:52
    Moderatore
  • Buongiorno,

    Ma in che modo e' possibile specificare canaleOrario1 o canaleOrario2?

    Ho fatto l'esempio delle label perche' mi sembrava piu' semplice, sarebbe come scrivere all'avvio dell'applicazione: 

    label1.BackColor = System.Drawing.Color.Green;

    label2.BackColor = System.Drawing.Color.Green;

    ma se ho 40 label dovrei scrivere 40 righe?

    mercoledì 11 agosto 2021 16:12
  • Buongiorno,

    Ma in che modo e' possibile specificare canaleOrario1 o canaleOrario2?

    Ho fatto l'esempio delle label perche' mi sembrava piu' semplice, sarebbe come scrivere all'avvio dell'applicazione: 

    label1.BackColor = System.Drawing.Color.Green;

    label2.BackColor = System.Drawing.Color.Green;

    ma se ho 40 label dovrei scrivere 40 righe?

    Ciao Marco!

    Potresti fare così: all'avvio dell'applicazione caricati tutte le label in una Lista di label.

    Quando vuoi cambiare colore alle label è sufficiente scorrere la lista con un ciclo for e per ogni label della lista impostare il colore.

    Con 3 righe di codice hai risolto !

    mercoledì 11 agosto 2021 17:07
  • Ciao Marco,

    usando il WPF è molto semplice. Basta che tu metti tutte le Label all'interno dello stesso contenitore (ad esempio un Grid che qua ho chiamato MyGrid):

    <Grid x:Name="MyGrid">
            <Label Content="Prima etichetta" HorizontalAlignment="Left" Margin="50,50,0,0" VerticalAlignment="Top" Width="120"/>
            <Label Content="Seconda etichetta" HorizontalAlignment="Left" Margin="50,100,0,0" VerticalAlignment="Top" Width="120"/>
            <Label Content="Terza etichetta" HorizontalAlignment="Left" Margin="50,150,0,0" VerticalAlignment="Top" Width="120"/>
        </Grid>

    e poi nel programma, con un ciclo foreach, puoi facilmente cambiare in un solo colpo tutti i figli (Children) del contenitore MyGrid, così:

    public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                //definiamo un brush di colore blu:
                SolidColorBrush blueBrush = new SolidColorBrush();
                blueBrush.Color = Colors.Blue;
    
                //prendiamo tutte le label contenute nella Grid
                //e cambiamo il colore di fondo:
                foreach (Label myLabel in MyGrid.Children)
                    myLabel.Background = blueBrush;
    
            }
        }

    Se invece usi Windows Forms, puoi, ad esempio cambiare le proprietà di tutte le label contenute in un form, così:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                foreach (var elemento in this.Controls)
                {
                    //se l'elemento è un'etichetta
                    if (elemento.GetType().Name == "Label")
                    {
                        Label myLabel = elemento as Label;
                        //cambia tutte le etichette il cui nome comincia per "label"
                        if (myLabel.Name.StartsWith("label"))
                            myLabel.BackColor = Color.Blue;
                    }
                }

    }

         }

    La stessa cosa puoi fare se invece di voler modificare la proprietà di alcune Label, volessi modificare la proprietà di qualunque altro controllo del Form, cercandolo col nome che gli hai assegnato (con .StartsWith(...)).

    Più facile di così...

    venerdì 13 agosto 2021 16:52
  • Ciao,

    Grazie a tutti,

    Con il metodo di Fabio ho risolto.

    Grazie

    lunedì 16 agosto 2021 12:57