私はこのコードを思いつきました。これはかなり賢いと思いました (選択した日付が過去の場合、TextBox は読み取り専用にする必要があり、それ以外の場合 (今日の日付または将来の日付) は編集可能にする必要があります):
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;
}
}
}
...しかし、null 可能なブール値は、私の仲間の間で「データ型の非グラタ」であることがわかります。
同じことを行う複雑でない方法はありますか (読み取り専用値を変更する必要がある場合にのみ、コントロールをループしますか?)。もちろん、このように設定する必要があるかどうかに関係なく、単純に設定できます。
if (SelectedDateIsInThePast()) {
setReadOnly = true;
} else {
setReadOnly = false;
}
foreach (Control ctrl in tableLayoutPanelPlatypus.Controls) {
if (ctrl is TextBox) {
tb = (TextBox)ctrl;
tb.ReadOnly = setReadOnly;
}
}
...しかし、回避することが合理的に可能な場合、私は意味のない操作を実行するのは好きではありません。