当前位置: 首页 > 编程语言 > C#

防止控件在禁用时变灰分享

时间:2023-04-10 23:53:36 C#

preventingcontrolsfromgrayoutwhendisabled在winforms.net控件中,如果我们将Enabled属性设置为false,控件就会变灰。在这种情况下,对于许多颜色组合,它将变得不可读(因为我提供了在运行时为用户更改表单颜色的选项)。我可以使用ReadOnly属性,但它只适用于TextBox控件,不适用于ComboBox、DateTimePicker等其他控件。我只是想知道是否有可用的选项,以便我可以防止控件在禁用时变灰.在大多数可用性研究中,这是一个悲伤的时刻,看到受试者在不理解为什么不起作用的情况下猛击鼠标和键盘。但如果你真的想要它,你可以得到它。诀窍是在控件前面放置一个图片框,显示控件在其先前启用状态下的位图。他们永远不会发现他们点击的是位图而不是实际的控件。最好使用Panel,这样您就可以轻松地将控件作为一个组禁用。在项目中添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。并放置它应该被禁用的控件。其他一切都是自动的,只需将Enabled属性设置为false,用户将不知道发生了什么:usingSystem;使用系统绘图;使用System.Windows.Forms;classFakeItPanel:Panel{privatePictureBoxmFakeIt;publicnewboolEnabled{get{returnbase.Enabled;}set{if(value){if(mFakeIt!=null)mFakeIt.Dispose();mFakeIt=null;}else{mFakeIt=newPictureBox();mFakeIt.Size=this.Size;mFakeIt.Location=this.Location;varbmp=newBitmap(this.Width,this.Height);this.DrawToBitmap(bmp,newRectangle(Point.Empty,this.Size));mFakeIt.Image=bmp;this.Parent.Controls.Add(mFakeIt);this.Parent.Controls.SetChildIndex(mFakeIt,0);}base.Enabled=值;}}protectedoverridevoidDispose(booldisposing){if(disposing&&mFakeIt!=null)mFakeIt.Dispose();base.Dispose(处置);您真的不想修改禁用/启用控件的颜色行为。当您有机会获得Microsoft更新的Windows用户体验指南时,因为它会为您的布局/设计提供一些指导,但如果这是您应用程序的基本功能,那么您将需要自己处理控件绘制事件,或者继承并覆盖它的绘制事件并自己绘制自定义颜色以完全控制这方面。我个人的建议是另辟蹊径,正如其他人所提到的,人们希望程序以某种方式运行,但如果您确实提供配色方案功能,那可能会限制应用程序中可以更改/个性化的部分。我会发现您需要根据用户的访问权限将某些字段设置为只读。这意味着有权编辑某些信息的用户可能会看到组合框,而不允许具有此权限的用户编辑该信息,但仍然可以看到它并且可能需要这样做。我建议您根据需要在屏幕上选择正确的控件。如果用户可以更改组合框中的选定值,则显示组合框。如果不允许用户更改值,则显示包含所选值的只读文本框。简化上述解决方案的一种方法是开发用户控件,根据属性调整它们显示数据的方式,我们称它们为可编辑控件。因此,您可以创建一个用户控件,如果Editable为true,则显示组合框,如果Editable为false,则显示文本框。然后datatimepicker等相应的控件。如果你的程序中有“只读模式”,把复选框,选项框,列表框和文本框作为标签。例如,我做了一个在线测验,当输入值时,它内置了复选框等,但是当有人查看测验时,你会看到所有答案都是标签,所选值是文本。对我来说,这是唯一不干扰用户和开发人员正常思维方式的方式。如果您有一组可选择的选项,并且希望即使在只读模式下也能看到这些选项,那么写出所有选项并以不同于选项框或复选框的方式标记所选选项。这是我的5美分。我知道这是一个旧线程,但我偶然发现了一个替代的简单解决方案。创建一个新的继承自Label的透明标签控件:classTransparentLabel:Label{publicTransparentLabel(){this.SetStyle(ControlStyles.Opaque,true);this.SetStyle(ControlStyles.OptimizedDoubleBuffer,false);}protectedoverrideCreateParamsCreateParams{get{CreateParamsparms=base.CreateParams;parms.ExStyle|=0x20;//开启WS_EX_TRANSPARENT返回参数;}}}(我并没有声称自己发明了这个类,它来自其他地方,可能是HansPassant:-))在您的设计器中,创建一个TransparentLabel并为其命名,例如tLabel1。设置属性如下:在窗体中,要禁用控件时执行如下代码:tLabel1.Visible=true;tLabel1.BringToFront();//如果你的设计师把它放在后面,这是有效的,因为当它可见时,TransparentLabel得到所有的鼠标点击和按键而不是底层控件,但它是透明的,所以你仍然可以看到底层控件。鼠标右键单击没有任何作用,因为标签没有上下文菜单。要重新启用该控件,只需再次将Visible属性设置为false,一切都会恢复正常。以上就是C#学习教程的全部内容:防止控件禁用时变灰。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: