外部更新的Winforms的最佳实践
我想知道公开标签是否是一个好主意,这样其他类就可以更改标签并获得它们的价值。这是个好主意吗?如果没有,那么应该怎么做呢?我不会公开这个标签 最好添加一个特定于标签显示内容的公共方法,并让它更新标签 例如,如果您的标签是“系统状态”标签,您可能希望添加(到表单/用户控件):外部更新的Winforms的最佳实践,winforms,labels,Winforms,Labels,我想知道公开标签是否是一个好主意,这样其他类就可以更改标签并获得它们的价值。这是个好主意吗?如果没有,那么应该怎么做呢?我不会公开这个标签 最好添加一个特定于标签显示内容的公共方法,并让它更新标签 例如,如果您的标签是“系统状态”标签,您可能希望添加(到表单/用户控件): 这允许您以后更改此信息的显示方式(如果您想使用其他控件),并且还简化了API,因为用户非常清楚公共方法。我不会公开标签 最好添加一个特定于标签显示内容的公共方法,并让它更新标签 例如,如果您的标签是“系统状态”标签,您可能希望
这允许您以后更改此信息的显示方式(如果您想使用其他控件),并且还简化了API,因为用户非常清楚公共方法。我不会公开标签 最好添加一个特定于标签显示内容的公共方法,并让它更新标签 例如,如果您的标签是“系统状态”标签,您可能希望添加(到表单/用户控件):
这允许您在以后更改此信息的显示方式(如果您想使用其他控件),并且还简化了API,因为用户非常清楚公共方法。这是个坏主意。WinForms留下了许多“做X的最佳方式是什么?”的问题;最好的答案是遵循既定的模式和实践(不是WinForms特有的) 阅读MVP或MVC模式。它们都是高级模式,专注于从业务逻辑中分离出特定于UI的代码。如果没有这种分离,您的应用程序很快就会成为维护的噩梦,本来应该简单的事情会变得复杂得多
对于您的特定场景,您可能会得到一个模型(您的业务逻辑),该模型使用数据绑定在WinForms屏幕上显示其数据。当UI上发生更改时,接收更改的将是模型,该更改将通过数据绑定传播到UI。这是个坏主意。WinForms留下了许多“做X的最佳方式是什么?”的问题;最好的答案是遵循既定的模式和实践(不是WinForms特有的) 阅读MVP或MVC模式。它们都是高级模式,专注于从业务逻辑中分离出特定于UI的代码。如果没有这种分离,您的应用程序很快就会成为维护的噩梦,本来应该简单的事情会变得复杂得多
对于您的特定场景,您可能会得到一个模型(您的业务逻辑),该模型使用数据绑定在WinForms屏幕上显示其数据。当UI上发生更改时,接收更改的将是模型,并且该更改将通过数据绑定传播到UI。我建议包装在setter属性或方法中,因为如果调用方来自另一个属性或方法,您很可能必须添加日志记录或重新调用window的主线程。我发现,在公开允许客户端更新任何图形化内容的功能时,总是使用如下代码更容易
public void SetStart()
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate()
{
this.SetStart();
});
}
else
{
progressBar1.Value = 0;
progressBar1.Visible = true;
}
}
我建议使用setter属性或方法进行包装,因为如果调用方来自另一个,则很可能需要添加日志记录或重新调用窗口的主线程。我发现,在公开允许客户端更新任何图形化内容的功能时,总是使用如下代码更容易
public void SetStart()
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate()
{
this.SetStart();
});
}
else
{
progressBar1.Value = 0;
progressBar1.Visible = true;
}
}
如果不是,请向窗体中添加属性。如果不是,请向窗体中添加属性。获取如何,这是否可以在一个函数中实现?只有当另一个线程中有代码尝试调用某些更改winforms窗口外观的内容时,才会出现问题。您将知道它何时发生,因为会引发异常。据我所知,获取数据不需要安全防护。获取如何,这可能在一个函数中吗?只有当您在另一个线程中有代码尝试调用某个更改winforms窗口外观的东西时,才会出现问题。您将知道它何时发生,因为会引发异常。据我所知,获取数据并不需要安全警卫。