0

我想知道公开标签是否是个好主意,以便其他类可以更改它们并获得它们的价值。这是一个好主意吗?如果没有,那应该怎么做呢?

4

3 回答 3

2

我不会公开这个标签。

最好添加一个特定于标签显示内容的公共方法,并让它更新标签。

例如,如果您的标签是“系统状态”标签,您可能想要添加(到您的表单/用户控件):

public void SetStatusInformation(string currentStatus)
{
     this.statusLabel.Text = currentStatus;
}

这允许您稍后更改此信息的显示方式(以防您想使用不同的控件),并且还简化了您的 API,因为公共方法对用户来说非常清楚。

于 2010-10-12T20:43:43.603 回答
1

这是个坏主意。WinForms 留下了许多“做 X 的最佳方法是什么?” 未解决的问题;你最好的答案是遵循既定的模式和实践(不是特定于 WinForms 的)。

阅读 MVP 或 MVC 模式。它们都是高级模式,专注于从业务逻辑中分离出特定于 UI 的代码。如果没有这种分离,您的应用程序很快就会成为维护的噩梦,而本应简单的事情变得更加复杂。

对于您的特定场景,您可能最终会得到一个模型(您的业务逻辑),它使用数据绑定在 WinForms 屏幕上显示它的数据。当 UI 发生更改时,接收更改的将是模型,并且该更改将通过数据绑定传播到 UI。

于 2010-10-12T20:44:00.203 回答
0

我建议包装一个 setter 属性或方法,因为如果调用者来自另一个调用者,你很有可能必须在窗口的主线程上添加日志记录或重新调用。我发现在公开允许客户端更新任何图形的功能时,总是使用如下代码更容易。

public void SetStart()
    {
        if (this.InvokeRequired)
        {
            this.Invoke((MethodInvoker)delegate()
            {
                this.SetStart();
            });
        }
        else
        {
            progressBar1.Value = 0;
            progressBar1.Visible = true;
        }
    }
于 2010-10-12T20:47:48.983 回答