WinForm界面開發論(一)控件基本論

    用.net開發windows程序,離不開控件的編寫,微軟的那堆控件裏面,只提供了一些比較基本和典型的界面控件,對於現在五彩繽紛的軟件,默認的控件集已很難滿足用戶的需求。既然是這樣,讓我們自己動手來創造自己的控件吧!

  1. 屬性:我們做.net開發的,通常都會用鼠標在屬性框裏面設計控件,所以,一般你看到拼命敲鍵盤的,不要以爲看到了代碼超人,轉過去看清楚點,在Q着呢!.net的設計器很好,所以不要什麼都寫在代碼裏面,最重要要做到設計器可視化!

    - 我們首先建立一個WindowApplication,在建一個WindowsControlLibrary,一般控件和窗口最好分開,目的當然是爲了以後的可重用性了。

    - 這裏我們以一個MyButton控件爲例子,在WindowsControlLibrary裏面建立一個叫MyButton的UserControl,上面放一個PictrueBox,再放一個Lable,如下圖:


    - 我們假設要做一個屬性,用來設置下面文字的文本和顏色,代碼如下:
    [Description("按鈕的文本顯示")]
            public string MyButtonText
            {
                set
                {
                    this.label1.Text = value;
                }
                get
                {
                    return this.label1.Text;
                }
            }
    上面[Description("按鈕的文本顯示")]聲明瞭該屬性的作用,能在設計器屬性框下面的說明裏面看到,再看看設置文本顏色的代碼:
    [Description("按鈕的文本顏色")]
            
    public Color MyButtonTextColor
            
    {
                
    set
                
    {
                    
    this.label1.ForeColor = value;
                }

                
    get
                
    {
                    
    return this.label1.ForeColor;
                }

            }
    我們用了Color類,那麼,在屬性框裏面,能夠使用和其它控件選擇顏色時一樣的選擇窗口,非常方便吧!如果你覺得不夠,或者類型是你自己定義的,那麼還可以直接寫一個設置窗口,後面我將會深入講解!我們做完這些後,效果如下:


  2. 事件:事件是C#一個很重要的概念,因爲他是完全面向對象的開發語言,所以在需要對象之間的調用和回調的各種方式,而事件就是最常見的回調機制了。下面,我們爲這個控件寫一個例子MouseOver的事件,當鼠標放在該控件時發生。
    public delegate void dMouseOver(System.DateTime mouseOverTime);
            
    public event dMouseOver MouseOver;

            
    private bool MouseOverIsSend = false;

            
    private void MyButton_MouseEnter(object sender, EventArgs e)
            
    {
                
    if (MouseOver != null)
                
    {
                    
    if (!MouseOverIsSend)
                    
    {
                        
    this.MouseOver(DateTime.Now);
                        
    this.MouseOverIsSend = true;
                    }

                }

            }


            
    private void MyButton_MouseLeave(object sender, EventArgs e)
            
    {
                MouseOverIsSend 
    = false;
            }

    把label的MouseEnter和PictureBox的MouseEnter事件都下拉,選擇上面這個事件,這樣,我們在設計器裏面又能看到我們定義的事件羅!
發佈了18 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章