C#winform重绘机制

utakeiteasy 2016-09-26 11:53:54
1、比如有窗体A 点击button,在click中修改lable的值 ,click执行完毕后界面更新了label的值,这是局部重绘还是整体重绘,为什么发生了重绘,原理是啥

2、对于datagrideview控件,如果某几列数据发生变化,单独处理这几列 与 处理完数据重新绑定哪个更换,为什么?
(这2种操作,前者是对datagrideview进行了整体重绘,还是只是重绘了修改了的部分,后者额?)


求大神解惑,谢谢。
...全文
1226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jvouge 2016-11-16
  • 打赏
  • 举报
回复


只是自绘了DATAGRIDVIEW 的一个单元格, 怎么 颜色像漏了, 跑到表格外面去了。 ??
花开花折 2016-09-26
  • 打赏
  • 举报
回复
引用 楼主 utakeiteasy 的回复:
1、比如有窗体A 点击button,在click中修改lable的值 ,click执行完毕后界面更新了label的值,这是局部重绘还是整体重绘,为什么发生了重绘,原理是啥 2、对于datagrideview控件,如果某几列数据发生变化,单独处理这几列 与 处理完数据重新绑定哪个更换,为什么? (这2种操作,前者是对datagrideview进行了整体重绘,还是只是重绘了修改了的部分,后者额?) 求大神解惑,谢谢。
1:局部 建议看下重绘机制 2:应该也是部分,不太确定。
john_QQ:2335298917 2016-09-26
  • 打赏
  • 举报
回复
如果你有mfc编程经验,就会知道界面的重绘是由控件的编程者决定的。而且重绘的最小矩形也是由编程者决定的。当需要重绘时,为了效率,常常需要确定需要更新的最小矩形。
crystal_lz 2016-09-26
  • 打赏
  • 举报
回复
一个控件 应该什么时候绘制 主要有两个 一个是 系统来确定 这个控件需要绘制 比如 最小化后在最大化 那么此时 系统会发出WM_PAINT 消息来告知控件 你需要重绘了 另一个就是 人为的调用this.Invalidate()或者this.Invalidate(Rectangle)来自己触发一次重绘 对于第一种 那是系统自身的一种行为 不管你是什么控件系统自带的还是自己写的 对于一些操作必然是要重绘界面的 比如刚才我说的最小化后 在最大化 控件隐藏后 在显示 得到焦点 失去焦点 之类的 这种是必然要重绘的 对于第二种 比如我要自己写一个datagridview 那么系统压根就不会知道这个是什么控件 对于系统而言 他只能决定我刚才说的第一种情况来触发控件的绘制 但是我现在像datagrid里面添加了数据 我需要把数据绘制出来 假设我控件提供了Add(方法) 当我调用add时候系统不会知道需要绘制控件 所以我需要自己在Add() 里面添加(this.Invalidate()) 来手动触发一个WM_PAINT消息 而WM_PAINT消息被触发的时候 会执行OnPaint函数 然后在OnPaint中 自己把数据绘制到界面上去 而我需要调用this.Invalidate()或者this.Invalidate(Rectangle) 由我自己来决定
utakeiteasy 2016-09-26
  • 打赏
  • 举报
回复
引用 3 楼 crystal_lz 的回复:
局部还是 全部 这和机智没有半毛钱的关系 完全取决于写代码的人 看他是想全部重绘还是局部重绘 抛开label 这种系统自带的控件不说 假设现在我自己继承Control写一个控件 数据更新的时候 刷新界面 而刷新的代码都是你自己写的 那你说 你是全部刷新还是局部刷新?。。 全部刷新还是局部刷新 由写代码的人自己衡量关系 全部刷新方便但是需要整个控件全部绘制 而局部刷新则需要你自己多写一些代码来确定你需要重绘的区域 然后只绘制指定区域
怎么会没有关系,可能是我问的不太对。label就是系统自带的控件,我就是想知道对于系统控件,我没有去写绘制代码,但是为什么click事件处理完毕后,界面会发生重绘?是系统判断了界面有发生变化主动重绘了,还是click执行完,封装好的系统代码执行了该控件的重绘方法? datagrideview也是系统控件,它的数据发生变化后又是如何触发重绘的呢? 我是这样猜测的:当数据发生变化后,无论我重新给该控件绑定数据还是修改对应行列的数值,实际上修改的是该控件缓存的数据,当重绘时,都是根据缓存的数据整个重绘datagrideview控件。 求大神解惑!
crystal_lz 2016-09-26
  • 打赏
  • 举报
