希望这是一个有趣的问题:
假设我使用winform设计了一个Dialog,其中包含许多控件。
(1)打开此对话框时,我想为所有控件设置默认值。但是,一个控件的值可能取决于另一个控件(或其他一些控件)的值。
(2)当用户更改了一个控件的值时,我想在整个上下文中验证新值。换句话说,我有很多规则说明哪些值的组合是可接受的(如果控件A的值为1,而控件B的值为2,则控件C的值不得为3)
我们现在假设我可以保证我定义的所有“规则”都不会以死循环结束。
我的问题是:是否有任何已知的框架或通用做法以一般方式处理此问题?我不希望它特定于我创建的这个特定对话框。我希望它是这样一个框架,我只是定义“规则” - 规则说什么组合无效,规则说什么是控件的推断值 - 框架将在控制值发生变化时评估这些规则。
欢迎任何想法或评论:)
答案 0 :(得分:0)
我不确定这个模式是否有名称,或者即使它是最佳实践,但我通常以下列方式处理它。我只展示了一个控件,但设计很容易支持添加更多控件。
public partial class Form1 : Form
{
private EventHandler textBoxChanged;
public Form1() {
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
textBoxChanged = new EventHandler(textBox1_TextChanged);
}
void setEventHandlers() {
textBox1.TextChanged += textBoxChanged;
}
void removeEventHandlers() {
textBox1.TextChanged -= textBoxChanged;
}
void textBox1_TextChanged(object sender, EventArgs e) {
checkAndUpdate(sender as TextBox);
}
void Form1_Load(object sender, EventArgs e) {
// set minimum required set of default values ...
setEventHandlers();
checkAndUpdate(null);
}
private void checkAndUpdate(Control userModified) {
removeEventHandlers();
// enforce rules
// if rules are violated, you can notify the user
// of the offending control: userModified
// update dependent controls
setEventHandlers();
}
}