2010-06-04 87 views
2

我想了解设计模式问题。我试图在winforms中修改这样的代码,并尝试查看是否有任何设计模式适合我的要求。请在这种情况下建议哪个是最好的设计模式。这是包含2个标签页的非常基本的代码,可能会有不同的控件可以动态添加,并在特定标签的点击时读出不同的文件。详细说明...我已经编写了这些代码来学习和理解设计模式。这只是一个场景,用户点击特定的选项卡将显示生成的动态控件。.net设计模式问题

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); 

       } 



} 

请让我知道这下面的实施是正确的上述方案 请让我知道这个实现是正确修改上面的代码状态模式。

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

什么是你的“要求”,你为什么这样做:动态地创建控件。你有没有注意到你总是清除tabPage1 – OlimilOops 2010-06-04 11:44:21

+0

嗨,我已经纠正了代码。要求是在特定标签的点击上,应该根据从数据库中提取的某些条件来添加动作控件。目前,我只专注于设计,所以没有从数据库进行任何调用。 – user359562 2010-06-06 06:36:04

回答

0

MVC设计模式。

+0

你可以使用mvc修改上面的代码吗? – user359562 2010-06-04 11:46:41

+0

请建议。 – user359562 2010-06-10 11:00:11

3

你试图实现状态模式,但有一些错误。状态模式的一个用途是通过创建状态接口并从中实现不同的状态来从代码中删除条件if语句。但是,您已经使用过switch语句而不是if。而在tabControl1_SelectedIndexChanged函数中,你再次使用ifs。你已经创建了接口iState并直接实例化它。但是我认为你应该在状态代码应该去的iState接口上创建一些具体的实现。你可以看看“O'REILLY Head first design Patterns”第10章的指导。