2010-06-04 8 views
2

J'essaie de comprendre les problèmes de conception. J'essaye de modifier le code comme ceci dans des winforms et essaye de voir si n'importe quel modèle de conception répond à mes besoins. Veuillez suggérer quel est le meilleur modèle de conception dans ce scénario. C'est un code très basique contenant 2 pages à onglets qui peuvent avoir des contrôles différents qui peuvent être ajoutés dynamiquement et lire des fichiers différents en cliquant sur un onglet particulier. Pour élaborer plus ... J'ai écrit ce code pour apprendre et comprendre le motif de conception. Ceci est juste un scénario où l'utilisateur clique sur un onglet particulier qui montrera les contrôles dynamiques générés..net conception motif question

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


    private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 
    { 


     if (tabControl1.SelectedTab.Name.Equals("tabPage1")) 
     { 
      GeneratedynamicControlsForTab1(); 
     } 
     else if (tabControl1.SelectedTab.Name.Equals("tabPage2")) 
     { 
      GeneratedynamicControlsForTab2(); 
     } 
    } 

    private void GeneratedynamicControlsForTab1() 
    { 
     Label label1 = new Label(); 
     label1.Text = "Label1"; 
     tabPage1.Controls.Add(label1); 

       } 

    private void GeneratedynamicControlsForTab2() 
    { 
     tabPage1.Controls.Clear(); 
     Label label2 = new Label(); 
     label2.Text = "Label2"; 
     tabPage2.Controls.Add(label2); 

       } 



} 

S'il vous plaît laissez-moi savoir si cela ci-dessous la mise en œuvre est correcte pour le scénario ci-dessus S'il vous plaît laissez-moi savoir si cette mise en œuvre est correct de modifier le code ci-dessus le modèle d'état.

public partial class Form1 : Form 
{ 
    void GenerateControl(iState state) 
    { 
     switch (state.value) 
     { 
      case 1: 
       GenerateControlforTab1(); 
       break; 

      case 2: 
       GenerateControlforTab2(); 
       break; 

     } 
    } 
    void GenerateControlforTab1() 
    { 

    } 

    void GenerateControlforTab2() 
    { 

    } 


private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    IState state = new State() 

     if (tabControl1.SelectedTab.Name.Equals("tabPage1")) 
     { 
      state.value =1  ;  } 
     else if (tabControl1.SelectedTab.Name.Equals("tabPage2")) 
     { 
      state.value =2; 
     } 
     this.GenerateControls(); 
    } 
} 

interface iState { 
    void GenerateControls(); 
} 
+0

Quelle est votre "exigence" et pourquoi faites-vous ceci: création dynamique des contrôles. avez-vous remarqué que vous effacez toujours tabPage1 – OlimilOops

+0

Bonjour, j'ai corrigé le code. Exigence est sur le clic de l'onglet particulier, les contrôles dynmic devraient être addesd basé sur certaines conditions extraites de la base de données. Actuellement, je ne me concentre que sur le design et je n'ai donc pas d'appels depuis la base de données. – user359562

Répondre

0

Modèle de conception MVC.

+0

pouvez-vous modifier le code ci-dessus en utilisant mvc? – user359562

+0

veuillez suggérer. – user359562

3

Vous avez essayé d'implémenter le modèle d'état mais il y a quelques erreurs. Changez l'instruction au lieu de ifs.Et dans la fonction tabControl1_SelectedIndexChanged, vous utilisez à nouveau ifs. Vous avez créé l'interface iState et l'instanciez directement. Mais je pense que vous devriez créer une implémentation concrète sur l'interface iState où les codes d'état devraient aller. Vous pouvez jeter un coup d'œil sur "O'REILLY Head first design Patterns" chapitre-10 pour l'orientation.