gpt4 book ai didi

c# - Winform 控件值默认和验证

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:27 25 4
gpt4 key购买 nike

希望这是一个有趣的问题:

假设我使用 winform 设计了一个包含许多控件的对话框。

(1) 当这个对话框打开时,我想为所有控件设置默认值。但是,一个控件的值可能取决于另一个控件(或某些其他控件)的值。

(2) 当用户更改了一个控件的值时,我想在整个上下文中验证新值。换句话说,我有很多规则说明哪些值的组合是可接受的(如果控件 A 的值为 1,控件 B 的值为 2,则控件 C 的值不能为 3)

现在让我们假设我可以保证我定义的所有“规则”不会以死循环结束。

我的问题是:是否有任何已知的框架或通用做法来以一般方式处理此问题?我不希望它特定于我创建的这个特定对话框。我希望它是这样一个框架,我只需定义“规则”——说明哪些组合无效的规则和说明控件的推断值是什么的规则——只要控件值发生变化,框架就会评估这些规则。

欢迎任何想法或评论:)

最佳答案

我不确定这种模式是否有名称,或者它是否是最佳实践,但我通常按以下方式处理它。我只展示了一个控件,但设计很容易支持添加更多控件。

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();
}
}

关于c# - Winform 控件值默认和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com