代码之家  ›  专栏  ›  技术社区  ›  Madeleine

加速控制的启用/禁用(C WinForms)

  •  3
  • Madeleine  · 技术社区  · 15 年前

    我在基窗体上有一个递归方法,它接受一个控件和一个启用的标志。它遍历窗体上的每个控件,并根据控件类型设置控件的背景色,并将启用属性设置为参数。

    因此,通常,方法被称为传递(这个)作为控件,它通过所有控件及其控件,并相应地进行设置。这已经很好地工作了,但是表单中添加了越来越多的控件,您实际上可以看到这些控件逐个禁用,看起来不太好。

    有人知道我如何重写这个或者阻止它逐个显示每个控件上的禁用进程吗?类似于SuspendLayout,在这种情况下可以工作吗?它不是将面板添加到表单中并在最后将其禁用并重新启用的选项,因为我有大约200多个表单继承自此基本表单,无法遍历每个表单并强制它将控件添加到面板中。这也不会奏效,因为这不仅是启用/禁用控件的问题,而且还应用了其他逻辑。

    2 回复  |  直到 15 年前
        1
  •  7
  •   Mehrdad Afshari    15 年前

    将修改内容附于:

    form.SuspendLayout();
    

    form.ResumeLayout(false); // read the doc about "false", might be a little unsafe
    

    此外,遍历控制层次结构可能会耗费时间。您可以这样做一次,并将它们缓存在一个列表中,然后引用该列表。

        2
  •  -3
  •   Cédric Guillemette    15 年前

    重写onpaint方法,并且只有在禁用了super::onpaint方法后才调用它们(isDoneDisabling=true)。这只是一个权宜之计,不是一个好的设计。

    OnPaint(...)
    {
    if (IsDoneDisabling)
        super::OnPaint(...);
    }