从其他类和其他主要问题控制表

时间:2010-09-03 17:12:08

标签: c# winforms oop

我在OOP或C#中都不是那么好,但我想尽量保持我的代码干净。 假设我们在命名空间“GoogleCalendarNotificator”中有类似的东西:

   public partial class MainForm : Form
   {
        private object calendarData;

        public MainForm()
        {
            InitializeComponent();
        }

        private void recieveCalendarDataButton_Click(object sender, EventArgs e)
        {
            getCalendarDataBW.RunWorkerAsync();
        }

        private void getCalendarDataBW_DoWork(object sender, DoWorkEventArgs e)
        {
            try {
                getCalendarData getCalendarDataObj = new getCalendarData();
                calendarData = getCalendarDataObj.getData();
            } catch (Exception err) {
                statusHandler("Login Failed, Please check your Data", err.Message);
            }

            try {
                workWithCalendarData workWithCalendarDataObj = new workWithCalendarData();
                workWithCalendarDataObj.workWithData(calendarData, MainForm.ActiveForm);

                statusHandler("New calendardata recieved");
            } catch (Exception err) {
                statusHandler("Login Failed, Please check your Data", err.Message);
            }
        }

        public void statusHandler(string displayMessage, string tooltipMessage = null)
        {
            string curTime = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString();
            statusLabel.Text = curTime + " - " + displayMessage;

            if (tooltipMessage != null)
            {
                statusLabel.ToolTipText = "Original error message: " + tooltipMessage;
            }
        }

这是ErrorHandling的一个很好的解决方案吗? 那部分怎么样:

       workWithCalendarData workWithCalendarDataObj = new workWithCalendarData();
       workWithCalendarDataObj.workWithData(calendarData, MainForm.ActiveForm);

我只想给另一个类(workWithCalendarData)提供与MainForm交互的可能性。但我不想简单地在workWithCalendarData类中编写类似的东西:

MainForm hehe = new MainForm();
hehe.DOSOMETHING();

如果有人知道我的意思,我希望它是动态的。就像向课堂提供使用表格所需的信息(a.e. MainForm.ActiveForm)。

2 个答案:

答案 0 :(得分:0)

MainForm hehe = new MainForm();
hehe.DOSOMETHING();

嗯,那是行不通的。它会创建一个 new 表单,由于未调用Show()而无法看到该表单。您需要在MainForm代码中引用现有表单 this 。您可以通过调用其构造函数将其传递给worker类,并传递引用。

然而,这是一个坏主意。它使您的worker类依赖于用户界面。更改GUI通常是因为它是如此可见,会破坏您的工人类。您可以通过使用事件来解决该问题。当有价值的事情发生时,让工人阶级举起活动。这样表单就可以从类对象中获取信息并相应地更新UI。

另请参阅MVC模式以获得一些想法。

答案 1 :(得分:0)

请记住,您的表单也是一个类。使用标准OOP机制允许一个类与另一个类进行交互。可以使用事件,属性和方法。