我有一个窗口表单,允许用户输入整数值。只要该值属于某个有效范围,该值就用于更新单独类(FOO(的成员。如果用户输入某些内容无效,我希望一条错误消息告诉用户使用该参数的默认值。
为了实现这一目标,在让FOO设置有关字段之前,我一直在错误地检查Windows表单代码中的用户输入,如果输入失败了检查,则简单地显示消息。
,但是我想做的是将原始用户输入发送到类FOO中的属性设置程序,并让属性设置器处理所有错误检查。对于可能需要在用户界面上显示消息的其他功能,我只是返回一个字符串,但据我所知,无法从属性设置器返回任何状态或值。是否有一种优美的方法可以将某种状态消息从属性设置器引起到其他功能?我不希望foo直接修改用户界面。
事先感谢您提供的任何帮助或提示,如果我的问题太模糊或应以不同的方式问我,我深表歉意,因为我是新手stackoverflow
我解决了我的问题(并删除了几乎所有功能返回字符串的需求(,通过在我的类foo中实现InotifyPropertychangy,并提出一个属性变化的事件,以被Windows表单捕获只要有必要让用户知道某些东西发生了变化。
在类foo中 -
public class foo : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
public int bar;
private void NotifyPropertyChanged(string type) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(type));
}
}
private void test(){
bar = 1;
NotifyPropertyChanged("changed int");
}
}
在Windows表单中:
public partial class GUI : Form {
foo fooinstance = new foo();
public GUI(){
InitializeComponent();
fooinstance.PropertyChanged += doEvent;
}
private void doEvent(object sender, PropertyChangedEventArgs e){
foo updated = sender as foo;
if (object.ReferenceEquals(e.PropertyName, "changed int")) {
ShowWhatChanged(updated.bar); //show on GUI
}
}
}
编辑:我最终使用的一种更优雅,更清洁的方式是利用回调。GUI在实例化时将功能指针传递到FOO中,Foo将其用作代表,每当必要时将字符串传递回GUI。无需事件:
public class foo {
public delegate void UpdateCallback(string msg);
private UpdateCallback _ucb;
public foo(UpdateCallback cb){
_ucb = cb;
}
private void test(){
if(_ucb != null) {
_ucb("Message Here");
}
}
}
public partial class GUI : Form {
public GUI(){
InitializeComponent();
foo fooinstance = new foo(showmessage);
}
private void showmessage(string msg){
//do whatever with the message
}
}