【问题标题】:C# Enabling/Disabling buttons using an array, Win forms/MVPC# 使用数组启用/禁用按钮,Win 表单/MVP
【发布时间】:2021-05-28 15:38:15
【问题描述】:

我在 c# winforms 桌面应用程序中有一组按钮 [42]:

private Button[] _tabButton = new Button[]{button00,button01,/*...,*/button41};

然后,当我调用“启动”方法时,我只是这样做:

for(int i=0;i<_tabButton.Length;i++)
      {
       _tabButton[i].enabled = false;
      }

这非常简单和合乎逻辑。 现在,我是 MVP/MVC 的新手,但我在代码中做了一些工作...... 我创建了一个接口并实现它,得到:

public bool Button_0 { get => button00.Enabled; set => button00.Enabled = value; }
   //...
   public bool Button_41 { get => button41.Enabled; set => button41.Enabled = value; }

还有:

 private bool[] _arrayButton_bool;// = new bool[42];//an array of Button_0,Button_1...

所以,我的问题是:如何启用/禁用 42 个按钮,使用布尔数组中的布尔变量“Button_0 ... Button_41”。

如果我说:

 `_arrayButton_bool = {Button_0,Button_1,...,Button_41};
 //... inside intiate methode :
  for(int i=0;i<_arrayButton_bool.Length;i++)
      {
       _arrayButton_bool[i].enabled = false;
      }`

这将影响“_arrayButton_bool[0]”,而不是变量:“Button_0”,我知道我的问题模棱两可,我的英语不太好,但请我尽力提供一点帮助。谢谢。

【问题讨论】:

  • 你的方法根本上是错误的,你应该首先解释为什么你(认为你需要)这样做。
  • 你试过 LINQ/Lambda 表达式吗?
  • 您需要将它们放入列表中,然后使用 LINQ/Lambda 表达式对其进行修改。
  • Sikander Hayyat,我稍后会尝试使用 Linq/Lambda 表达式,现在我正在尝试使用 Michał Turczyn 的答案,这正是我想要的,谢谢。
  • 是的,有更好的方法,我想我也没有很好地解释我需要什么,谢谢@aybe。

标签: c# arrays winforms button


【解决方案1】:

你定义 setter 像:

public bool Button_0 
{
    get => button00.Enabled; 
    set => button00.Enabled = value; 
}

所以Burron_0 = true; 将启用button00 按钮。但问题是,这是 setter,所以在底层它是方法,你不能简单地将它放入一个数组中。尝试创建这些属性的数组只会调用每个 getter 并提供 bool 值。

所以你问的是不可能的。我能想到的最简洁的方法是定义方法:

private void SetButtonsEnabledProperty(bool enabled)
{
    Button_0 = enabled;
    // through to
    Button_41 = enabled;
}

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多