回复
局部还是 全部 这和机智没有半毛钱的关系 完全取决于写代码的人 看他是想全部重绘还是局部重绘 抛开label 这种系统自带的控件不说 假设现在我自己继承Control写一个控件 数据更新的时候 刷新界面 而刷新的代码都是你自己写的 那你说 你是全部刷新还是局部刷新?。。 全部刷新还是局部刷新 由写代码的人自己衡量关系 全部刷新方便但是需要整个控件全部绘制 而局部刷新则需要你自己多写一些代码来确定你需要重绘的区域 然后只绘制指定区域
utakeiteasy 2016-09-26
  • 打赏
  • 举报
回复
up up 求大神解惑
很好的C#培训教程,适合初学者使用 目 录 1 .NET体系结构 7 1.1 什么是.NET Framwork? 7 1.2 .NET Framework的内容 7 1.3 如何用.NET Framework编写应用程序 8 1.4 MSIL和JIT 8 1.5 程序集 9 1.6 托管代码 9 1.7 垃圾回收 9 1.8 链接 10 1.9 实例分析 11 1.10 内容总结 13 1.11 独立实践 14 2 C#基础 15 2.1 面向对象基本概念 15 2.2 变量 18 2.3 常量 22 2.4 预定义数据类型 22 2.5 流控制 28 2.6 数组 37 2.7 命名空间 38 2.8 C#预处理器指令 44 2.9 C#编程规则 46 2.10 内容总结 50 2.11 独立实践 50 3 对象和结构 52 3.1 类和结构 52 3.2 类和成员 53 3.3 构造函数 60 3.4 结构 65 3.5 部分类 68 3.6 内容总结 72 3.7 独立实践 72 4 继承 73 4.1 继承的类型 73 4.2 结构和类 75 4.3 调用函数的基类版本 76 4.4 抽象类和抽象函数 77 4.5 密封类和密封方法 79 4.6 修饰符 80 4.7 接口 81 4.8 内容总结 86 4.9 独立实践 86 5 委托与事件 88 5.1 事件的原理 88 5.2 简单的自定义事件 89 5.3 预定义事件处理机制 92 5.4 内容总结 100 5.5 独立实践 100 6 运算符和类型强制转换 101 6.1 运算符 101 6.2 运算符的简化操作 102 6.3 类型的安全性 107 6.4 类型转换 108 6.5 装箱和拆箱 111 6.6 对象的相等比较 112 6.7 引用类型的相等比较 112 6.8 运算符重载 114 6.9 运算符的工作方式 114 6.10 用户定义的数据类型转换 118 6.11 执行用户定义的类型转换 119 6.12 多重数据类型转换 126 6.13 内容总结 130 6.14 独立实践 131 7 字符串与正则表达式 132 7.1 System.String类 132 7.2 StringBuilder成员 135 7.3 字符串的格式化 138 7.4 正则表达式概述 142 7.5 内容总结 149 7.6 独立实践 150 8 集合 151 8.1 集合 151 8.2 索引器 152 8.3 集合接口 155 8.4 字典 157 8.4.1 现实生活中的字典 158 8.4.2 .NET中的字典 158 8.4.3 字典的工作情况 160 8.5 内容总结 167 8.6 独立实践 167 9 错误与异常 168 9.1 错误和异常 168 9.2 捕获异常 170 9.3 System.Exception属性 177 9.4 嵌套的 try块 178 9.5 用户定义的异常类 180 9.6 内容总结 189 9.7 独立实践 189 10 内存管理与指针 190 10.1 后台内存管理 190 10.2 值数据类型 190 10.3 引用数据类型 192 10.4 垃圾收集 194 10.5 释放未托管的资源 195 10.6 析构函数 195 10.7 IDisposable接口 196 10.8 实现IDisposable接口和析构函数 198 10.9 不安全的代码 199 10.10 指针 200 10.11 使用指针优化性能 213 10.12 内容总结 217 11 泛型 218 11.1 泛型的概念 218 11.2 使用泛型 219 11.3 可空类型 219 11.4 运算符和可空类型 220 11.5 System.Collections.Generic命名空间 227 11.6 定义泛型类 237 11.7 default关键字 239 11.8 约束类型 240 11.9 从泛型类中继承 247 11.10 泛型运算符 248 11.11 泛型结构 250 11.12 定义泛型接口 250 11.13 定义泛型方法 251 11.14 定义泛型委托 253 11.15 独立实践 253 12 反射 254 12.1 定制特性 254 12.2 编写定制特性 255 12.3 指定特性参数 258 12.4 VectorClass程序集 261 12.5 反射 263 12.6 查找定制特性 269 12.7 内容总结 273 13 线程 274 13.1 线程 274 13.2 多线程应用程序 275 13.3 线程的处理 276 13.4 线程的优先级 282 13.5 同步 283 13.6 同步问题 285 13.7 内容总结 288 14 Winform基本概念 289 14.1 .NET Windows应用程序开发 289 14.2 .NET框架类库简介 289 14.3 事件和事件处理程序 290 14.4 事件参数 290 14.5 Windows 应用程序 290 14.6 窗体属性、方法和事件 291 14.7 this 关键字 292 14.8 控件概念 292 14.9 各种类型控件 292 14.10 控件的一些通用属性 294 14.11 标签、文本框、按钮控件简介 295 14.12 列表框控件简介 296 14.13 复选列表框 296 14.14 组合框 296 14.15 内容总结 302 15 Winform控件 303 15.1 控件分类 303 15.2 在窗体之间建立链接 307 15.3 应用程序的启动和关闭 308 15.4 内容总结 308 16 高级用户界面 309 16.1 打印控件的使用 309 16.2 PrintDocument组件 309 16.3 PrintPreviewControl组件 310 16.4 PrintDialog 组件 310 16.5 PrintPreviewDialog组件 311 16.6 PageSetUpDialog控件 311 16.7 对话框 311 16.8 通用对话框 312 16.9 OpenFileDialog控件 312 16.10 SaveFileDialog控件 312 16.11 FontDialog控件 312 16.12 ColorDialog控件 312 16.13 MessageBox消息框 313 16.14 WinForms 中的可视效果 314 16.15 内容总结 315 17 MDI应用程序 316 17.1 SDI程序 316 17.2 MDI程序 316 17.3 MenuStrip和ToolStripMenuItem 317 17.4 toolStrip控件简介 318 17.5 StatusStrip控件 320 17.6 创建对话框 320 17.7 内容总结 321 18 ADO.NET编程 322 18.1 简介 322 18.2 ADO.NET 的优点 322 18.3 ADO.NET 结构 324 18.4 ADO.NET 的基本组件 325 18.5 DataReader 328 18.6 获取单个值 328 18.7 修改数据库中的数据 329 18.8 从SQL Server获取XML数据 329 18.9 DataAdapter 330 18.10 数据集:DataSet 330 18.11 DataTable 330 18.12 DataView 332 18.13 关系 332 18.14 数据绑定 333 18.15 DataRow 简介 335 18.16 操纵数据源中的值 336 18.17 内容总结 336 19 GDI+ 编程 337 19.1 理解绘图规则 337 19.2 测量坐标和区域 341 19.3 绘制可滚动的窗口 343 19.4 颜色 348 19.5 画笔和钢笔 351 19.6 绘制图形和线条 352 19.7 显示图像 355 19.8 绘制文本 357 19.9 字体和字体系列 359 19.10 内容总结 363 20 自定义控件 364 20.1 添加事件处理程序 368 20.2 添加更多的属性 370 20.3 内容总结 372 21 部署与安装 373 21.1 部署的设计 373 21.2 无干涉部署 387 21.3 内容总结 394 22 ASP.NET与Web窗口简介 395 22.1 应用程序方案 395 22.2 Web 应用程序开发周期 399 五个对象实现了服务器端的请求 403 22.3 ASP.NET 的演变 404 22.4 Global.asax 文件 405 22.5 发布网站 408 22.6 内容总结 408 23 ASP.NET中的内置对象 409 23.1 ASP.NET页面 409 23.2 虚拟目录 421 23.3 内容总结 423 24 Web服务器控件 424 24.1 Web 控件 424 24.2 复杂控件 429 24.3 内容总结 431 25 HTML控件 432 25.1 服务器控件 432 25.2 HTMLForm控件 432 25.3 Web服务器控件优缺点 433 25.4 HTML服务器控件优缺点 433 25.5 使用服务器控件设计页面建议 433 25.6 内容总结 439 26 深入服务器对象 440 26.1 Global.asax文件简介 441 26.2 Application 对象 446 26.3 HttpServerUtility类和Server对象 446 26.4 HttpSessionState类和Session对象 448 26.5 内容总结 449 27 ADO.NET WEB应用 450 27.1 回顾ADO.NET 450 27.2 模板概念 464 27.3 ASP.NET 中的数据处理 465 27.4 内容总结 466 28 WEB服务器基础 467 28.1 ASP.NET Web 服务 467 28.2 编写简单的 Web 服务 468 28.3 内容总结 470 28.4 独立实践 470 29 用户控件 471 29.1 用户控件开发 471 29.2 内容总结 479 29.3 独立实践 480 30 Web部署 481 30.1 使用XCOPY部署 481 30.2 使用Visual studio的Copy Web Site功能部署 482 30.3 使用Visual Studio的Precompilation预编译部署 482 30.4 内容总结 483 30.5 独立实践 484
高仿QQ2013局域通讯版源码 实现功能: 1.高仿界面100%,让你分辨不清楚那个才是真的QQ。 2.四边阴影,毛边效果。 3.密码键盘输入,防护更贴心。 4.圆角窗体,润滑如圆。 5.登录主界面后,有登陆提示弹窗。 6.皮肤随心变:拖动任意一张图片至主界面,就可以改变皮肤。 7.皮肤色调获取:改变皮肤的同时,将计算图片色调,再将其运用到窗体背景色。 8.皮肤尾部渐变:如真QQ一般,上下左右方均可实现,渐变皮肤。 9.皮肤拖拉方向:可以选择皮肤在拉伸的时候,粘着哪一边拖拉。 10.GDI+界面重绘,处理消息机制,移动和拉伸是否启用只需要设置一个属性的事就可以解决。 11.界面渐变闪现和闪退:不再像平凡的突然出现,采用API渐变机制,渐渐出现和消失。 12.完美好友列表,可添加上千好友,不卡不掉线,还可以拖动好友到其他分组。 13.好友悬浮至头像可以查看详细资料卡。 14.窗口可调渐变后透明度:让窗体看起来更像是Vista玻璃窗体风格。 15.聊天窗口可发送图片,文件,表情,还有震动。 16.聊天窗口输入框和显示框都采用半透明技术,和真的QQ一样漂亮,有点闪烁,但是不影响整体使用。 17.更是有和QQ如出一辙的QQ截图。QQ截图采用网上好友开发的截图,仿真度也达到100%。 18.聊天窗口,可以调字体颜色和字体样式等多项功能。 20.界面库含有多项功能与控件需要你们自己去挖掘,加油吧。 21...更多功能,请自行发现。 注意: 开发环境为Visual Studio 2010 非原著

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