热门标签 | 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#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
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社区 版权所有