启用时表单组件的可见性为false C#

时间:2012-12-18 15:15:01

标签: c# winforms visible

我有一个带有标签和其他组件,图片框,面板等的表单。当我正在做Form.enabled = false;时(因为我上面有另一个表单),即使可见性,标签也不会显示组件的设置为true;有什么想法吗?

我没有包含代码,因为我不确定包括什么!

感谢您的帮助!

编辑:在Joel Etherton说完之后,我尝试使用此活动:

private void label1_VisibleChanged(object sender, EventArgs e)
{
      label1.Visible = true;
}

这给了我一个StackOverflowException ..也许这是无限尝试覆盖父控件的可见性..我该怎么办?

1 个答案:

答案 0 :(得分:1)

检查元素的父对象(并在树上跟进)。通常这是由父设置为Visible = false;引起的。特定控件的可见性设置仍将注册为true,但是当实际呈现页面时,它将停止在可见性为false的任何父级别生成控件。

编辑:
首先,您应该找到问题的根本原因。这不是代码问题,而是期望问题。预计控件是可见的,但是您创建了一个无法实现的控件。我认为通过尝试找出导致父控件具有错误可见性的条件会更好。很可能你会发现强制父母的可见性或设计问题存在逻辑问题,你的“可见”控件放在错误的根容器中。但是,如果您只是想强制父母的可见性,您可以使用递归方法执行此操作:

private static void SetAllParentVisibility(bool visible, Control ctrl)
{
    ctrl.Visible = visible;
    if (ctrl.Parent != null)
        SetAllParentVisibility(visible, ctrl.Parent);
}

另外,将上述方法视为伪代码。我没有对其进行测试,可能需要更改类型Control以便能够适应不同的父类型。