zoukankan      html  css  js  c++  java
  • 艾伟:WinForm控件开发总结(一)开篇 狼人:

          我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件。在自己开发WinForm控件的时候,没有太多可以借鉴的资料,只能盯着MSDN使劲看,还好总算有些收获。现在我会把这些经验陆陆续续的总结出来,写成一系列方章,希望对看到的朋友有所帮助。今天我来开个头。

          其实开发WinForm控件并不是很复杂,.NET为我们提供了丰富的底层支持。如果你有MFC或者API图形界面的开发经验,那么学会WinForm控件可能只需要很短的时间就够了。

          自己开发的WinForm控件通常有三种类型:复合控件(Composite Controls),扩展控件(Extended Controls),自定义控件(Custom Controls)。  

          复合控件:将现有的各种控件组合起来,形成一个新的控件,将集中控件的功能集中起来。

          扩展控件:在现有控件的控件的基础上派生出一个新的控件,为原有控件增加新的功能或者修改原有控件的控能。

          自定义控件:直接从System.Windows.Forms.Control类派生出来。Control类提供控件所需要的所有基本功能,包括键盘和鼠标的事件处理。自定义控件是最灵活最强大的方法,但是对开发者的要求也比较高,你必须为Control类的OnPaint事件写代码,你也可以重写Control类的WndProc方法,处理更底层的Windows消息,所以你应该了解GDI+和Windows API。    
          本系列文章主要介绍自定义控件的开发方法。
          控件(可视化的)的基本特征:
          1.       可视化。
          2.       可以与用户进行交互,比如通过键盘和鼠标。
          3.       暴露出一组属性和方法供开发人员使用。
          4.       暴露出一组事件供开发人员使用。
          5.       控件属性的可持久化。
          6.       可发布和可重用。
          这些特征是我自己总结出来,不一定准确,或者还有遗漏,但是基本上概括了控件的主要方面。
          接下来我们做一个简单的控件来增强一下感性认识。首先启动VS2005创建一个ClassLibrary工程,命名为CustomControlSampleVS会自动为我们创建一个solution与这个工程同名,然后删掉自动生成的Class1.cs文件,最后在Solution explorer里右键点击CustomControlSample工程选择Add->Classes…添加一个新类,将文件的名称命名为FirstControl。下边是代码:
          

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.ComponentModel;
    using System.Drawing;

    namespace CustomControlSample
    {
        
    public class FirstControl : Control
        
    {

            
    public FirstControl()
            
    {

            }


            
    // ContentAlignment is an enumeration defined in the System.Drawing
            
    // namespace that specifies the alignment of content on a drawing 
            
    // surface.
            private ContentAlignment alignmentValue = ContentAlignment.MiddleLeft;

            [
            Category(
    "Alignment"),
            Description(
    "Specifies the alignment of text.")
            ]
            
    public ContentAlignment TextAlignment
            
    {

                
    get
                
    {
                    
    return alignmentValue;
                }

                
    set
                
    {
                    alignmentValue 
    = value;

                    
    // The Invalidate method invokes the OnPaint method described 
                    
    // in step 3.
                    Invalidate();
                }

            }



            
    protected override void OnPaint(PaintEventArgs e)
            
    {
                
    base.OnPaint(e);
                StringFormat style 
    = new StringFormat();
                style.Alignment 
    = StringAlignment.Near;
                
    switch (alignmentValue)
                
    {
                    
    case ContentAlignment.MiddleLeft:
                        style.Alignment 
    = StringAlignment.Near;
                        
    break;
                    
    case ContentAlignment.MiddleRight:
                        style.Alignment 
    = StringAlignment.Far;
                        
    break;
                    
    case ContentAlignment.MiddleCenter:
                        style.Alignment 
    = StringAlignment.Center;
                        
    break;
                }


                
    // Call the DrawString method of the System.Drawing class to write   
                
    // text. Text and ClientRectangle are properties inherited from
                
    // Control.
                e.Graphics.DrawString(
                    Text,
                    Font,
                    
    new SolidBrush(ForeColor),
                    ClientRectangle, style);

            }

        }

    }

       晚了,今天写到这里,下一篇文章介绍怎样使用我们写好的控件。

  • 相关阅读:
    DataStructure 插入排序(Insertion Sort)
    DataStructure 冒泡排序(Bubble Sort)
    Flex【原创】BitmapData高级渲染、实例展示、源码下载
    Flex 运用ProductManager重新启动Air程序
    DataStructure 按位运算方法
    Flex【原创】Air调用本地exe文件完成截图功能
    JS鼠标移动切换图片
    Jquery在线引用地址:
    css 使div垂直、水平居中
    声音播放解决方案(C#)
  • 原文地址:https://www.cnblogs.com/waw/p/2156854.html
Copyright © 2011-2022 走看看