0

我的 form1(Design) 里面有一个按钮,但是在我的 form1(Class) 中它变得非常拥挤,所以我想创建一个新类。但是如何使按钮在新类中工作(新类名称是 form2(Class)。当然该功能适用​​于 form1(Class) 中的按钮,那么我如何使它从 form2(Class) 中工作?

4

5 回答 5

5

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

于 2013-06-20T07:42:41.770 回答
1

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

有很多方法可以做到这一点,但通常从一个模型类开始,它代表你的窗口正在操作的数据和/或逻辑。

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

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

MVC :使用 Windows 窗体实现 MVC

于 2013-06-20T07:51:36.863 回答
0

你真正应该做的是使用Model/View/ControllerorModel/View/Presenter模式。

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

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

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

理想情况下,他们ViewModel. Controller是负责坐在Model和之间的实体View

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

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

于 2013-06-20T07:54:24.153 回答
0

您应该尝试将 UI 逻辑与“业务逻辑”分开,将其移出事件并放入新类中。

例如,如果你现在有:

// 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)
    {
      //...
    }
}
于 2013-06-20T07:56:44.473 回答
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);
    }
}
于 2013-06-20T08:30:57.710 回答