我试图通过一个单独的类访问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
}
}
}
}
我尝试将文本框修改为公开,我尝试修改静态方法来调用。我不知道该怎么做。
答案 0 :(得分:2)
您应该将UI与业务逻辑分开。这意味着这个正在对某些数据执行计算的类应该对您的UI一无所知,也不应该对表单或其内容有任何了解。
相反,它应该只返回值,而不是让方法无效。然后您的UI可以调用此方法,获取结果,然后处理显示该结果,但感觉它是必要的。
除了更容易之外,它还大大减少了耦合。它可以防止这个类与这个UI相关联,它允许独立开发UI和业务逻辑,而不需要对另一个有深入的了解。这使得开发更容易,并且使程序更容易推理,提高可维护性,简化调试等。