专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » tprogressbar:C#组件设计技术兼谈TProgressBar实现 »正文

tprogressbar:C#组件设计技术兼谈TProgressBar实现

来源: 发布时间:星期五, 2009年1月9日 浏览:18次 评论:0
  直用Delphi做应用系统比较而言VS 2005提供组件不够灵活美观例如进度条ProgressBar样式过于单于是利用假期时间学习学习C#组件设计技术搞个灵活点进度条组件设计要求:既可以选择进度条式样也可以显示进度数字

  直接从ProgressBar派生类是行不通ProgressBar根本不允许override核心思路方法OnPa用“how to”、“progress”、“smooth”关键字Google找到最权威代码文章:http://support.microsoft.com/kb/323116其基本思路如下:

  1)派生自UserControl重写OnPa思路方法

  2)在Value变化时捕获到变化区域UpdateRect只对该区域标记为无效即:Invalidate(UpdateRect)这样做消除了那种快速变化时背景(白色)闪动感觉如果直接刷新当前Value值对应左边全部区域将有空白闪动现象

  按上述思路编写进度条确比自己做效果好多了但存在如下问题:

  1)原文中忘记了Update思路方法即在Update(UpdateRect)后应立即Control控件Update思路方法;

  2)实现了Smooth进度条但也丢失了ProgressBarBlock美观;

  3)如果直接在OnPa思路方法中显示进度条百分比必须Invalidate文字区域但使用时还是有小块背景(白色)闪动感觉不够圆满

  多次尝试后发现直接从Label组件派生既可以显示数字、还可直接Invalidate全部左边区域且无闪动感觉比上文实现简单主要代码如下:

protected override void _disibledevent= ContentAlignment.MiddleCenter; // TextAlign 是 Designer 属性
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] // 不在窗体中产生该属性语句
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] // 在属性编辑器中不显示
public bool AutoSize
{
get
{
base.AutoSize; // 在构造中设置值、屏蔽该属性
}
}
}




0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: