C# 控件双缓冲控制 ControlStyles 枚举详解

ControlStyles 枚举
.NET Framework 4
 

指定控件的样式和行为。

此枚举有一个 FlagsAttribute 特性,通过该特性可使其成员值按位组合。

 

命名空间:  System.Windows.Forms
程序集:  System.Windows.Forms(在 System.Windows.Forms.dll 中)
语法
C# 
[FlagsAttribute]
public enum ControlStyles
成员
成员名称说明
ContainerControl如果为 true,则控件是类似容器的控件。
UserPaint如果为 true,控件将自行绘制,而不是通过操作系统来绘制。 如果为 false,将不会引发 Paint 事件。 此样式仅适用于派生自 Control 的类。
Opaque如果为 true,则控件被绘制为不透明的,不绘制背景。
ResizeRedraw如果为 true,则在调整控件大小时重绘控件。
FixedWidth如果为 true,则自动缩放时,控件具有固定宽度。 例如,如果布局操作尝试重新缩放控件以适应新的Font,则控件的 Width 将保持不变。
FixedHeight如果为 true,则自动缩放时,控件具有固定高度。 例如,如果布局操作尝试重新缩放控件以适应新的Font,则控件的 Height 将保持不变。
StandardClick如果为 true,则控件将实现标准 Click 行为。
Selectable如果为 true,则控件可以接收焦点。
UserMouse如果为 true,则控件完成自己的鼠标处理,因而鼠标事件不由操作系统处理。
SupportsTransparentBackColor如果为 true,控件接受 alpha 组件小于 255 的 BackColor 以模拟透明。 仅在 UserPaint 位设置为 true并且父控件派生自 Control 时才模拟透明。
StandardDoubleClick如果为 true,则控件将实现标准 DoubleClick 行为。 如果 StandardClick 位未设置为 true,则忽略此样式。
AllPaintingInWmPaint如果为 true,控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁。 仅当 UserPaint 位设置为 true 时,才应当应用该样式。
CacheText如果为 true,控件保留文本的副本,而不是在每次需要时从 Handle 获取文本副本。 此样式默认为false。 此行为提高了性能,但使保持文本同步变得困难。
EnableNotifyMessage如果为 true,则为发送到控件的 WndProc 的每条消息调用 OnNotifyMessage 方法。 此样式默认为false。 EnableNotifyMessage 在部分可信的情况下不工作。
DoubleBuffer如果为 true,则绘制在缓冲区中进行,完成后将结果输出到屏幕上。 双重缓冲区可防止由控件重绘引起的闪烁。 如果将 DoubleBuffer 设置为 true,则还应当将 UserPaint 和 AllPaintingInWmPaint 设置为true。
OptimizedDoubleBuffer如果为 true,则该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁。 如果将此属性设置为 true,则还应当将 AllPaintingInWmPaint 设置为 true。
UseTextForAccessibility指定该控件的 Text 属性的值,如果已设置,则可确定该控件的默认 Active Accessibility 名称和快捷键。
备注

控件在各种属性和方法中使用此枚举指定功能。 控件可以通过调用 SetStyle 方法并传入适当的 ControlStyles 位以及设置该位的 Boolean 值来启用样式。 例如,下面的一行 Visual Basic 代码将会启用双重缓冲。

 myControl.SetStyle(UserPaint Or AllPaintingInWmPaint Or DoubleBuffer, True)

如果将 AllPaintingInWmPaint 位设置为 true,则将忽略 WM_ERASEBKGND 窗口消息,而直接从 WM_PAINT 窗口消息调用OnPaintBackground 和 OnPaint 方法。 这通常可减少闪烁,除非其他控件将 WM_ERASEBKGND 窗口消息发送到该控件。 可以发送 WM_ERASEBKGRND 窗口消息以达到与 SupportsTransparentBackColor 相似的假透明效果;例如,具有平面外观的 ToolBar 就采用这种方法。

若要完全启用双缓冲,可以将 OptimizedDoubleBuffer 和 AllPaintingInWmPaint 位设置为 true。 但是,启用双缓冲的首选方法是将该控件的DoubleBuffered 属性设置为 true,这会产生同样的结果。

如果 SupportsTransparentBackColor 位设置为 true,并且 BackColor 被设置为 alpha 组件小于 255 的颜色,则 OnPaintBackground 将通过请求其父控件绘制背景来模拟透明。 但这不是真正的透明。

注意注意

如果在控件与其父控件之间还有另一个控件,则当前控件不会显示中间的控件。

