Да, в отличие от вашего приложения, отображающего одновременно сто тысяч кнопок, сконцентрируйте HEAVILY
на удобочитаемости, а не на микрооптимизации!Время, необходимое для обновления пользовательского интерфейса на уровне пользовательского интерфейса, будет в 10 000 раз больше, чем ваши «Включенные» назначения в любом случае!
Решение 2 - это практически то, что вы захотите сделать при использовании привязки данных (вы были очень близки: p).На самом деле, вы должны написать что-то более похожее на:
public class MyClass {
public bool IsSomethingTrue { get; set; } // with notification on property changed
public bool IsSomethingFalse { get { return !IsSomethingTrue; } }
private AMethod() {
...
IsSomethingTrue = Something > 0;
...
}
А ваш пользовательский интерфейс будет выглядеть примерно так (WPF flavored):
<Button IsEnabled={Binding IsSomethingTrue} /> <!-- btn 1 -->
<Button IsEnabled={Binding IsSomethingTrue} /> <!-- btn 2 -->
<Button IsEnabled={Binding IsSomethingFalse} /> <!-- btn 3 -->
<Button IsEnabled={Binding IsSomethingFalse} /> <!-- btn 4 -->
<!-- Want a 5th button ? just add it without changing your code-behind ! -->
Этот шаблон позволяет вам добавить столько кнопок, сколькохочу, не меняя ваши методы каждый раз.Это особенно полезно, когда методы имеют тенденцию быть довольно сложным, и это улучшает удобочитаемость.
Это работает для WPF, Qt, Java, и я думаю, что Winforms должен обеспечить некоторую возможность привязки данных.