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


推荐阅读
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
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社区 版权所有