当 UserMouse 位设置为 true 时,仍将调用以下方法:Control.OnMouseDown、Control.OnMouseUp、Control.OnMouseEnter、Control.OnMouseMove、Control.OnMouseHover、Control.OnMouseLeave 和 Control.OnMouseWheel。

单击控件时,如果 StandardClick 位设置为 true,则 Control.OnClick 方法被调用,它将引发 Control.Click 事件。 双击控件并且StandardClick 和 StandardDoubleClick 位都设置为 true 时,会将此次单击传递给 DoubleClick 事件。 随后,Control.OnDoubleClick 方法被调用,此方法将引发 Control.DoubleClick 事件。 然而,无论 StandardClick 和 StandardDoubleClick 位为何值,控件都可直接调用 OnClick或 OnDoubleClick。 有关控件单击和双击行为的更多信息,请参见 Control.Click 和 Control.DoubleClick 这两个主题。

当已设置 UseTextForAccessibility 位和该控件的 Text 属性值时,该控件的 Text 属性值可确定控件的默认的 Active Accessibility 名称和快捷键。 否则,将改用前面的 Label 控件的文本。 此样式为默认设置。 某些内置控件类型(如 TextBox 和 ComboBox)会重置此样式,因此 Active Accessibility 不会使用那些控件的 Text 属性。

对继承者的说明

如果该控件不支持 Click 或 DoubleClick 事件,那么从标准 Windows 窗体控件继承并将 StandardClick 或 StandardDoubleClick 位值更改为true 会导致意外的行为,或者根本不会产生任何效果。

示例

下面的示例演示如何通过 StyleChanged 事件使用 ControlStyles。

C#
// Set the 'FixedHeight' and 'FixedWidth' styles to false.
private void MyForm_Load(object sender, EventArgs e)
{this.SetStyle(ControlStyles.FixedHeight, false);this.SetStyle(ControlStyles.FixedWidth, false);
}private void RegisterEventHandler()
{this.StyleChanged += new EventHandler(MyForm_StyleChanged);
}// Handle the 'StyleChanged' event for the 'Form'.
private void MyForm_StyleChanged(object sender, EventArgs e)
{MessageBox.Show("The style releated to the 'Form' has been changed");
}

转载于:https://www.cnblogs.com/1175429393wljblog/p/5684090.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协作机器人 ai算法_如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计...

协作机器人 ai算法by Mariya Yao姚iya(Mariya Yao) 如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计 (If we want AI to work for us — not against us — we need collaborative design) The trope “there’s an app for that” is becoming …

Shadow Brokers 公布 2.1 万美元的 0day 订阅服务

神秘黑客组织 Shadow Brokers 宣布将向支付 2.1 万美元 0day 订阅服务的个人公布最新一批的 NSA 工具,这一声明给全世界的白帽子黑客或安全研究人员造成了一场伦理危机。 一方面,Shadow Brokers 此前释出过创造出勒索软件 WannaCry 的 NSA 工具&#xff…

linux awk 常见字符串处理

awk指定输出列: awk {print $0} file #打印所有列awk {print $1} file #打印第一列 awk {print $1, $3} file #打印第一和第三列 cat file | awk {print $3, $1} #打印第三列和第一列,注意先后顺序。 cat file | awk {print $3, $NF} #打印第三列…

oracle ldap 配置,ldap 安装

一、安装步骤1:配置yum源挂着盘镜像时用到: 这里不做解释;(yum clean all && yum makecache)2:安装OpenLDAP组件1)安装OpenLDAP组件命令如下:[rootgitea ~]# yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -ycom…

scp跨主机拷贝工具

参考:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html SSH上A机,要将10.1.17.95机/tpdata/shell_script/下面的crontab.tar.gz文件拷贝到A机的当前文件夹下面: scp weblogic10.1.17.95:/tpdata/shell_script/crontab.tar.gz …

Google Chrome浏览器可能在您不知情的情况下破坏了您的测试

by Robert Axelsen罗伯特阿克森(Robert Axelsen) Google Chrome浏览器可能在您不知情的情况下破坏了您的测试 (Google Chrome might have broken your tests without you even knowing about it) My colleague just discovered that Chrome 58 (released April 19th) has sile…

Java 9 将采用新的版本字符串格式

在现有的版本编码格式使用了两年之后,从Java 9开始,Java版本方案将根据业内软件版本编码的最佳实践进行修改。使用或解析Java版本字符串的应用程序开发人员要注意了,因为这种变化可以会影响他们的应用程序。 正如JEP 223所阐述的那样&#xf…

