c# - 如何确定 Control.Visible 是通过属性设置的还是值是继承的

标签 c# .net winforms

我需要找到一种方法来确定控件的 Visible 属性是通过属性更改设置的,还是从其父级继承它的值。使用反射器,我发现函数 this.GetVisibleCore() 和 this.GetState() 都是内部方法,所以我无法调用它们。

小部件本身是动态创建的,因此我不想在创建每个小部件后立即将方法附加到 VisibleChanged 事件,因此可以尝试监视此属性。如果必须的话,我想我会的,但我正在寻找更优雅的东西。

编辑

我真正想知道的是当我隐藏表单并去关闭它或构建表单但保持隐藏时,哪些 Visible 值是 false 因为表单是隐藏的以及哪些值是 false 因为它们被设置为 false .同样,我不想将方法附加到每个小部件的每个 VisibleChanged 事件。我只是想以某种方式从 Control 对象中读取它。

最佳答案

它仍然不是很清楚,但我假设问题是 Visible 属性 getter 返回控件的实际可见性状态。这不仅是 Visible 的最后一个赋值,它还考虑了控件的父级是否可见。换句话说,如果您在 UserControl 中有一个按钮,并且 UserControl 的 Visible = false,那么该按钮的 Visible 也将始终为 false。

您可以覆盖 SetVisibleCore() 以查明控件是否打算可见:

public bool CouldBeVisible { get; set; }

protected override void SetVisibleCore(bool value) {
  CouldBeVisible = value;
  base.SetVisibleCore(value);
}

关于c# - 如何确定 Control.Visible 是通过属性设置的还是值是继承的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656240/

相关文章:

c# - 如何在不同的浏览器中获取 Html 文档,当 Html 文档完全加载时作为图像?

c# - 哪个更快 : filtering a DataSet in-memory or returning a result set from SQL Server?

C# 最佳实践错误处理和传递错误消息

.net - 连续加工

.net - 按列名的数据行

c# - 如何在 winform 中显示 html 格式的内容(无图像)?

c# - 将 Listbox 绑定(bind)到 WinForms 中的 List<object>

c# - 在浏览器中打开 PDF 而不是下载它

c# - XNA 中的 2D 骨骼系统

c# - PrimaryLanguageOverride 在发布 appxbundle 中不起作用