`
izuoyan
  • 浏览: 9223407 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Winforms:只读TextBox的文字颜色不随ForeColor的改变而改变

阅读更多

一、 问题描述

当一个TextBoxReadOnly属性设为true的时候,我们不管怎么改变ForeColor,该TextBox的字体颜色都不发生改变。

二、 问题重现

1. 新建一个Winforms工程;

2. 从工具箱里拖拽一个TextBoxForm1上;

3. 在属性框里,把textBox1ReadOnly属性设为true

4. 在属性框里,把textBox1Text属性设为一个非空字符串;

5. 在属性框里,改变textBox1ForeColor属性。

我们可以注意到尽管我们改变了textBox1ForeColor属性,显示的字体颜色并没有发生变化。

三、 原因分析

WinformsTextBox控件是在响应消息WM_CTLCOLOREDIT的时候的时候,把颜色ForeColor通过API SetTextColor设置为字体颜色。在关于消息WM_CTLCOLOREDITMSDN页面中,有这样一句话:

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并没有调用SetTextColorForeColor设置为字体颜色。也就是说,当一个TextBox为只读时,它的字体颜色不是由Winforms设定的,而是由Windows设置为黑色。因此无论我们怎么修改一个只读TextBoxForeColor颜色,它的字体颜色都不发生改变。

四、 类似现象

如果把一个ButtonFlatStyle属性设为System,然后当我们在试图去修改BackColor的时候,我们发现该Button的背景颜色也不发生改变。原因与上面提到的类似,详情请参考消息WM_CTLCOLORBTN

分享到:
评论

相关推荐

    教你如何把Winform TextBox 垂直居中的类文件

    在Windows Forms(Winform)开发中,TextBox控件是最常用的一种输入控件,通常用于接收用户的文本输入。然而,有时我们需要让TextBox在容器内垂直居中显示,这可能需要一些额外的布局设置或自定义代码。这篇教程将...

    自定义控件的编辑框的文字颜色

    对于Web开发,如React或Vue,我们可以在组件模板中直接应用CSS样式来改变文字颜色。 在实际项目中,为了保持代码的可维护性和灵活性,我们通常会将颜色值存储在资源文件或配置中,而不是硬编码在代码里。这使得我们...

    透明的Textbox

    2. **利用 API 函数**:可以使用Windows API函数如`SetWindowLong`和`GetWindowLong`来改变TextBox的风格,使其支持透明。`WS_EX_TRANSPARENT`风格可以实现背景透明,但文本仍然可见。 3. **自定义控件**:创建一个...

    winfrom重写textbox控件,添加水印

    在Windows Forms(WinForms)开发中,我们经常需要在文本框(TextBox)中实现水印效果,即在文本框未输入任何文字时显示一段提示性的文字,一旦用户开始输入,水印文字就会自动消失。本教程将详细介绍如何通过重写...

    winform下自定义textbox定义半透明自定义圆角大小等

    继承Control的自定义textbox感谢某位高人的指点。 可以自己设置透明度、设置背景颜色、设置圆角大小、设置最大多少字符、设置显示的密码字符

    winform中,如何控制控件位置随窗体的大小改变而改变.txt

    根据提供的文件信息,我们可以深入探讨如何在WinForms应用程序中实现控件的位置随窗体大小变化而自动调整的技术细节。此技术对于开发响应式用户界面至关重要,确保应用在不同分辨率和屏幕尺寸下的显示效果一致。 ##...

    WinForms 记事本应用程序

    【WinForms 记事本应用程序】是一个基于C#语言和Windows Forms(WinForms)平台的简单文本编辑器项目,主要用于学习和实践编程技术。在VS2005(Visual Studio 2005)开发环境下,这个小型练习旨在帮助开发者掌握如何...

    C#结合wpf实现3D图形绘制和导出实例

    3.WPF控件嵌入WinForms: 使用ElementHost控件将WPF控件嵌入到WinForms窗口中。 4.3D图形绘制: 在WPF中,利用Viewport3D控件来绘制3D图形,例如立方体。 5.导入STL: 使用Helix Toolkit的StLReader类从STL文件中读取3D...

    Verify.WinForms:扩展验证以允许验证WinForms UI

    验证.WinForms 扩展以允许验证WinForms UI。 可通过获得支持。 内容 NuGet包 用法 在程序集加载时一次启用VerifyXaml: VerifyWinForms . Enable (); | 形成 可视元素(窗体/控件等)可以按以下方式进行验证: ...

    webview-winforms:带有 CEFSharp 和 Razor 引擎的 Winforms 中的 Webview

    webview-winforms 由和提供支持的 Winforms 中的 Webview

    C#Winforms聊天程序

    C#是微软公司推出的一种面向对象的编程语言,广泛应用于桌面应用开发,而Winforms是.NET Framework提供的一种用于创建桌面应用程序的UI框架。这个聊天程序可能是为用户提供文本、语音或视频聊天功能的软件。 描述中...

    WinForms

    在Windows Forms(WinForms)开发中,Timer控件、ListView控件和TreeView控件是非常重要的组件,它们在创建用户界面和实现特定功能时起到关键作用。以下是对这些控件的详细说明: 1. **Timer控件** Timer控件是...

    winforms:Windows窗体是用于构建Windows桌面应用程序的.NET Core UI框架。

    Windows窗体(WinForms)是用于构建Windows桌面应用程序的UI框架。 它是Windows用户界面库(例如User32和GDI +)上的.NET包装。 它还提供Windows窗体特有的控件和其他功能。 Windows窗体还提供了基于Visual Studio...

    VS13.WinForms:使用Visual Studio 2013进行WinForms开发的组件和设计机制

    VS13.WinForms概述使用Visual Studio 2013进行WinForms开发的开发组件和设计机制。 项目VS13.Reminders.Lib,VS13.Reminders.Win为WinForms应用程序提供Outlook样式的项目提醒。 通知区域中的VS13.TrayIcon.Lib,...

    Telerik_UI_for_Winforms_2017_R2_-_Full_Package_Includes_Source

    Telerik UI for WinForms是Telerik公司开发的一套完整的Windows Forms用户界面组件库,它为.NET Framework应用程序提供了丰富的UI控件和工具。2017 R2版本是该产品的更新迭代,旨在提供更先进、更稳定的功能,以及...

    带提示消息的TextBox和PasswordBox

    在TextBox和PasswordBox的GotFocus事件处理程序中,清空当前文本,而在LostFocus事件中,如果文本为空,则重新显示提示信息。 此外,对于更复杂的UI设计,还可以利用DataTemplate和ControlTemplate来定制TextBox和...

    C#winform textbox 画边框和圆角

    为Winform中的Textbox添加圆角和边框,圆角大小和边框大小可以设置

    Register-WinForms:通过使用.NET Framework上的Windows Forms进行简单的图书注册系统

    【标题】:“Register-WinForms”项目是一个基于.NET Framework的Windows Forms应用,旨在实现一个简易的图书注册系统。这个系统利用C#编程语言的强大功能,为用户提供了在桌面环境中管理和记录图书信息的平台。 ...

    一组Winforms皮肤

    它允许开发者创建具有丰富用户界面的应用,而Winforms皮肤则是在这一基础上进一步提升用户体验的关键。通过使用不同的皮肤,开发者可以改变应用程序的外观,使其与用户系统主题或者公司品牌色调相匹配,增强视觉吸引...

    Unity-WinForms:Unity3d的Windows窗体端口

    Unity Windows表单 在“ UnityEngine.GUI”类的顶部构建的Unity3d的Windows窗体端口(包括System.Drawing)。 支持的控件 按钮; 复选框; 组合框; DateTimePicker; FontDialog; 形成; GroupBox;...

Global site tag (gtag.js) - Google Analytics