Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C#/Windows Form Application] User controls

    salve.
    Avrei bisogno di un consiglio.
    Sto sviluppando una windows form application.
    Vorrei capire se sto procedendo in modo sporco, oppure può andar bene questo approccio?


    MEttiamo caso che abbiamo una schermata principale con un pannello.
    All'interno di questo pannello posso richiamare diversi UserControl.
    Gli User Control non sono altro che schermate diverse del programma, talvolta richiamate sequenzialmente.


    Mettiamo caso che le mie varie schermate sono:
    Form principale che contiene un pannello "MainPanel"
    schermata di login (User control "Login")
    schermata 1 (UserControl1)
    schermata 2 (UserControl2)
    schermata 3 (UserControl3).


    Quello che deve accadere è:
    appena avvio il programma, in automatico chiama la schermata di Login, in questo modo (classe del form principale):
    codice:
    public Tool()
    {
           InitializeComponent();
            MainPanel.Controls.Add(Global.Login = new Login());
    }
    Al click del Button per eseguire il Login, va nella schermata 1 (classe dello UserControl Login.cs)
    codice:
     private void btnLogin_Click(object sender, EventArgs e)
     {
       if(loginOk)
       {
                Control[] controlCollection = Parent.Parent.Controls.Find("MainPanel", true);
                controlCollection[0].Controls.Add(Global.UserControl1 = new UserControl1());
            
                Parent.Controls.Remove(this);
       }
    
    
    }
    Appena va nella schermata dello UserControl1, attraverso 2 radiobutton e un Button può decidere se lanciare lo UserControl2 o lo UserControl3 (classe dello UserControl1.cs)

    codice:
    private void button1_Click(object sender, EventArgs e)
    {
                Control[] controlCollectionMain = Parent.Parent.Controls.Find("MainPanel", true);
               
                if (radioButton1.Checked == true)
                {                
                   controlCollectionMain[0].Controls.Add(Global.UserControl2 = new UserControl2());             
                }
                else
                {
                   controlCollectionMain[0].Controls.Add(Global.UserControl3 = new UserControl3());  
                }
                
                Parent.Controls.Remove(this);
    }
    A seconda della scelta, va appunto nello UserControl2 o UserControl3. Entrambi gli userControl, altraverso un pulsante devono tornare allo UserControl1
    Qui il metodo presente sia nella classe UserControl2.cs sia nella classe UserControl3.cs
    codice:
    private void button13_Click(object sender, EventArgs e)
    {
                Control[] controlCollectionMain = Parent.Parent.Controls.Find("MainPanel", true);
    
    
                controlCollectionMain[0].Controls.Add(Global.UserControl1 = new UserControl1());
    
    
                Parent.Controls.Remove(this);
               
    }
    In pratica non faccio altro che aggiungere e rimuovere di volta in volta i controls dal MainPanel

    Secondo voi è una schifezza fatto in questo modo?
    Potreste suggerirmi un modo più pulito per passare da uno user control ad un altro?
    Grazie
    Ultima modifica di MItaly; 02-07-2014 a 01:33

  2. #2

    Moderazione

    • Le discussioni relative ai linguaggi .NET non sono trattate qui, ma nell'apposita sottosezione;
    • il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione.


    Correggo io e provvedo a spostare il thread; nel frattempo ti consiglio di dare un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Venendo al tuo problema, non fai prima a lasciare i controlli sempre lì, ma mostrarli/nasconderli alla bisogna?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Venendo al tuo problema, non fai prima a lasciare i controlli sempre lì, ma mostrarli/nasconderli alla bisogna?
    Grazie!
    DIci una cosa del genere?

    Dentro il form principale:
    codice:
    public Tool()
    {
                InitializeComponent();
                MainPanel.Controls.Add(Global.Login = new Login());
                MainPanel.Controls.Add(Global.UserControl1= new UserControl1());
                MainPanel.Controls.Add(Global.UserControl2= new UserControl2());
                MainPanel.Controls.Add(Global.UserControl3= new UserControl3());
    
    
                Control[] lg = MainPanel.Controls.Find("Login", true);
                Control[] ch = MainPanel.Controls.Find("UserControl1", true);
                Control[] ns = MainPanel.Controls.Find("UserControl2", true);
                Control[] es = MainPanel.Controls.Find("UserControl3", true);
                lg[0].Visible = true;
                ch[0].Visible = false;
                ns[0].Visible = false;
                es[0].Visible = false;
     }
    Dentro lo usercontrol Login:
    codice:
    private void btnLogin_Click(object sender, EventArgs e)
    {
        if (loginOK)
       {
                Control[] cm = Parent.Controls.Find("UserControl1", true);
                cm[0].Visible = true;
                this.Visible = false;
        }
    }


    Dentro lo Usercontrol1:
    codice:
    private void button1_Click(object sender, EventArgs e)
     {
               
                if (radioButton1.Checked == true)
                {
                    Control[] ns = Parent.Controls.Find("UserControl2", true);
                    ns[0].Visible = true;      
                }
                else
                {
                    Control[] es =Parent.Controls.Find("UserControl3", true);
                    es[0].Visible = true;
                }
    
    
                 this.Visible = false;
    }
    Dentro lo userControl2
    codice:
    private void button13_Click(object sender, EventArgs e)
    {
                
    
    
                Control[] cm = Parent.Controls.Find("UserControl1", true);
                cm[0].Visible = true;
    
    
                this.Visible = false;
            
    
    
    }
    Dentro lo UserControl3
    codice:
    private void button13_Click(object sender, EventArgs e)
    {
                
    
    
                Control[] cm = Parent.Controls.Find("UserControl1", true);
                cm[0].Visible = true;
    
    
                 this.Visible = false;
            
    }
    Ultima modifica di fenomeno83; 02-07-2014 a 10:19

  5. #5
    e ultima cosa: se voglio da uno usercontrol modificare controlli appartenenti ad un altro usercontrol, devo fare così? (esempio modificare il testo di un button)

    codice:
    private
    codice:
    void button1_Click(object sender,EventArgs e)
     {
               
                if(radioButton1.Checked==true)
                {
                    Control[] ns =Parent.Controls.Find("UserControl2",true);
                    ns[0].Visible=true; 
                    Control[] ns2 = ns[0].Controls.Find("button1",true);  
                    button1.Text = "pippo";
                }
                else
                {
                    Control[] es =Parent.Controls.Find("UserControl3",true);
                    es[0].Visible=true;
                }
    
    
                 this.Visible=false;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.