oracle 表更新表,Oracle 更新表(另一张表)

JUC学习笔记--Thread多线程基础实现多线程的两种方法 java 实现多线程通过两种方式1.继承Thread类 ,2.实现Runnable接口 class Newthead extends Thread{ public void ru ...SharePoint中新创建的Web Application在浏览器中报404错误问题描述:在安装完成SharePoint 2010后,进入…

jQuery(爱前端)

一 jQuery 简介 官网:www.jquery.com 口号:写更少的代码,做更多的事情 jQuery 是一个快速、小型的、特性很多的JS库,它把很多事儿都变得简单。jQuery是免费的、开源的。 jQuery 是 DOM 编程领域的霸主,极大的简化了原生…

跳过 centos部署 webpy的各种坑

用centos部署webpy发现的各种坑: 1、python 版本: 2、中文编码: 3、web模块路径: 在命令行里输入python,能import web,但是网站错误报告一直报告没有找到web模块,说明web模块路径有问题。python…

撰写本文的所有基本React.js概念

Update: This article is now part of my book “React.js Beyond The Basics”.更新:本文现在是我的书《超越基础的React.js》的一部分。 Read the updated version of this content and more about React at jscomplete.com/react-beyond-basics.在jscomplete.com…

CentOS 7 firewalld使用简介

2019独角兽企业重金招聘Python工程师标准>>> Centos升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptables。下面记录如何使用firewalld开放Linux端口: 1.快速使用说明 开启…

简述java语言的特点

简述java语言的特点: ① 简单的特性 ② 面向对象的特性 ③ 分布式处理的特性 ④ 健壮的特性 ⑤ 结构中立的特性 ⑥ 安全特性 ⑦ 可移植的特性 ⑧ 解释的特性 ⑨ 高性能的特性 ⑩ 多线程的特性 转载于:https://www.cnblogs.com/qq1335…

php函数嵌套 作用域,javascript 嵌套的函数(作用域链)_javascript技巧

嵌套的函数(作用域链)当你进行函数的嵌套时,要注意实际上作用域链是发生变化的,这点可能看起来不太直观。你可把下面的代码置入firebug监视值的变化。var testvar window属性;var o1 {testvar:1, fun:function(){alert(o1: this.testvaro1.fun();1o2.f…

【C#-枚举】枚举的使用

枚举是用户定义的整数类型。 namespace ConsoleApplication1 {/// <summary>/// 在枚举中使用一个整数值&#xff0c;来表示一天的阶段/// 如&#xff1a;TimeOfDay.Morning返回数字0/// </summary>class EnumExample{public enum TimeOfDay{Morning 0,Afternoon …

Elixir 初尝试 5 -- 遇见Actor

Actor模型的定义 wiki如是说 The actor model in computer science is a mathematical model of concurrent computation that treats "actors" as the universal primitives of concurrent computation. In response to a message that it receives, an actor can: …

创建外部快照_快照事件:现在如何仅通过拍照即可创建日历事件

创建外部快照by Arjun Krishna Babu通过Arjun Krishna Babu 快照事件&#xff1a;现在如何仅通过拍照即可创建日历事件 (Snap Event: How you can now create calendar events just by taking a picture) Google just published my first Android app, Snap Event, in their P…

一个备份sql server文件.bak还原成两个数据库

一直对这个概念很模糊&#xff0c;今天具体一点。 备份文件只要是正常的.bak文件就好。 数据库>还原数据库 直接填写还原之后的文件名就行。 用一份备份文件还原两个一样的库&#xff0c;只是名称不一样。 转载于:https://www.cnblogs.com/Ly426/p/10209825.html

linux服务器防病毒,Linux系统中你不需要防病毒?_服务器评论-中关村在线

误区4&#xff1a;Linux是无病毒。Linux的安全性这么好&#xff0c;这是否意味着Linux是无病毒吗&#xff1f;现实&#xff1a;Linux是非常安全&#xff0c;并不是没有针对Linux方面的病毒。有许多针对Linux的已知病毒。但是几乎所有的已知病毒对于Linux在本质上都是非破坏性的…

外置接口请求

1. 请求接口 /*** 请求接口** param url* param paramsStr* param type Connection.Method.POST* param heads* return*/ public JSONObject sendUpload(String url, String paramsStr, Connection.Method type, Map<String, String> heads) {//发送上传订单请求Str…