假设我有一个显示已启用或已禁用的框。 如何根据状态使文本有所不同?
答案 0 :(得分:4)
public void CheckBox1CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked) {
checkBox1.Text = "Enabled";
}
else {
checkBox1.Text = "Disabled";
}
}
答案 1 :(得分:2)
box.Text = (box.Enabled ? "ENABLED" : "DISABLED");
答案 2 :(得分:2)
如果我理解正确,您就会问如何自动更新标签或其他一些UI文本以反映“状态变量”。这只是实现您所描述内容的一种方式:
我会通过拥有一个实现INotifyPropertyChanging和INotifyPropertyChanged的中央状态对象来实现。当您的应用程序初始化时,将事件处理程序附加到这些接口公开的事件,其中一个事件处理程序可以在属性(Foo)更改时更改标签的文本。
public class State : INotifyPropertyChanging, INotifyPropertyChanged
{
public event PropertyChangingEventHandler PropertyChanging;
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanging(PropertyChangingEventArgs e)
{
if (this.PropertyChanging != null)
{
this.PropertyChanging(this, e);
}
}
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, e);
}
}
public bool Foo
{
get
{
return foo;
}
set
{
if (value != foo)
{
this.OnPropertyChanging(new PropertyChangingEventArgs("Foo"));
foo = value;
this.OnPropertyChanged(new PropertyChangedEventArgs("Foo"));
}
}
}
private bool foo = false;
}
protected void HandleStateChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName == "Foo")
{
box.Text = state.Foo ? "Enabled" : "Disabled";
}
}
答案 3 :(得分:0)
jeffamaphone说的是什么,但我应该补充说,只要状态发生变化,你就必须确保运行相同的代码。确保这种情况发生的最简单方法是将box.Text属性绑定到您感兴趣的状态对象。这样,对对象所做的任何更改都会立即反映在文本中。
This blog post 帮助我开始使用数据绑定....因为我喜欢常见问题解答。
答案 4 :(得分:0)
过去几个月我一直在使用比实施全班管理状态稍微轻一点的解决方案。我通常定义一个枚举,指示UI中可用的状态类型,然后我有一个功能,根据所选的状态对UI进行更改。这种方法非常成功,并且在需要编写的代码量方面也不算太重。
如果我想知道UI中可用的状态,我可以检查枚举的值。
public enum SystemState
{
/// <summary>
/// System is under the control of a remote logging application.
/// </summary>
RemoteMode,
/// <summary>
/// System is not under the control of a remote logging application.
/// </summary>
LocalMode
}
public interface IView
{
void SetState(SystemState state);
}
//method on the UI to modify UI
private void SetState(SystemState state)
{
switch (state)
{
case SystemState.LocalMode:
//for now, just unlock the ui
break;
case SystemState.RemoteMode:
//for now, just lock the ui
break;
default:
throw new Exception("Unknown State requested:" + state);
}
}
//now when you change state, you can take advantage of intellisense and compile time checking:
public void Connect()
{
SetState(SystemState.RemoteMode);
}