从不同的类访问Form对象

时间:2014-03-25 14:17:02

标签: c# forms

我试图通过一个单独的类访问Form的RichTextBox控件。

在我的表格课程中......

    delegate void SetTextCall(string s);

    public void safeCall(string s)
    {
        if (this.richTextBox1.InvokeRequired)
        {
            SetTextCall d = new SetTextCall(safeCall);
            this.Invoke(d, new object[] { s });
        }
        else this.richTextBox1.AppendText("From Applicator");
    }

在另一个班级......

public void getMessages()
    {
        lock (lockObj)
        {
            Dictionary<string, List<string>> result = ScannerMessages
                .GroupBy(k => k.Value)
                .Where(grp => grp.Count() > 1)
                .ToDictionary(grp => grp.First().Key, grp => grp.Skip(1).Select(k => k.Key).ToList());

            if(result.Count > 0)
            {
                foreach(var key in result.Keys)
                {
                    // I want to write to the rich textbox the key and the list accosiated with the key 
                    // in the richtextbox on Form1
                }
             }
        }
    }

我尝试将文本框修改为公开,我尝试修改静态方法来调用。我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

您应该将UI与业务逻辑分开。这意味着这个正在对某些数据执行计算的类应该对您的UI一无所知,也不应该对表单或其内容有任何了解。

相反,它应该只返回值,而不是让方法无效。然后您的UI可以调用此方法,获取结果,然后处理显示该结果,但感觉它是必要的。

除了更容易之外,它还大大减少了耦合。它可以防止这个类与这个UI相关联,它允许独立开发UI和业务逻辑,而不需要对另一个有深入的了解。这使得开发更容易,并且使程序更容易推理,提高可维护性,简化调试等。