一、 问题描述
当一个TextBox的ReadOnly属性设为true的时候,我们不管怎么改变ForeColor,该TextBox的字体颜色都不发生改变。
二、 问题重现
1. 新建一个Winforms工程;
2. 从工具箱里拖拽一个TextBox到Form1上;
3. 在属性框里,把textBox1的ReadOnly属性设为true;
4. 在属性框里,把textBox1的Text属性设为一个非空字符串;
5. 在属性框里,改变textBox1的ForeColor属性。
我们可以注意到尽管我们改变了textBox1的ForeColor属性,显示的字体颜色并没有发生变化。
三、 原因分析
在Winforms里TextBox控件是在响应消息WM_CTLCOLOREDIT的时候的时候,把颜色ForeColor通过API SetTextColor设置为字体颜色。在关于消息WM_CTLCOLOREDIT的MSDN页面中,有这样一句话:
Read-only or disabled edit controls do not send the WM_CTLCOLOREDIT message; instead, they send the WM_CTLCOLORSTATIC message.
当我们把一个TextBox设为只读时,Windows将不再发送消息WM_CTLCOLOREDIT给它。但该TextBox将收到消息WM_CTLCOLORSTATIC。在TextBox对消息WM_CTLCOLORSTATIC的响应函数里,Winforms并没有调用SetTextColor把ForeColor设置为字体颜色。也就是说,当一个TextBox为只读时,它的字体颜色不是由Winforms设定的,而是由Windows设置为黑色。因此无论我们怎么修改一个只读TextBox的ForeColor颜色,它的字体颜色都不发生改变。
四、 类似现象
如果把一个Button的FlatStyle属性设为System,然后当我们在试图去修改BackColor的时候,我们发现该Button的背景颜色也不发生改变。原因与上面提到的类似,详情请参考消息WM_CTLCOLORBTN。
分享到:
相关推荐
在Windows Forms(Winform)开发中,TextBox控件是最常用的一种输入控件,通常用于接收用户的文本输入。然而,有时我们需要让TextBox在容器内垂直居中显示,这可能需要一些额外的布局设置或自定义代码。这篇教程将...
对于Web开发,如React或Vue,我们可以在组件模板中直接应用CSS样式来改变文字颜色。 在实际项目中,为了保持代码的可维护性和灵活性,我们通常会将颜色值存储在资源文件或配置中,而不是硬编码在代码里。这使得我们...
2. **利用 API 函数**:可以使用Windows API函数如`SetWindowLong`和`GetWindowLong`来改变TextBox的风格,使其支持透明。`WS_EX_TRANSPARENT`风格可以实现背景透明,但文本仍然可见。 3. **自定义控件**:创建一个...
在Windows Forms(WinForms)开发中,我们经常需要在文本框(TextBox)中实现水印效果,即在文本框未输入任何文字时显示一段提示性的文字,一旦用户开始输入,水印文字就会自动消失。本教程将详细介绍如何通过重写...
继承Control的自定义textbox感谢某位高人的指点。 可以自己设置透明度、设置背景颜色、设置圆角大小、设置最大多少字符、设置显示的密码字符
根据提供的文件信息,我们可以深入探讨如何在WinForms应用程序中实现控件的位置随窗体大小变化而自动调整的技术细节。此技术对于开发响应式用户界面至关重要,确保应用在不同分辨率和屏幕尺寸下的显示效果一致。 ##...
【WinForms 记事本应用程序】是一个基于C#语言和Windows Forms(WinForms)平台的简单文本编辑器项目,主要用于学习和实践编程技术。在VS2005(Visual Studio 2005)开发环境下,这个小型练习旨在帮助开发者掌握如何...
3.WPF控件嵌入WinForms: 使用ElementHost控件将WPF控件嵌入到WinForms窗口中。 4.3D图形绘制: 在WPF中,利用Viewport3D控件来绘制3D图形,例如立方体。 5.导入STL: 使用Helix Toolkit的StLReader类从STL文件中读取3D...
验证.WinForms 扩展以允许验证WinForms UI。 可通过获得支持。 内容 NuGet包 用法 在程序集加载时一次启用VerifyXaml: VerifyWinForms . Enable (); | 形成 可视元素(窗体/控件等)可以按以下方式进行验证: ...
webview-winforms 由和提供支持的 Winforms 中的 Webview
C#是微软公司推出的一种面向对象的编程语言,广泛应用于桌面应用开发,而Winforms是.NET Framework提供的一种用于创建桌面应用程序的UI框架。这个聊天程序可能是为用户提供文本、语音或视频聊天功能的软件。 描述中...
在Windows Forms(WinForms)开发中,Timer控件、ListView控件和TreeView控件是非常重要的组件,它们在创建用户界面和实现特定功能时起到关键作用。以下是对这些控件的详细说明: 1. **Timer控件** Timer控件是...
Windows窗体(WinForms)是用于构建Windows桌面应用程序的UI框架。 它是Windows用户界面库(例如User32和GDI +)上的.NET包装。 它还提供Windows窗体特有的控件和其他功能。 Windows窗体还提供了基于Visual Studio...
VS13.WinForms概述使用Visual Studio 2013进行WinForms开发的开发组件和设计机制。 项目VS13.Reminders.Lib,VS13.Reminders.Win为WinForms应用程序提供Outlook样式的项目提醒。 通知区域中的VS13.TrayIcon.Lib,...
Telerik UI for WinForms是Telerik公司开发的一套完整的Windows Forms用户界面组件库,它为.NET Framework应用程序提供了丰富的UI控件和工具。2017 R2版本是该产品的更新迭代,旨在提供更先进、更稳定的功能,以及...
在TextBox和PasswordBox的GotFocus事件处理程序中,清空当前文本,而在LostFocus事件中,如果文本为空,则重新显示提示信息。 此外,对于更复杂的UI设计,还可以利用DataTemplate和ControlTemplate来定制TextBox和...
为Winform中的Textbox添加圆角和边框,圆角大小和边框大小可以设置
【标题】:“Register-WinForms”项目是一个基于.NET Framework的Windows Forms应用,旨在实现一个简易的图书注册系统。这个系统利用C#编程语言的强大功能,为用户提供了在桌面环境中管理和记录图书信息的平台。 ...
它允许开发者创建具有丰富用户界面的应用,而Winforms皮肤则是在这一基础上进一步提升用户体验的关键。通过使用不同的皮肤,开发者可以改变应用程序的外观,使其与用户系统主题或者公司品牌色调相匹配,增强视觉吸引...
Unity Windows表单 在“ UnityEngine.GUI”类的顶部构建的Unity3d的Windows窗体端口(包括System.Drawing)。 支持的控件 按钮; 复选框; 组合框; DateTimePicker; FontDialog; 形成; GroupBox;...