我的程序是一个windows窗体应用程序。我的表单中有多个按钮和一个ListView控件。ListView1.Text
中显示不同信息的每个按钮,并非所有用户都可以查看与其角色相关的所有信息。例如,如果用户是学生,他只能看到来自Btn1.Text
、Btn2.Text
、Btn5.Text
的信息,而其余按钮将在ListView1.Text
内显示为空。因此,我希望那些在ListView中不显示任何信息的按钮变成不可见的。我该怎么做?非常感谢。
在这种情况下,我将创建一个实现INotifyPropertyChanged
的类,以包含各种控件的state
,例如它们的可见性,然后我将使用简单的Windows窗体数据绑定将窗体控件的Visibility
属性绑定到此"UIStatus"对象中的值上。
将UI状态集中到一个对象中是一个很好的范例,它实际上非常接近MVVM。当用户与表单交互时,UIStatus会更新,Windows窗体绑定机制将负责设置控件的可见性,甚至启用性。
使用这种方法可以避免必须在窗体上的Controls集合中循环,并在该循环中执行所有类型的逻辑,这些逻辑必须绑定到计时器或其他东西才能周期性地触发它。
我发现,将UIStatus对象的属性设置为用户交互的一部分要好得多,因为Windows窗体数据绑定将在"后台"进行。
干杯
foreach (Control control in this.Controls)
{
if (control is Button)
{
if (string.IsNullOrEmpty(((Button)control).Text))
{
((Button)controls).Visible = false;
}
}
}
edit:用Control 替换var