热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:防止控件在禁用时变灰分享

防止控件在禁用时变灰在winforms.net控件中,如果我们将Enabled属性设置为false,则控件将显示为灰色。在这种情况下,对于许多颜色组合,它将变得不可读(因为我提供了

防止控件在禁用时变灰

在winforms .net控件中,如果我们将Enabled属性设置为false,则控件将显示为灰色。

在这种情况下,对于许多颜色组合,它将变得不可读(因为我提供了在运行时为用户更改表单颜色的选项)。

我可以使用ReadOnly属性,但它仅适用于TextBox控件,而不适用于其他控件,如ComboBox,DateTimePicker等。

我只是想知道是否有任何可用的选项,以便我可以防止控件在禁用时变灰。

在大多数可用性研究中,这是一个悲伤的时刻,看到主题在鼠标和键盘上敲打而不理解为什么它不起作用。 但如果你真的想要,你可以得到它。 诀窍是在控件前面放置一个图片框,显示控件在其先前启用状态下的位图。 他们永远不会发现他们点击位图而不是实际控件。

最好使用Panel,这样您就可以轻松地将控件作为一组禁用。 在项目中添加一个新类并粘贴下面显示的代码。 编译。 将新控件从工具箱顶部拖放到表单上。 并将控件放在其中应该被禁用。 其他一切都是自动的,只需将Enabled属性设置为false,用户就不会知道发生了什么:

using System; using System.Drawing; using System.Windows.Forms; class FakeItPanel : Panel { private PictureBox mFakeIt; public new bool Enabled { get { return base.Enabled; } set { if (value) { if (mFakeIt != null) mFakeIt.Dispose(); mFakeIt = null; } else { mFakeIt = new PictureBox(); mFakeIt.Size = this.Size; mFakeIt.Location = this.Location; var bmp = new Bitmap(this.Width, this.Height); this.DrawToBitmap(bmp, new Rectangle(Point.Empty, this.Size)); mFakeIt.Image = bmp; this.Parent.Controls.Add(mFakeIt); this.Parent.Controls.SetChildIndex(mFakeIt, 0); } base.Enabled = value; } } protected override void Dispose(bool disposing) { if (disposing && mFakeIt != null) mFakeIt.Dispose(); base.Dispose(disposing); } } 

实际上,您不希望修改禁用/启用控件的颜色行为。 当你有机会获得微软更新的Windows用户体验指南,因为它会为你的布局/设计提供一些指导,但如果这是你的应用程序必不可少的function,那么你需要自己处理控件绘制事件,或者inheritance并覆盖其绘制事件并自行绘制自定义颜色以完全控制此方面。

我个人的建议是找到另一种途径,正如其他人提到的那样,人们希望程序以特定的方式运行,但是如果你确实提供了配色方案function,可能会限制可以更改/个性化的应用程序部分。

我会想出你需要根据用户的访问权限将某些字段设置为只读。 这意味着具有编辑某些信息权限的用户可能会看到combobox,而不允许使用此权限的用户编辑该信息,但仍然可以查看该信息并可能需要查看该信息。

我建议您根据需要在屏幕上选择正确的控件。 如果用户可以更改combobox中的选定值,请显示combobox。 如果不允许用户更改该值,请显示包含所选值的只读文本框。

简化上述解决方案的一种方法是开发一些用户控件,根据属性调整他们显示数据的方式,让我们称之为Editable的控件。 因此,如果Editable为true,您可以创建一个显示combobox的用户控件,如果Editable为false,则可以创建一个文本框。 然后是datatimepicker等的相应控件。

如果您的程序中有“只读模式”,请将复选框,选项框,列表框和文本框作为标签。

例如,我做了一个在线测验,在输入值时,它内置了复选框等等,但当有人查看测验时,您会将所有答案视为标签,并将所选值作为文本。 对我来说,这是唯一的方法,不会干扰用户和开发人员的正常思维方式。

如果您有一组可选择的选项并希望即使在只读模式下也可以看到选项,那么请写出所有选项并以不像选项框och复选框的方式标记所选择的选项。

这是我在这方面的5美分。

我知道这是一个老线程,但我偶然发现了一个替代的简单解决方案。

创建一个inheritance自Label的新透明标签控件:

 class TransparentLabel : Label { public TransparentLabel() { this.SetStyle(ControlStyles.Opaque, true); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false); } protected override CreateParams CreateParams { get { CreateParams parms = base.CreateParams; parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT return parms; } } } 

(我没有声称发明了这个课程,它来自其他地方,可能是Hans Passant :-))

在您的设计器中,创建一个TransparentLabel并为其命名,例如tLabel1 。 设置属性如下:

在窗体中,当您要禁用控件时执行以下代码:

 tLabel1.Visible = true; tLabel1.BringToFront(); // if your designer has it at the back 

这是有效的,因为当它可见时,TransparentLabel会获得所有鼠标点击和按键而不是底层控件,但它是透明的,因此您仍然可以看到底层控件。 鼠标右键单击不执行任何操作,因为标签没有上下文菜单。

要重新启用控件,只需再次将Visible属性设置为false,一切都会恢复生机。

上述就是C#学习教程:防止控件在禁用时变灰分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
MrBatista
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有