新的类调用函数c#

时间:2013-06-20 07:41:06

标签: c#

我的form1(设计)中有一个按钮,但在我的form1(Class)中它变得非常拥挤,所以我想创建一个新类。但是如何使按钮在新类中工作(新类名称为form2(Class)。当然该函数适用于form1(Class)中的按钮,那么如何使它从form2(Class)开始工作?< / p>

5 个答案:

答案 0 :(得分:5)

使用自己的UserControl和逻辑创建自己的自定义Controls。或者为partial class创建From1并将事件逻辑放在那里。

答案 1 :(得分:1)

将UI代码(例如按钮事件处理)与应用程序的核心逻辑分开是值得考虑的。

有很多方法可以做到这一点,但常见的地方是使用一个模型类来表示窗口正在操作的数据和/或逻辑。

尝试搜索“Windows窗体mvc”或“windows窗体mvp”。

MVP:http://msdn.microsoft.com/en-us/magazine/cc188690.aspx

MVC:Implementing MVC with Windows Forms

答案 2 :(得分:0)

您应该使用Model/View/ControllerModel/View/Presenter模式。

基本上你要做的是使Form类(View类)非常愚蠢。当发生各种事件(例如按钮按下)时,它不知道该怎么做。相反,它会引发事件以指示发生了什么。

然后你写了一个Controller类,负责创建View并附加到它的事件。 Controller知道按下按钮时该怎么做,并相应地做出响应(可能通过调用方法或设置View类中的属性)。

Model只是Controller填充View类所用数据的抽象。

理想情况下,ViewModel一无所知。 Controller是负责坐在ModelView之间的实体。

这种方法允许您将业务逻辑从表单中分离出来,这样可以简化事情并使更改事物和单元测试变得更加容易。

我刚刚在这里发布了一个关于此的示例:https://stackoverflow.com/a/15605436/106159

答案 3 :(得分:0)

您应该尝试将UI逻辑从“业务逻辑”中解放出来,将其从事件中移出并在新的类中。

e.g。如果你现在有:

// in Form1.cs
private void btn_Click(object sender, System.EventArgs e) {
   OpenDatabaseConnection();
   string customerName=SearchCustomerByCode(someTextBox.Text); 
   someOtherTextBox.Text=customerName;
   CloseDatabaseConnection();
}

你应该有这样的东西:

// in Form1.cs
private void btn_Click(object sender, System.EventArgs e) 
{
    string customerCode=someTextBox.Text;
    var cs = new CustomerRepository();

    string customerName=cs.SearchCustomerByCode(customerCode);
    someOtherTextBox.Text=customerName;
}

// in CustomerRepository.cs
//... logic to get the data from the DB, no specific knowledge of form1
public class CustomerRepository.cs 
{
    public string SearchCustomerByCode(string customerCode)
    {
      //...
    }
}

答案 4 :(得分:0)

你可以做类似的事情,这可行,但它有点粪便

表格1

public partial class Form1 : Form
{
    Form2 f2 = new Form2();

    public Form1()
    {
        InitializeComponent();
    }

    public void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Test");
        f2.ShowDialog();
    }
}

表格2

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

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        f1.button1_Click(null, null);
    }
}