`
阅读更多

==============================================
Me.SetStyle 为什么没有智能感知?
==============================================
DataRowView:当数据显示(例如显示在DataGrid 控件中)时,每一行只显示一种版本。所显示的行是 DataRowView。
DataRowView 可以具有以下四个不同的版本状态之一:Default、Original、Current 和 Proposed。
在针对 DataRow 调用 BeginEdit 之后,任何已编辑的值变成 Proposed 值。在调用 CancelEdit 或 EndEdit 之前,行具有 Original 和 Proposed 版本。如果调用 CancelEdit,则建议版本将被丢弃,该值还原到原始值。如果调用 EndEdit,则 DataRowView 不再具有 Proposed 版本;相反,建议值将变成当前值。默认值只在那些列具有已定义的默认值的行上可用。
==============================================
<Category("Data"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
==============================================
当序列化程序保持设计模式文档的可持续状态时,它通常会向组件的初始化方法中添加代码,以便保持已在设计时设置的属性值。如果尚未设置指示其他行为的特性,大多数基类型都会默认出现此情况。
DesignerSerializationVisibilityAttribute 允许您指示属性值是否为 Visible,是否应在初始化代码中保持,Hidden,是否不应在初始化代码中保持,是否由 Content 组成,它应具有为分配到该属性的对象的每个公共属性(而非隐藏属性)生成的初始化代码。
没有 DesignerSerializationVisibilityAttribute 的成员将被视为具有值为 Visible 的 DesignerSerializationVisibilityAttribute。如果可能,序列化程序会将标记为 Visible 的属性值序列化为该类型。要为特定类型或属性指定自定义序列化,请使用 DesignerSerializerAttribute。
==============================================
Control.SuspendLayout 方法
控件的布局逻辑被挂起,直到调用 ResumeLayout 方法为止。
当调整控件的多个属性时,将先后使用 SuspendLayout 和 ResumeLayout 方法取消多个 Layout 事件。例如,通常先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,最后调用 ResumeLayout 方法以使更改生效。
==============================================
DirectCast 关键字引入类型转换操作。该关键字的使用方法与 CType 关键字相同,如下列所示:

Dim Q As Object = 2.37   ' Requires Option Strict to be Off.
Dim I As Integer = CType(Q, Integer)   ' Succeeds.
Dim J As Integer = DirectCast(Q, Integer)   ' Fails.
这两个关键字都将要转换的表达式作为第一个参数,而将要转换成的类型作为第二个参数。如果未定义表达式的数据类型与第二个参数所指定的数据类型之间的转换,那么这两种转换都会失败。

这两个关键字之间的差别在于:只要定义了表达式与类型之间的有效转换,CType 即可成功,而 DirectCast 则要求对象变量的运行时类型与指定的类型相同。不过,如果表达式的指定类型和运行时类型相同,则 DirectCast 的运行时性能比 CType 的运行时性能好。
===============================================
控件为什么反向添加呢?
            '反向添加
            For i As Integer = al.Count To 0 Step -1
                Controls.Add(DirectCast(al(i), Control))
            Next
===============================================
设置双缓冲与Graphic释放关系,如果做了双缓冲设置不要立刻释放Graphic否则图形没有绘制完成会产生错误。



上边记录的主要是基于代码的学习笔记,后来晚上仔细从结构上进行了一点分析,真是觉得这个控件设计的很巧妙,下边从结构上简单说说。

在整个List上实际上由不同的SectionControl和Spliter控件组成,为什么要用Spliter呢,主要是为了控制每个SectionControl的缩放,这个方法节约了很大的工作量。Spliter的Enabled属性是False的,这样鼠标放上去就没有效果了,如果不看代码这块是很难理解的。

每个SectionControl的处理也很巧妙,首先是在界面上安排了一个PictureBox,用来显示那个“+”“-”的图标,其次,通过画笔来绘制Header和每一个Item,处理的方法很简单。

最关键的是事件的触发过程,SectionControl的OnPaint是基础,通过它向上层控件发送绘制消息,从而带动整个控件的绘制消息驱动。

在上游的图标控制上,实际上也是通过重写绘图来实现的。

现在看整个List实际上是由不同的部分组成,借助绘制事件消息的传递来带动整个界面的绘制,通过重写部分特定函数来扩展List的功能。

当然上边说的还没有涉及到数据处理那块,因为还没有看呢,这里作个笔记以免以后忘掉了。

看代码+写代码+MSDN+GOOGle=最好的学习方式

分享到:
评论

相关推荐

    IssueVision C#2005版

    在IssueVision 2005版中,开发人员可以通过编辑CSS样式来调整控件的颜色、字体、布局等,以适应不同团队的需求和喜好,从而提升工作效率。 此外,IssueVision的代码审核功能是其核心价值之一。该功能帮助开发者发现...

    经典智能客户端应用程序IssueVision

    《经典智能客户端应用程序IssueVision详解》 IssueVision是一款基于智能客户端技术的应用程序,它以其高效、灵活和交互性强的特点,为用户提供了卓越的用户体验。在深入探讨IssueVision之前,我们首先要理解什么是...

    IssueVision2005

    《IssueVision2005:探索SmartClient技术在项目管理中的应用》 IssueVision2005是一款由Microsoft推出的示例代码,旨在帮助开发者深入理解并掌握SmartClient技术。SmartClient技术是微软针对桌面应用程序开发提出的...

    IssueVision for Vs2003

    总的来说,IssueVision for VS2003是VB.NET环境下构建的企业级客户管理系统,其自绘控件的运用和源代码的开放性为开发者提供了丰富的定制可能性。通过理解和掌握这个系统,开发者可以进一步提升在企业级应用开发领域...

    IssueVision 源代码

    VB IssueVisoin Source Code

    taskvision源代码

    通过学习和分析TaskVision的源代码,开发者不仅可以提升C#编程技能,还能了解到.NET Framework的使用和版本迁移的注意事项,对于理解Windows桌面应用开发有极大的帮助。同时,对于想要自定义或扩展TaskVision功能的...

    C#企业级开发案例精解part1

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和 TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    C#企业级开发案例精解part2

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和 TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part6.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part2.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part5.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part4.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part7.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part3.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    美河制作.C#企业级开发案例精解.part1.rar

    IssueVision和TasVision系统是微软公司提供的两个智能客户端的经典范例,其中包括整个应用程序和源代码。从IssueVision和TasVision范例中,可以很清楚地了解整个智能客户端的运行过程、实现原理和软件架构。...

    一个简单的 Silverlight 4 应用程序(MEF+ MVVM+ WCF RIA Services)源代码及安装文件

    "IssueVisionforSilverlightSetup20110630" 和 "IssueVision_Silverlight20110630" 这两个文件名可能分别对应应用程序的安装程序和源代码包。"IssueVision" 很可能是这个示例应用程序的名字,它可能是一个问题跟踪或...

    。net开源项目。net开源项目

    - **简介**:DockManager 控件用于创建类似 Visual Studio 2005 的界面布局。 - **技术**:使用 C# 和 .NET 技术。 - **官网**:[DockManager Control](http://www.codeproj)。 - **特点**:支持窗口的停靠和浮动...

    C#企业级开发案例精解的源代码

    通过分析源代码,我们可以学习如何利用C#来实现这些功能。 1. 数据库交互:C#中常见的数据库访问技术包括ADO.NET、Entity Framework和Dapper等。源代码可能会展示如何使用这些库进行数据查询、事务处理和数据实体...

    Silverlight MVVMLight轻量级框架 官方实例(BUG收集系统)

    这个官方实例是一个基于Silverlight和MVVMLight的BUG收集系统,名为IssueVision.Silverlight。它展示了如何在实际项目中应用MVVMLight框架,以构建一个功能完善的用户界面,用于报告、跟踪和管理软件错误或问题...

Global site tag (gtag.js) - Google Analytics