gpt4 book ai didi

c# - 具有泛型和多参数的方法

转载 作者:行者123 更新时间:2023-12-04 10:15:23 25 4
gpt4 key购买 nike

我想根据用户权限启用/禁用 Windows 窗体应用程序中的控件。

最初我想在每个表单类中编写一个方法来检查用户凭据,然后启用/禁用其控件。但后来我意识到我可以(也许)创建一个静态类方法,它将表单作为参数并完成工作。

所以我开始编写它,假设有时我只想启用一两个面板的控件,而不是整个表单。所以,我需要的参数是:

  • 不同数量的面板和/或
  • 一个表单类。

  • 我在这项任务中遇到的困难是,我在尝试使面板参数变化时遇到错误,而且我不知道如何设置可以采用任何形式类的参数。我所有的表单类显然都继承自 Form 泛型类,但我不知道如何应用它。

    这是我得到的:
    public static void Enable(TableLayoutPanel[] containers = null)
    {
    if (MyOF.isEnabled)
    {
    return;
    }
    else
    {
    try
    {
    foreach (TableLayoutPanel table in containers)
    {
    foreach (Control control in table.Controls)
    {
    control.Enabled = false;
    }
    }
    }
    catch (NullReferenceException)
    {
    }
    }
    }

    最佳答案

    如果我们还记得 Form类派生自 Control (间接地,通过从 ContainerControl 派生而来,从 ScrollableControl 派生而来,从 Control 派生而来)和 Enabled属性(property)属于Control类,我们可以编写一个方法来启用任何控件的子项(包括 FormTableLayoutPanel 控件),因为 Controls收藏也属于Control类(class):

    public static void EnableChildren(Control control, bool enabled = true)
    {
    foreach (Control child in control.Controls)
    {
    child.Enabled = enabled;
    }
    }

    然后,如果我们还希望能够将它与控件集合一起使用(如您的示例中所示),我们可以编写一个带有集合的重载:
    public static void EnableChildren(IEnumerable<Control> controls = null, 
    bool enabled = true)
    {
    if (controls == null) return;

    foreach (var control in controls)
    {
    EnableChildren(control, enabled);
    }
    }

    现在我们可以将它与 Form 一起使用或 TableLayoutPanel 的集合控件(或任何在其 Controls 集合中包含控件的控件)。

    用法示例:
    var myForm = new Form1();

    EnableChildren(this); // 'this' is the current form
    EnableChildren(myForm); // a separate instance of a form control
    EnableChildren(tableLayoutPanel1, false); // A single TableLayoutPanel control

    var tableLayoutPanels = new [] {tableLayoutPanel1, tableLayoutPanel2, tableLayoutPanel3};
    EnableChildren(tableLayoutPanels); // An array of tableLayoutPanel controls

    关于c# - 具有泛型和多参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61086483/

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