记录一次:Winform的控件的Visible属性异常问题

这篇具有很好参考价值的文章主要介绍了记录一次:Winform的控件的Visible属性异常问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:背景

1. 讲故事

有一次同事找到我,说以下代码中:btnPlanAppend控件:客户电脑显示正常、开发者电脑调试时无法显示文章来源地址https://www.toymoban.com/news/detail-712148.html

  • btnAppend可以在界面中显示出来
  • btnPlanAppend控件在界面上就是不显示
private void Check_Privilege()
{
    string sPrivilege = ClientUtils.GetPrivilege(g_sUserID, g_sFunction, g_sProgram).ToString();
    btnAppend.Visible = SajetCommon.CheckEnabled("INSERT", sPrivilege); 
    btnPlanAppend.Visible = btnAppend.Visible;
}

二、分析

1. 使用VS调试

  • SajetCommon.CheckEnabled("INSERT", sPrivilege)方法的返回结果:true;
  • btnAppend控件也能正常显示
  • 调试到这一行(btnPlanAppend.Visible = btnAppend.Visible;)btnAppend.Visible属性始终返回false.

2. 分析ToolStripItem控件源码

  • 通过此网站https://referencesource.microsoft.com/可以查询.Net Framework源码。
  • btnAppend与btnPlanAppend控件,都是ToolStripItem控件,找到Visible属性,代码如下:
public bool Visible {
    get {
        return (ParentInternal!=null) && (ParentInternal.Visible) &&  Available; 
    }
    set {
        SetVisibleCore(value);
    }
}
  • 从代码中可以看出,出现问题应该是由于ParentInternal不满足条件。通过Parent英语单词可以看出,ParentInternal属性应该是与此控件的父控件有关系。
  • 再看一下ParentInternal属性的代码
internal ToolStrip ParentInternal {
    get {
        return parent;
    }
    set {
        if (parent != value) {
            ToolStrip oldParent = parent;
            parent = value;
            OnParentChanged(oldParent, value);
        }
    }
}
  • 控件parent就应该是保存父控件引用。
  • 第一段代码中Check_Privilege方法,是放在Form_Loaded事件中调用,可以推断,调用Form_Loaded事件时,ToolStripItem还没有真正的现在Form中显示出来,parent应该为null.

3. 分析:现场电脑为什么可以正常显示

  • 通过VS的查看,编译环境中:目标框架:.NET Framework 2.0。看到这个好古老。
  • 开发者电脑没有.NET Framework 2.0的环境,调试时使用是新的.NET Framework库。

三、总结

1. 修改代码

  • 通过分析,既然Form_Loaded事件中,获得到btnAppend.Visible一直False。就不要使用btnAppend.Visible作为中转变量。
  • 创建一个临时变量,btnAppend与btnPlanAppend的Visible都有临时变量赋值就可以了。

2. 总结

  • .NET Framework 版本很多,版本之间一定有差异,此类问题就是NET Framework差异造成。

到了这里,关于记录一次:Winform的控件的Visible属性异常问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【生产问题记录】一次简单的 Http 请求异常处理 (请求的 url 太长, Nginx 直接返回 400, 导致请求服务异常)

    按照惯例直接说结论。 后台服务 A 有一个 Http 接口, 代码如下: 没错, 一个 Get 请求, 入参是一个 List 。 同时有另一个后台服务 B, 里面有段逻辑会通过 RestTemplate 调用服务 A 的这个接口, 代码如下: 在服务 B 中, 通过 batchGetUserInfo 方法请求服务 A 时, 传入了一个长度为 122 的 List

    2024年01月16日
    浏览(54)
  • 【C#学习记录】如何让界面控件实现自适应布局(Winform)

    小伙伴们大家好,我是雷工! 在软件界面设计中,客户常常要求设计的界面可以随意缩放,缩放过程中,界面中的按钮等控件也会随着窗体变大缩小自动调整显示位置和尺寸大小。在C#的Winform窗体中如何实现这个效果,下面我们一起学习下。 本样例的程序运行环境具体如下

    2023年04月21日
    浏览(47)
  • 记录一次YAMLException异常

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 报错以及Bug ✨特色专栏: MySQL学习 🥭本文内容:记录一次YAMLException异常 📚个人知识库: [Leo知识库]https://gaoziman.gitee.io/blogs/),欢迎大家访问

    2024年02月05日
    浏览(50)
  • clickhouse一次异常排查记录

    clickhouse中报错 关闭了自启动,删了status,重启了clickhouse还是报错 1,排查定时执行的脚本日志(每小时第5分钟执行) INSERT INTO quality0529.previously_reported_urls (url) SELECT url FROM quality0529.hourly_data_view WHERE findUrlListLastTime = now() - INTERVAL 1 HOUR GROUP BY url 2,查看ck执行异常详细信息统计

    2024年02月11日
    浏览(45)
  • 记录一次ScrollViewer控件 经过大量文本数据卡顿的原因

      在 WPF 中,CanContentScroll 是 ScrollViewer 控件的一个附加属性,它控制滚动视图中的内容是否按项或像素来滚动。 当 CanContentScroll 设置为 false 时,表示 ScrollViewer 控件使用逐像素的滚动方式,这意味着滚动视图中的内容会以像素为单位进行滚动。在这种情况下,如果您需要展示

    2024年02月06日
    浏览(41)
  • 记一次 MySQL 主从同步异常的排查记录,百转千回

    你好,我是悟空。 这是悟空的第 183 篇原创文章 官网:www.passjava.cn 本文主要内容如下: 最近项目的测试环境遇到一个主备同步的问题: 备库的同步线程停止了,无法同步主库的数据更改。 备库报错如下: 完整的错误信息: 上面的报错信息是什么意思呢? 翻译一下就是主

    2023年04月17日
    浏览(77)
  • 记录一次.NET6环境使用Visual Studio 2022 V17.6.2版本的异常

    C#开发环境Visual Studio 2022 V17.6.2版本。 .NET 6.0 系统是Blazor Server框架的系统页面,在使用Visual Studio 2022 V17.6.2版本编译后,执行出现: 先使用了Visual Studio 2022 V17.4.0版本编译后可以正常。 经过分析:Visual Studio 2022 V17.4.0还在使用的目标框架为:.NET 6.0,Visual Studio 2022 V17.6.2版本的

    2024年02月08日
    浏览(61)
  • 记录一次微服务连接Nacos异常-errorMsg: Illegal character in authority at index 7:

    组件信息 Nacos 2.2.3 SpringCloud微服务 部署环境:centerOS 部署方式:k8s 前言 nacos开启鉴权,nacos地址通过变量方式传入服务中 k8s在传入${NACOS_ADDR}时先对地址做了base64编码 服务启动异常 下面是服务启动异常的日志 问题排查 首先通过异常日志com.alibaba.nacos.api.exception.NacosException:

    2024年02月11日
    浏览(38)
  • 记一次Oracle归档日志异常增长问题的排查过程

    Oracle归档日志是Oracle数据库的重要功能,用于将数据库的重做日志文件(Redo Log)保存到归档日志文件(Archive Log)中。归档日志的作用是提供数据库的备份和恢复功能,以及支持数据库的持续性和数据完整性。 当数据库处于归档模式时,数据库引擎会将已经写满的重做日志

    2024年02月14日
    浏览(52)
  • 【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录)

    缘起 :项目需读取nacos中动态的TDengine数据库连接信息并提取IP,一个并不复杂的操作,但作为一个nacos知识浅薄的菜鸡,我愣是捯饬了几个小时……惭愧惭愧…… 异常代码 报错信息 报错核心: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Coul

    2024年01月19日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包