我想出了这段代码,我认为它相当聪明(要求是如果选择的日期是过去的,则 TextBoxes 应该是只读的,否则(今天的日期或未来的日期)它们应该是可编辑的):
bool? setReadOnly = null;
if (SelectedDateIsInThePast() && (!currentlyReadOnly)) {
setReadOnly = true;
} else if (!SelectedDateIsInThePast() && (currentlyReadOnly)) {
setReadOnly = false;
}
if (setReadOnlyToTrue.HasValue) {
foreach (Control ctrl in tableLayoutPanelPlatypus.Controls) {
if (ctrl is TextBox) {
tb = (TextBox)ctrl;
tb.ReadOnly = setReadOnlyToTrue.Value;
}
}
}
...但在我的伙伴中发现可空布尔值是“不受欢迎的数据类型”。
是否有一种简单的方法来做同样的事情(如果需要更改只读值,则仅循环通过控件?)。当然,我可以简单地设置它们,而不管它们是否需要这样设置:
if (SelectedDateIsInThePast()) {
setReadOnly = true;
} else {
setReadOnly = false;
}
foreach (Control ctrl in tableLayoutPanelPlatypus.Controls) {
if (ctrl is TextBox) {
tb = (TextBox)ctrl;
tb.ReadOnly = setReadOnly;
}
}
...但我不喜欢执行模拟操作,如果可以合理地避免它们的话。