3月3日 winform 470多例界面特效的源碼

轉自http://blog.sina.com.cn/s/blog_b009eb330102vly1.html

窗體與界面設計... 9html

實例001  帶歷史信息的菜單    10數據庫

實例002  菜單動態合併    12編程

實例003  像開始菜單同樣漂亮的菜單... 14windows

實例004  任務欄托盤菜單    15數組

實例005  能夠拉伸的菜單界面    16瀏覽器

實例006  菜級聯菜單    18網絡

1.2  工具欄設計... 19框架

實例007  帶帶背景的工具欄    19dom

實例008  帶浮動工具欄    20ide

實例009  在帶下拉菜單的工具欄... 21

實例010  在具備提示功能的工具欄... 22

實例011  在狀態欄中顯示檢查框... 23

實例012  帶進度條的狀態欄    25

實例013  狀態欄中加入圖標    26

實例014  OutLook界面    27

實例015  帶帶導航菜單的主界面... 29

實例016  圖形化的導航界面    32

實例017  菜類QQ的程序界面    35

實例018  相似windows xp的程序界面... 38

實例019  以圖形按鈕顯示的界面... 42

實例020  以樹形顯示的程序界面... 44

實例021  動態按鈕的窗體界面    46

實例022  非矩形窗體    50

實例023 創建字體形狀窗體    52

實例024 控件隨窗體自動調整    54

實例025 帶分隔欄的窗體    55

實例026 隨機更換主界面背景    56

實例027 自動啓動的多媒體光盤程序... 57

實例028 爲觸摸屏程序添加虛擬鍵盤... 59

實例029 半透明漸顯窗體    61

實例030 窗口顏色的漸變    63

實例031 窗體中的滾動字幕    65

實例032 動畫顯示窗體    67

實例033 製做閃爍的窗體    69

實例034 直接在窗體上繪圖    70

實例035 動畫形式的程序界面    73

實例036 使窗體標題欄文字右對齊... 75

實例037 沒有標題欄可義改變大小的窗口... 76

實例038 設置窗體在屏幕中的位置... 77

實例039 始終在最上面的窗體    78

實例040 限制窗體大小    79

實例041 獲取桌面大小    81

實例042 在窗口間移動按扭    82

實例043 如何實現Office助手    84

實例044 在關閉窗口前加入確認對話框... 85

實例045 使用任意組件拖動窗體... 88

實例046 修改提示字體及顏色    89

實例047 如何爲MDI類型窗體設置背景圖片... 91

實例048 向提示框中添加圖標    93

實例418 經過串口發送數據    95

實例419 經過串口關閉對方計算機... 98

實例420 密碼寫入與讀出加密狗... 101

實例421 使用加密狗進行身份驗證... 105

實例422 向IC卡中寫入數據    107

實例423 讀取IC卡中的數據    113

實例424 利用IC卡製做考勤程序... 116

實例425 簡易視頻程序    119

實例426 攝像頭監控錄像    125

實例427 超市攝像頭定時監控系統... 127

實例428 語音卡電話呼叫系統    132

實例429 客戶來電查詢系統    141

實例430 語音卡實現電話錄音    144

實例431 利用短信貓收發短信息... 147

實例432 利用短信遠程關閉計算機... 155

實例433 短信息採集菸草銷售數據... 159

實例434 「春晚」節目評比短信息互動平臺... 164

實例435 條形碼掃描器銷售商品... 167

實例436 利用神龍卡製做練歌房程序... 169

實例463 數據加密技術    174

實例464 文本文件加密與解密    177

實例465 利用圖片加密文件    188

實例466 如何編程修復Access數據庫... 194

實例467 訪問帶驗證模式的Sqlserver 2000數據庫... 197

實例468 利用INI文件對軟件進行註冊... 201

實例469 利用註冊表設計軟件註冊程序... 204

實例470 利用網卡序列號設計軟件註冊程序... 208

實例471 根據cpu序列號、磁盤序列號設計軟件註冊程序... 214

窗體與界面設計

 

1.1  菜單應用實例

菜單是程序開發中常用的界面元素,合理利用菜單不但可使用戶很是方便的操做程序的功能,更能使效率提升,適應人性化的潮流。下面經過幾個應用實例,介紹菜單設計的方法和技術。

 

實例001  帶歷史信息的菜單

實例說明

在開發圖紙管理軟件時,要求在菜單上記錄用戶最近打開的檔案或圖紙,以方便下次使用。如圖1.1所示,單擊「文件」菜單下的「打開文件」子菜單,打開須要查閱的圖紙。下次運行該軟件時,上次打開的文件名記錄到「文件」菜單的歷史菜單中,選擇該菜單,便可打開相應的圖紙文件。

技術要點

要實現保存最近打開的文件,能夠將在菜單中最近打開文件的文件名和路徑保存到事先創建的*.ini文件中,系統啓動時讀取*.ini中的數據創建數組菜單,便可實現顯示歷史菜單的功能。

注意:要創建一個帶歷史信息的菜單,必須首先添加一個MenuStrip菜單控件,並將主窗體的IsMdiContainer屬性設爲True。

實現過程

(1)建立一個項目,將其命名爲Ex01_01,默認窗體爲Form1。

(2)從工具箱中向Form1窗體添加MenuStrip控件,同時向窗體添加OpenFileDialog控件。建立一個「文件」主菜單,在其下面建立打開、關閉全部、退出等菜單選項。

(3)主要程序代碼。

將打開文件路徑寫入INI文件的實現代碼以下:

        private void 打開ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            openFileDialog1.FileName = "";

            this.openFileDialog1.ShowDialog();

            StreamWriter s = new StreamWriter(address + "\\Menu.ini", true);

            s.WriteLine(openFileDialog1.FileName);//寫入INI文件

            s.Flush();

            s.Close();

            ShowWindows(openFileDialog1.FileName);

        }

讀取INI文件並將信息加入菜單的實現代碼以下:

      private void Form1_Load(object sender, EventArgs e)

        {

            StreamReader sr = new StreamReader(address + "\\Menu.ini");

            int i = this.文件ToolStripMenuItem.DropDownItems.Count-2;

            while (sr.Peek()>=0)//讀取INI文件

            {

                ToolStripMenuItem menuitem = new ToolStripMenuItem(sr.ReadLine());

                this.文件ToolStripMenuItem.DropDownItems.Insert(i, menuitem);

                i++;

                menuitem.Click += new EventHandler(menuitem_Click);

            }

            sr.Close();

        }

自定義方法ShowWindows()用來加載背景圖片並顯示窗體,實現代碼以下:

        public void ShowWindows(string fileName)

        {

            Image p = Image.FromFile(fileName);

            Form f = new Form();

            f.MdiParent = this;

            f.BackgroundImage = p;

            f.Show();

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  記錄用戶操做菜單日誌的程序。在用戶單擊菜單時,把用戶、菜單命令和菜單對應功能寫入保存菜單日誌的INI文件。若是須要查看日誌,只需打開INI文件。

  經過數據庫保存菜單歷史信息的程序。

  菜單使用頻率的程序。把用戶使用菜單的數據信息保存到數據庫中,而後統計用戶使用菜單的頻率,並根據此頻率調整菜單的顯示順序。

 

實例002  菜單動態合併

實例說明

在程序中常用彈出菜單,而且一個窗體中能夠存在多個彈出菜單。開發過MDI窗體的讀者可能都知道,當MDI子窗體最大化時,子窗體和主窗體的菜單可以自動的合併。這是如何實現的呢?本例實現了將兩個彈出菜單動態的合併成一個彈出菜單的功能。實例效果如圖1.2所示。

技術要點

C# 2.0中已經將彈出菜單封裝爲Context MenuStrip控件,利用該控件中的Items對象能夠操做菜單中的菜單項。該對象是ToolStripMenuItem類型,使用Items.AddRange( )方法能夠向彈出菜單中添加菜單項,該方法原型以下。

public void AddRange (

    ToolStripItem[] toolStripItems

)

參數說明以下。

l     toolStripItems:控件的數組。

實現過程

(1)建立一個項目,將其命名爲Ex01_02,默認窗體爲Form1。

(2)從工具箱中向Form1窗體添加一個MenuStrip控件用來設計菜單;同時向窗體添加ContextMenuStrip控件用來設計右鍵菜單;選中MenuStrip控件建立一個「打開子窗體」主菜單,而後選中ContextMenuStrip控件爲其添加子項。

(3)爲程序添加一個窗體,默認名爲Form2,同時向窗體添加ContextMenuStrip控件用來設計右鍵菜單,而後選中ContextMenuStrip控件爲其添加子項。

(4)主要程序代碼。

        private void 打開自窗體ToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Form2 f = new Form2();

            f.MdiParent = this;

            f.Show();//顯示子窗體

            f.Resize += new EventHandler(f_Resize);

        }

        void f_Resize(object sender, EventArgs e)

        {

            Form2 f = (Form2)sender;

            ToolStripMenuItem item = new ToolStripMenuItem();

            for (int i = 0; i < f.contextMenuStrip2.Items.Count; )//合併菜單

            {

                item.DropDownItems.Add(f.contextMenuStrip2.Items[i]);

            }

            this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {

            item});

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  讓右鍵菜單在子窗體中顯示。

  讓右鍵菜單在主窗體和子窗體中同時顯示。

 

實例003  像開始菜單同樣漂亮的菜單

實例說明

Windows的開始菜單很是的獨特,在菜單的旁邊有一條豎着的彩條,彩條中還寫着文字。這種獨特的菜單可以使程序的界面看起來更加的漂亮。本例中就實現了這種菜單,運行本例彈出「打開菜單」時,就會看到菜單的左邊有一個紫色的彩條。實例效果如圖1.3所示。

技術要點

在C# 2.0中,MenuStrip控件中的子項ToolStripMenuItem已經包括了左側的彩條,實現像開始菜單同樣的菜單很是容易,不像在其餘計算機語言的開發環境中,須要調用API才能夠實現。若是想改變左側豎着的彩條,只要給對應的菜單項設置相應的圖片便可。

注意:若是要在左側彩條顯示文字,只要在對應的圖片上加入文字便可。

實現過程

(1)建立一個項目,將其命名爲Ex01_03,默認窗體爲Form1。

(2)從工具箱中向Form1窗體添加MenuStrip控件。

(3)爲MenuStrip控件添加相應的子項。

(4)爲子項添加相應的圖片。

觸類旁通

根據本實例,讀者能夠實現如下功能。

  將菜單元設置成不一樣的格式(如圖片、文字等)。

  在菜單左側播放動畫。

 

實例004  任務欄托盤菜單

實例說明

有一些軟件一般只是在後臺運行,這些進程大部分時間不顯示用戶界面。可經過單擊任務欄狀態通知區域的圖標來訪問的病毒防禦程序就是一個示例。Windows窗體中的NotifyIcon控件一般用於顯示在後臺運行的進程的圖標,本實例利用該控件製做了一個任務欄托盤菜單。實例效果如圖1.4所示。

技術要點

要實現程序啓動時出如今系統托盤中。必需要爲窗體添加NotifyIcon 控件和ContextMenuStrip控件。

注意:必須爲NotifyIcon 控件的Icon屬性設置圖標。

實現過程

(1)建立一個項目,將其命名爲Ex01_04,默認窗體爲Form1。

(2)向Form1窗體添加NotifyIcon 控件和ContextMenuStrip控件,併爲ContextMenuStrip控件添加子項。

(3)選擇NotifyIcon 控件,在其屬性窗口中將ContextMenuStrip屬性設置爲添加到窗體上的ContextMenuStrip控件,併爲Icon屬性設置圖片。

觸類旁通

根據本實例,讀者能夠開發如下程序。

  程序啓動時不出現界面,直接出如今系統托盤中運行的後臺程序。

  程序啓動時不出如今任務欄中。

 

實例005  能夠拉伸的菜單界面

實例說明

若是管理程序功能菜單很是多,而用戶只使用一些經常使用菜單,這時,能夠將主菜單項下的不經常使用菜單隱藏起來。此種顯示方式相似於對菜單進行拉伸。使用時,只需單擊展開菜單,便可顯示相應菜單功能。運行本例,效果如圖1.5所示。

技術要點

要實現能夠拉伸的菜單,關鍵是要使用一個開關變量,同時調用ShowDropDown()方法,顯示操做後的結果。下面詳細介紹一下該方法。

ShowDropDown()方法用來顯示與此ToolStripDrop DownItem關聯的ToolStripDropDownItem控件。其語法結構以下:

public void ShowDropDown ()

另外,用ShowDropDown()方法還能夠顯示已由 DropDown 屬性設置的下拉控件。

注意:必須設置開關變量的初值。

實現過程

(1)建立一個項目,將其命名爲Ex01_05,默認窗體爲Form1。

(2)從工具箱中向Form1窗體添加MenuStrip控件,選中MenuStrip控件爲其添加子項。

(3)雙擊「展開(關閉)子項」爲其雙擊事件添加處理代碼。

(4)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            //初始設置下面的菜單隱藏

            this.設置密碼ToolStripMenuItem.Visible = false;

            this.添加用戶ToolStripMenuItem.Visible = false;

            this.忘記密碼ToolStripMenuItem.Visible = false;

            this.修改密碼ToolStripMenuItem.Visible = false;

            this.員工錄入ToolStripMenuItem.Visible = false;

        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)

        {

            switch  (i)

            {

                case 1:

                this.設置密碼ToolStripMenuItem.Visible = false;

                this.添加用戶ToolStripMenuItem.Visible = false;

                this.忘記密碼ToolStripMenuItem.Visible = false;

                this.修改密碼ToolStripMenuItem.Visible = false;

                this.員工錄入ToolStripMenuItem.Visible = false;

                i = 2;

                this.操做ToolStripMenuItem.ShowDropDown();

                break;

                case 2:

                this.設置密碼ToolStripMenuItem.Visible = true;

                this.添加用戶ToolStripMenuItem.Visible = true;

                this.忘記密碼ToolStripMenuItem.Visible = true;

                this.修改密碼ToolStripMenuItem.Visible = true;

                this.員工錄入ToolStripMenuItem.Visible = true;

                i = 1;

                this.操做ToolStripMenuItem.ShowDropDown();

                break;

           }

        }

觸類旁通

根據本實例,讀者能夠開發如下功能。

  製做顯示\隱藏工具欄。

  合併菜單欄。

 

實例006  菜級聯菜單

實例說明

若是管理程序功能菜單很是多,一些功能中又包括許多子功能,這時可使用級聯菜單來組織系統的各個功能。實例運行結果如圖1.6所示。

圖1.6  級聯菜單

技術要點

製做級聯菜單須要使用MenuStrip控件。

注意:在使用級聯菜單時最好不要超過5層,不然用戶在使用時會很不方便。

實現過程

(1)建立一個項目,將其命名爲Ex01_06,默認窗體爲Form1。

(2)在Form1窗體添加MenuStrip控件,選中MenuStrip控件爲其添加子項和級聯子項。

觸類旁通

根據本實例,讀者能夠開發如下功能。

  大型系統的功能導航。

  在窗體四周再增長菜單欄。

 

1.2  工具欄設計

在菜單欄中將經常使用的菜單命令以工具欄按鈕的形式顯示,並做爲快速訪問方式。工具欄位於菜單欄的下方,由許多命令按鈕組成,每一個命令按鈕上都有一個形象的小圖標,以標識命令按鈕的功能。因爲工具欄這種直觀易用的特色,使其已成爲Windows應用程序的標準界面。

 

實例007  帶帶背景的工具欄

實例說明

工具欄是窗體的組成部分之一,工具欄中的按鈕能夠設定完成一些較爲經常使用或重要的功能,本例中設計了一個工具欄,而且爲該工具欄做了一些修飾,使工具欄帶有背景。背景圖案能夠透過按鈕顯示,效果如圖1.7所示。

技術要點

工具欄中的背景是一幅圖片,在運行時應該將該圖片繪製到工具欄上,在.NET 2.0中,只需將工具欄按鈕的BackGroundImage的屬性設置爲對應的圖片便可。

實現過程

(1)建立一個項目,將其命名爲Ex01_07,默認窗體爲Form1。

(2)從工具箱中爲Form1窗體添加ToolStrip控件,併爲工具欄添加相應的按鈕。

(3)爲工具欄的按鈕設置相應的BackGroundImage屬性,相應的的圖片就會變成按鈕的背景。

觸類旁通

根據本實例,讀者能夠開發如下功能。

  製做一個帶動畫效果的工具欄。

  製做一個自定義樣式的工具欄。

 

實例008  帶浮動工具欄

實例說明

一般狀況下,窗體顯示在屏幕的中心。對於使用頻率很是高的軟件,一般放在屏幕上端以浮動工具欄形式顯示。下面經過實例介紹浮動工具欄的設計方法。運行程序,程序能夠停在屏幕的任何位置,當窗體失去焦點後,窗體將自動隱藏。效果如圖1.8所示。

技術要點

窗體是否要隱藏,重要的是要判斷在操做中,經過窗體的Focused屬性,是否能夠肯定窗體有焦點。在窗體有焦點時,該窗體正在被操做,這時須要徹底顯示在屏幕當中,若是窗體沒有焦點,經過設置窗體到屏幕的高度,來肯定窗體的隱藏部分。下面詳細介紹一下Focused屬性。

Focused屬性用來獲取一個值,該值指示控件是否有輸入焦點。其語法結構以下:

public virtual bool Focused { get; }

l     屬性值:若是控件有焦點,則爲True;不然爲False。

實現過程

(1)建立一個項目,將其命名爲Ex01_08,默認窗體爲Form1。

(2)從工具箱中爲Form1窗體添加Panel控件,併爲Panel控件添加相應的背景圖片。

(3)在Panel上添加兩個Label控件,並將其Text屬性設置爲「打開」和「關閉」,同時把兩個Label控件的背景顏色設置爲透明。

(4)主要程序代碼。

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (this.Focused == false)

            {

                this.Top = -30;

            }

        }

        private void label2_Click(object sender, EventArgs e)

        {

            this.Close();

        }

        private void panel1_MouseClick(object sender, MouseEventArgs e)

        {

            this.Top = 60;

        }

觸類旁通

根據本實例,讀者能夠開發如下功能。

  製做一個帶動畫效果的工具欄。

  製做一個飄動的工具欄。

 

實例009  在帶下拉菜單的工具欄

實例說明

工具欄是窗體的組成部分之一,工具欄中的按鈕能夠完成一些較爲經常使用或重要的功能,本例中設計了一個工具欄,使工具欄帶有下拉菜單,效果如圖1.9所示。

技術要點

帶下拉菜單的工具欄在其餘計算機語言中實現比較複雜,但在.NET 2.0中已經提供了這個功能,只需將工具欄按鈕的類型設置爲DropDownButton便可。

實現過程

(1)建立一個項目,將其命名爲Ex01_09,默認窗體爲Form1。

(2)從工具箱中爲窗體添加ToolStrip控件,併爲工具欄添加相應的按鈕,在按鈕的下拉選項中選擇DropDownButton類型。

(3)爲工具欄DropDownButton類型的按鈕設置相應的下拉菜單,就能夠輕鬆實現帶下拉菜單的工具欄。

觸類旁通

根據本實例,讀者能夠開發如下功能。

  製做一個帶右鍵菜單的工具欄。

  製做一個帶複選框的工具欄。

 

實例010  在具備提示功能的工具欄

實例說明

在文檔\視圖結構的應用程序中,默認狀況下,當鼠標在工具欄按鈕上停留片刻,會出現一個工具提示條。本例實現了一個具備提示功能的工具欄,效果如圖1.10所示。

技術要點

具備提示功能的工具欄在其餘計算機語言中實現也許比較複雜,但在.NET 2.0中已經提供了這個功能。只需將工具欄按鈕的ToolTipText設置爲要提示的內容便可。下面詳細介紹一下該屬性。

ToolTipText屬性用來獲取或設置做爲控件的ToolTip顯示的文本。其語法結構以下:

public string ToolTipText { get; set; }

l     屬性值:一個表示工具提示文本的字符串。

實現過程

(1)建立一個項目,將其命名爲Ex01_10,默認窗體爲Form1。

(2)從工具箱中爲Form1窗體添加ToolStrip控件用來設計工具欄,併爲工具欄添加相應的按鈕。

(3)爲相應按鈕的ToolTipTile屬性設置提示內容,就能夠輕鬆實現具備提示功能的工具欄。

觸類旁通

根據本實例,讀者能夠開發如下功能。

  具備提示功能的各類控件。

  具備提示功能的窗體。

 

1.3 狀態欄設計

狀態欄是用來顯示當前程序狀態的。狀態欄能夠分爲多個面板,用來顯示不一樣狀態下的內容,本節主要介紹了狀態欄的用法以及如何在狀態欄中添加控件。

 

實例011  在狀態欄中顯示檢查框

實例說明

在設計程序界面時,爲了規範界面,能夠將一些控件放置在狀態欄中,這樣既能起到控制程序的做用,又能使界面和諧、美觀。運行程序,在窗體的狀態欄中加入了顯示時間檢查框。效果如圖1.11所示。

技術要點

在狀態欄中添加檢查框比較容易,只需先將狀態欄加入窗體,而後將檢查框從工具箱中拖入狀態攔便可。

實現過程

(1)建立一個項目,將其命名爲Ex01_11,默認窗體爲Form1。

(2)從工具箱中爲Form1窗體添加StatusStrip控件,並從工具箱中爲狀態欄添加CheckBox控件。

(3)主要程序代碼。

        private void checkBox2_CheckedChanged(object sender, EventArgs e)

        {

            if (this.checkBox2.Checked)

            {

                statusStrip1.Items[1].Text = "日期:" + DateTime.Now.ToString();

            }

            else

            {

                statusStrip1.Items[1].Text = "";

            }

        }

觸類旁通

根據本實例,讀者能夠開發如下功能。

  運行時設置控件的位置。

  動態控制控件的顯示。

 

實例012  帶進度條的狀態欄

實例說明

上網瀏覽網頁的讀者都用過IE瀏覽器,讀者是否注意到該瀏覽器的狀態欄,在打開網頁的過程當中,瀏覽器下邊的狀態欄中有一個進度條顯示當前網頁的載入進度,這樣的狀態欄使界面顯得更加豐富多彩,而且很是實用。本例將設計一個帶進度條的狀態欄,而且在程序運行當中進度條能夠顯示其進度,該實例運行結果如圖1.12所示。

技術要點

帶進度條的狀態欄在別的開發環境下實現相對比較複雜,但在.NET 2.0中已經提供了這個功能,只需將狀態欄的按鈕類型設置爲ProgressBar便可。經過設置ProgressBar的Step 屬性指定一個特定值用以逐次遞增Value屬性的值,而後調用PerformStep方法來使該值遞增,就能夠實現帶進度條的狀態欄。

實現過程

(1)建立一個項目,將其命名爲Ex01_12,默認窗體爲Form1。

(2)從工具箱中爲Form1窗體添加StatusStrip控件,併爲狀態欄添加相應的按鈕,在按鈕的下拉選項中選擇ProgressBar類型。

(3)設置ToolStripProgressBar1的Value屬性、Maximum屬性和Step屬性。

(4)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            while (toolStripProgressBar1.Value < toolStripProgressBar1.Maximum)

            {

                this.toolStripProgressBar1.PerformStep();

            }

        }

觸類旁通

根據本實例,讀者能夠開發如下功能。

  在狀態欄中顯示時間。

  改變進度條的顏色。

 

實例013  狀態欄中加入圖標

實例說明

狀態欄已經成爲主界面必不可少的部分,狀態欄通常用於顯示程序狀態、當前日期等,在狀態欄中添加一張圖片會使程序的主界面更有特點。運行本例,效果如圖1.13所示。

技術要點

狀態欄中加入圖標在.NET 2.0中實現很是容易,只要將對應狀態欄面板的Image屬性設置爲要顯示的圖片便可。

實現過程

(1)建立一個項目,將其命名爲Ex01_13,默認窗體爲Form1。

(2)從工具箱中爲Form1窗體添加StatusStrip控件,併爲狀態欄添加相應的按鈕,設置添加的按鈕的Image屬性爲要顯示的圖片。

觸類旁通

根據本實例,讀者能夠實現如下功能。

  將其餘控件放置在狀態欄中,如進度條。

  將其餘控件放置在狀態欄中,如複選框。

 

1.4 導航菜單界面

對於一些應用工具軟件,界面不但要求人性化、漂亮,還要突出界面功能、使用方便,這樣才能吸引用戶使用。本節主要介紹了經常使用的幾種菜單界面。

 

實例014  OutLook界面

實例說明

程序主界面包括菜單欄、工具欄、狀態欄和樹狀視圖。OutLook界面美觀、友好,是一個很實用的程序主界面,而且菜單欄和工具欄是可移動的。運行本例效果如圖1.14所示。

圖1.14  Out Look界面

技術要點

通常程序的菜單欄和工具欄是不可移動的,可是隻要將MenuStrip和ToolStrip控件的AllowItemRecorder屬性設爲True就能夠移動。在本例中使用MenuStrip控件製做菜單欄,使用ToolStrip製做工具欄,使用StatusStrip控件製做狀態欄。下面詳細介紹一下這幾個控件的屬性。

1.ToolStrip. AllowItemReorder屬性

獲取或設置一個值,該值指示是否由ToolStrip類私自處理拖放和項從新排序。其結構以下:

public bool AllowItemReorder { get; set; }

l     屬性值:若是讓ToolStrip類自動處理拖放和項從新排序,爲True;不然爲False。默認值爲False。

2.MenuStrip. AllowItemReorder屬性

獲取或設置一個值,該值指示是否由ToolStrip類私自處理拖放和項從新排序。其結構以下:

public bool AllowItemReorder { get; set; }

l     屬性值:若是讓 MenuStrip類自動處理拖放和項從新排序,爲True;不然爲False。默認值爲False。

3.ToolStripItem.DisplayStyle屬性

獲取或設置是否在ToolStripItem上顯示文本和圖像。

public virtual ToolStripItemDisplayStyle DisplayStyle { get; set; }

l     屬性值:ToolStripItemDisplayStyle值之一。默認爲ImageAndText。

注意:在移動菜單欄和工具欄時,須要按住「Alt」鍵,同時用鼠標進行拖動。

實現過程

(1)建立一個項目,將其命名爲Ex01_14,默認窗體爲Form1。

(2)在Form1窗體上添加MenuStrip控件,用來設計主菜單;添加ToolStrip控件,用來設計工具欄;添加StatusStrip控件,用來設計狀態欄;添加ImageList控件和TreeVew控件,用來設計樹結構。

(3)分別爲MenuStrip控件、ToolStrip控件、ImageList控件和TreeVew控件添加子項,將MenuStrip控件和ToolStrip控件的AllowItemRecorder屬性設爲True,並將ToolStrip控件的每一個子項的DisplayStyle屬性設置爲「ImageAndText」。下面詳細介紹這幾個屬性。

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做一個系統菜單。

  製做一個導航界面。

 

實例015  帶帶導航菜單的主界面

實例說明

在窗體界面中,菜單欄是不可缺乏的重要組成部分。本實例是用其餘的控件來製做一個摸擬菜單欄。運行程序,單擊窗體上面的按鈕,將會在按鈕的下面顯示一個下拉列表。如圖1.15所示。

技術要點

該實例中主要使用Button控件和ListView控件製做導航菜單界面。在對ListView控件添加菜單信息時,必需在前面寫入添加語句,如Listview.Items.Add,不然添加的菜單信息將替換前一條信息。單擊相應的按鈕時,應首先對ListView控件進行清空,不然在ListView控件中將繼續上一次的添加菜單信息。

實現過程

(1)建立一個項目,將其命名爲Ex01_15,默認窗體爲Form1。

(2)在Form1窗體上添加MenuStrip控件設計菜單欄;添加ToolStrip控件設計工具欄;添加SplitContainer控件、ImageList控件、3個Button控件和ListView控件用來製做左側的導航欄。

(3)分別爲MenuStrip控件、ToolStrip控件添加子項,將3個Button按鈕和ListView控件加入SqlitContainer1.panel的左側部分中。

(4)主要程序代碼。

加載窗體時,設置左側導航欄內容的實現代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            listView1.Clear();

            listView1.LargeImageList = imageList1;

            listView1.Items.Add("設置上下班時間", "設置上下班時間", 0);

            listView1.Items.Add("是否啓用短信提醒", "是否啓用短信提醒", 1);

            listView1.Items.Add("設置密碼", "設置密碼", 2);

        }

添加打開按鈕的ListView控件顯示內容的實現代碼以下:

        private void button2_Click_1(object sender, EventArgs e)

        {

            listView1.Dock = DockStyle.None;

            button2.Dock = DockStyle.Top;

            button1.SendToBack();

            button1.Dock = DockStyle.Top;

            button3.Dock = DockStyle.Bottom;

            listView1.Dock = DockStyle.Bottom;

            listView1.Clear();

            listView1.Items.Add("近期工做記錄", "近期工做記錄", 3);

            listView1.Items.Add("近期工做計劃", "近期工做計劃", 4);

        }

添加編輯按鈕的ListView控件顯示內容的實現代碼以下:

        private void button3_Click_1(object sender, EventArgs e)

        {

            listView1.Dock = DockStyle.None;

            button3.SendToBack();

            button3.Dock = DockStyle.Top;

            button2.SendToBack();

            button2.Dock = DockStyle.Top;

            button1.SendToBack();

            button1.Dock = DockStyle.Top;

            listView1.Dock = DockStyle.Bottom;

            listView1.Clear();

            listView1.Items.Add("編輯工做進度報告", "編輯工做進度報告", 5);

            listView1.Items.Add("編輯項目設計圖", "編輯項目設計圖", 6);

        }

添加設置按鈕的ListView控件顯示內容的實現代碼以下:

        private void button1_Click_1(object sender, EventArgs e)

        {

            listView1.Dock = DockStyle.None;

            button1.Dock = DockStyle.Top;

            button2.Dock = DockStyle.Bottom;

            button3.SendToBack();

            button3.Dock = DockStyle.Bottom;

            listView1.BringToFront();

            listView1.Dock = DockStyle.Bottom;

            listView1.Clear();

            listView1.Items.Add("設置上下班時間", "設置上下班時間", 0);

            listView1.Items.Add("是否啓用短信提醒", "是否啓用短信提醒",1);

            listView1.Items.Add("設置密碼", "設置密碼", 2);

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做一個系統菜單。

  製做大型系統的導航界面。

 

實例016  圖形化的導航界面

實例說明

若是以按鈕來代替菜單的功能,會使界面更具備個性化。使操做者更易於操做。下面介紹按鈕顯示菜單的設計方法。運行本例,效果如圖1.16所示。

圖1.16  圖形化的導航界面

技術要點

本實例主要經過設置Button控件的相應屬性,肯定其按鈕的位置、文字、顯示樣式和要顯示的圖片等。下面對Button控件相應屬性進行詳細介紹。

1.Button. BackColor屬性

獲取或設置控件的背景色,其方法結構以下:

public override Color BackColor { get; set; }

l     屬性值:一個表示背景色的Color值。

2.Button. FlatStyle屬性

獲取或設置按鈕控件的平面樣式外觀。其代碼以下:

public FlatStyle FlatStyle { get; set; }

l     屬性值:FlatStyle 值之一。默認值爲Standard。

3.Button. TextImageRelation屬性

獲取或設置文本和圖像相互之間的相對位置。其代碼以下:

public TextImageRelation TextImageRelation { get; set; }

l     屬性值:TextImageRelation 的值之一。默認爲Overlay。

實現過程

(1)建立一個項目,將其命名爲Ex01_16,默認窗體爲Form1。

(2)在Form1窗體上添加MenuStrip控件用來設計菜單欄,添加ToolStrip控件用來設計工具欄,添加Panel控件、Button控件用來設計圖形化的導航按鈕。

(3)分別爲MenuStrip控件、ToolStrip控件添加子項,併爲Panel控件選擇背景圖片。

(4)將Button控件的BackColor屬性設爲「Transparent」、FlatStyle屬性設置爲「Flat」、TextImageRelation屬性設置爲「ImageBeforeText」。

(5)主要程序代碼。

        private void button1_Click(object sender, EventArgs e)

        {

            //使子項可見

            button5.Visible = true;

            button6.Visible = true;

            button7.Visible = true;

        }

        private void button2_Click(object sender, EventArgs e)

        {

            //使子項可見

            button8.Visible = true;

            button9.Visible = true;

            button10.Visible = true;

        }

        private void button3_Click(object sender, EventArgs e)

        {

            //使子項可見

            button11.Visible = true;

            button12.Visible = true;

            button13.Visible = true;

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做動態的按鈕界面。

  製做動態的圖片界面。

 

1.5 特點程序界面

如今有不少開發人員都將界面製做成不一樣類型的樣式,這樣可使界面更加形象化。本節主要介紹瞭如何對程序界面進行特點化設計,如相似QQ、Windows XP的界面等。

 

實例017  菜類QQ的程序界面

實例說明

通常程序都是以菜單欄和工具欄的形式調用其餘功能模塊,若是以動態的相似QQ的程序界面來調用其餘功能模塊,將會給用戶一種新鮮的感受,使用戶對軟件更感興趣。實例運行結果如圖1.17所示。

技術要點

本例主要使用Button控件來完成佈局,使用ListView控件來顯示有圖標的功能菜單。ListView控件的經常使用屬性及說明以下。

1.ListView.Items屬性

使用該屬性可直接訪問表示列表中項目的ListItem對象。其結構以下:

public ListViewItemCollection Items { get; }

l     屬性值: ListView.ListViewItemCollection包含ListView控件中全部的項。

2.ListView.Dock屬性

獲取或設置哪些控件邊框停靠到其父控件並肯定控件如何隨其父級一塊兒調整大小。其結構以下:

public virtual DockStyle Dock { get; set; }

l     屬性值:DockStyle值之一。默認爲None。

實現過程

(1)建立一個項目,將其命名爲Ex01_17,默認窗體爲Form1。

(2)在窗體上添加Button控件、ListView控件和ImageList控件。設置ListView控件的ImageList屬性爲ImageList控件。

(3)主要程序代碼。

添加「個人好友」選項內容的實現代碼以下:

        private void button1_Click(object sender, EventArgs e)

        {

            listView1.Dock = DockStyle.None;

            button1.Dock = DockStyle.Top;

            button2.Dock = DockStyle.Bottom;

            button3.SendToBack();

            button3.Dock = DockStyle.Bottom;

            listView1.BringToFront();

            listView1.Dock = DockStyle.Bottom;

            listView1.Clear();

            listView1.Items.Add("小豬", "小豬", 0);

            listView1.Items.Add("小狗", "小狗", 1);

            listView1.Items.Add("嬌嬌", "嬌嬌", 2);

        }

添加默認時選項內容的實現代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            listView1.Clear();

            listView1.LargeImageList = imageList1;

            listView1.Items.Add("小豬", "小豬", 0);

            listView1.Items.Add("小狗", "小狗", 1);

            listView1.Items.Add("嬌嬌", "嬌嬌", 2);

        }

添加「陌生人」選項內容的實現代碼以下:

        private void button2_Click(object sender, EventArgs e)

        {

            listView1.Dock = DockStyle.None;

            button2.Dock = DockStyle.Top;

            button1.SendToBack();

            button1.Dock = DockStyle.Top;

            button3.Dock = DockStyle.Bottom;

            listView1.Dock = DockStyle.Bottom;

            listView1.Clear();

            listView1.Items.Add("北風", "北風", 3);

        }

添加「黑名單」選項內容的實現代碼以下:

        private void button3_Click(object sender, EventArgs e)

        {

            listView1.Dock = DockStyle.None;

            button3.SendToBack();

            button3.Dock = DockStyle.Top;

            button2.SendToBack();

            button2.Dock = DockStyle.Top;

            button1.SendToBack();

            button1.Dock = DockStyle.Top;

            listView1.Dock = DockStyle.Bottom;

            listView1.Clear();

            listView1.Items.Add("冰雨", "冰雨", 5);

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  根據數據庫信息造成相應的功能列表。

  製做聊天界面。

 

實例018  相似windows xp的程序界面

實例說明

在Windows XP環境下打開控制面板,會發現左側的導航界面很實用。雙擊展開按鈕,導航欄功能顯示出來,雙擊收縮按鈕,導航按鈕收縮。下面經過實例介紹此種主窗體的設計方法。運行本例,效果如圖1.18所示。

技術要點

PictureBox控件是一個圖像顯示控件,該控件主要以其中的Image屬性存儲圖像數據。其詳細介紹以下。

PictureBox.Image屬性用來獲取或設置 PictureBox 顯示的圖像,其語法格式以下:

public Image Image { get; set; }

圖1.18  相似windows xp的程序界面

l     屬性值:要顯示的Image。

實現過程

(1)建立一個項目,將其命名爲Ex01_18,默認窗體爲Form1。

(2)在Form1窗體上添加Button控件、PictureBox控件和label控件,佈局如圖1.18所示。

(3)主要程序代碼。

雙擊「向下箭頭」的實現代碼以下:

        private void pictureBox5_Click(object sender, EventArgs e)

        {

            //使子項收縮

            int i ;

            i=80;

            pictureBox5.Visible = false;

            pictureBox4.Visible = false;

            label2.Visible = false;

            label3.Visible = false;

            pictureBox6.Top -= i;

            pictureBox8.Top -= i;

            label4.Top -= i;

            label5.Top -= i;

            label6.Top -= i;

            label10.Top -= i;

            label7.Top -= i;

            label8.Top -= i;

            label9.Top -= i;

            pictureBox9.Top -= i;

            pictureBox11.Top -= i;

        }

雙擊「向上箭頭」的實現代碼以下:

        private void pictureBox2_Click(object sender, EventArgs e)

        {

            //展開子項

            if (pictureBox5.Visible == false)

            {

                int i;

                i = 80;

                pictureBox5.Visible = true;

                pictureBox4.Visible = true;

                label2.Visible = true;

                label3.Visible = true;

                pictureBox6.Top += i;

                pictureBox8.Top += i;

                label4.Top += i;

                label5.Top += i;

                label6.Top += i;

                label10.Top += i;

                label7.Top += i;

                label8.Top += i;

                label9.Top += i;

                pictureBox9.Top += i;

                pictureBox11.Top += i;

            }

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            SetStyle(ControlStyles.SupportsTransparentBackColor,true);

        }

注意:在對控件的高度進行遞增或遞減的時候,數值不要過小。

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做Windows XP控制面板。

  製做Windows XP開始導航菜單。

 

實例019  以圖形按鈕顯示的界面

實例說明

菜單和工具欄雖然能方便用戶操做程序的相應功能,但各有缺點。若是採用按鈕式功能菜單,不但美觀大方,並且操做靈活。當單擊按鈕時,用戶區將顯示相應的操做按鈕組。下面介紹圖形界面式菜單的設計方法。運行本例,效果如圖1.19所示。

圖1.19  以圖形按鈕顯示的界面

技術要點

本例中用到了Image.FromFile方法和PictureBox.Image屬性,下面詳細介紹一下。

(1)Image.FromFile方法:從指定的文件建立Image。該函數的結構爲:

public static Image FromFile (string filename)

參數說明以下。

l     filename:當前目錄的指定路徑字符串,包含要從中建立Image的文件的名稱。

l     返回值:此方法建立的Image。

(2)PictureBox.Image屬性:獲取或設置PictureBox顯示的圖像。其屬性結構爲:

public Image Image { get; set; }

l     屬性值:要顯示的Image。

注意:在本例中不易使窗體最大化。如最大化,會使Label控件不在正確的位置上。

實現過程

(1)建立一個項目,將其命名爲Ex01_19,默認窗體爲Form1。

(2)在Form1窗體上添加MenuStrip控件用來設計菜單;添加Picture控件、Panel控件用來設計圖形顯示的界面。

(3)將panel的背景圖片設置爲圖1.19所示,並在圖片上添加Label控件,同時將Label控件的BackColor屬性設置爲transparency。

(4)主要程序代碼。

        private void label1_Click(object sender, EventArgs e)

        {

           pictureBox3.Image= Image.FromFile("3.jpg");//爲控件加載圖像

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做圖片的動態更新。

  製做一個圖片瀏覽器。

 

實例020  以樹形顯示的程序界面

實例說明

以樹形來顯示程序的菜單,能夠更直觀更快捷的對軟件進行操做。樹形菜單比菜單欄更加美觀實用。下面介紹樹形界面菜單的設計方法。運行本例效果如圖1.20所示。

圖1.20  以樹形顯示的程序界面

技術要點

在對TreeView控件輸入記錄時,雙擊Nodes屬性就能夠對TreeView的節點進行設置。

能夠在窗體的Load事件中輸入下面的一條命令:

treeView1.ExpandAll();

功能:展開TreeView控件中全部的下級菜單。

實現過程

(1)建立一個項目,將其命名爲Ex01_20,默認窗體爲Form1。

(2)在窗體上添加MenuStrip控件用來設計菜單欄,添加PictureBox控件用來顯示圖片,添加TreevVew控件用來設計左側樹形導航界面。

(3)爲PictureBox添加背景圖片,給MenuStrip控件和TreevVew控件添加子項。

(4)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            treeView1.ExpandAll();

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做一個動態的從數據庫中讀取數據的樹型界面。

  製做一個帶圖標的樹型界面。

 

實例021  動態按鈕的窗體界面

實例說明

在窗體界面中,一般以按鈕來代替菜單欄的功能,這種形式雖然給用戶一種直觀,界面風格各異的感黨,但一般按鈕都是以靜止的形式顯示,若是使光標移到按鈕時,可使按鈕上的圖片和文字說明動態化,使用戶快捷地找到所選按鈕。這樣就須要一個動態的按鈕顯示界面。運行本例效果如圖1.21所示。

圖1.21  動態按鈕的窗體界面

技術要點

在編輯過程當中,首先在Button控件中的Image屬性中添加圖片,而後將Button控件的ImageAlign屬性設置爲MiddleCenter,使圖片居中。在設置Button控件的動態圖片時,必須在相應控件的MouseMove事件中設置。

1.Button.Image屬性

獲取或設置顯示在按鈕控件上的圖像,其語法格式以下:

public Image Image { get; set; }

l     屬性值:按鈕控件上顯示的Image。默認值爲空引用。

2.Button. ImageAlign屬性

獲取或設置按鈕控件上的圖像對齊方式,其語法格式以下:

public ContentAlignment ImageAlign { get; set; }

l     屬性值:ContentAlignment值之一。默認值爲MiddleCenter。

注意:當鼠標移開Button控件時,圖片與字應及時恢復原位。

實現過程

(1)建立一個項目,將其命名爲Ex01_21,默認窗體爲Form1。

(2)在Form1窗體上添加PictureBox用來顯示圖片,添加Button、Lable控件用來設計動態按鈕。

(3)爲PictureBox控件設置背景圖片,將Lable控件的Text屬性設置爲「明日科技有限公司」,併爲每一個Button控件設置圖片和文字。

(4)主要程序代碼。

        private void button1_MouseMove(object sender, MouseEventArgs e)

        {

              //鼠標移動時改變圖片位置

            button1.ImageAlign = ContentAlignment.MiddleLeft;

        }

        private void button2_MouseMove(object sender, MouseEventArgs e)

        {

            button2.ImageAlign = ContentAlignment.MiddleLeft;

        }

        private void button3_MouseMove(object sender, MouseEventArgs e)

        {

            button3.ImageAlign = ContentAlignment.MiddleLeft;

        }

        private void button4_MouseMove(object sender, MouseEventArgs e)

        {

            button4.ImageAlign = ContentAlignment.MiddleLeft;

        }

        private void button5_MouseMove(object sender, MouseEventArgs e)

        {

            button5.ImageAlign = ContentAlignment.MiddleLeft;

        }

        private void button1_MouseLeave(object sender, EventArgs e)

        {

            button1.ImageAlign = ContentAlignment.MiddleCenter;

        }

        //鼠標離開時改變圖片位置

        private void button2_MouseLeave(object sender, EventArgs e)

        {

            button2.ImageAlign = ContentAlignment.MiddleCenter;

        }

        private void button3_MouseLeave(object sender, EventArgs e)

        {

            button3.ImageAlign = ContentAlignment.MiddleCenter;

        }

        private void button4_MouseLeave(object sender, EventArgs e)

        {

            button4.ImageAlign = ContentAlignment.MiddleCenter;

        }

        private void button5_MouseLeave(object sender, EventArgs e)

        {

            button5.ImageAlign = ContentAlignment.MiddleCenter;

        }

        private void button6_MouseMove(object sender, MouseEventArgs e)

        {

            button6.ImageAlign = ContentAlignment.MiddleLeft;

        }

        private void button6_MouseLeave(object sender, EventArgs e)

        {

            button6.ImageAlign = ContentAlignment.MiddleCenter;

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  根據所給圖片製做相應的窗體界面。

  用圖片代替控件製做相應的窗體界面。

 

1.6 特殊形狀的窗體

將界面以不規則的形狀顯示在桌面上,能夠給用戶一種新鮮的感受。本節主要對窗體以特殊的形狀進行顯示,如非矩形窗體和字體形窗體等。

 

實例022  非矩形窗體

實例說明

大部分Windows窗體都是一個矩形區域,讀者是否已經厭倦了這種中規中矩的矩形窗體?本例中的窗體是一個打破傳統矩形的異型窗體,運行該例會看到一個很是可愛的窗體,單擊【X】按鈕就會使窗口關閉。實例效果如圖1.22所示。

技術要點

之前,建立非矩形窗體是一個既費時又費人力的過程,其中涉及到 API 調用和大量的編程工做。在.NET 2.0框架中能夠不調用API很是輕鬆的實現這一功能。只要重寫窗體的OnPaint方法,在方法中從新繪製窗體,而後用透明色將窗體設置透明便可。

(1)Form.OnPaint方法:此成員重寫Control.OnPaint。用來從新繪製窗體圖像。其結構以下:

protected override void OnPaint (PaintEventArgs e)

參數說明以下。

l     PaintEventArgs:爲Paint事件提供數據。

實現過程

(1)建立一個項目,將其命名爲Ex01_22,默認窗體爲Form1。

(2)在窗口中添加Label控件,並將BackColor屬性設爲透明,將text屬性設爲空。

(3)將窗體的TransparencyKey屬性設爲窗體的背景色。

(4)主要程序代碼。

設置圖片透明顏色的實現代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            bit = new Bitmap("Heart.bmp");

            bit.MakeTransparent(Color.Blue);

        }

重寫基類方法,具體代碼以下:

        protected override void OnPaint(PaintEventArgs e)

        {

            e.Graphics.DrawImage((Image)bit, new Point(0, 0));//將圖片畫出

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  能夠把窗體制作成各類卡通圖形。

  能夠將窗體制作成各類幾何圖形。

  能夠將窗體制作成桌面小精靈。

 

實例023 創建字體形狀窗體

實例說明

你們都見過不規則形狀的窗體吧,那麼如何製做一個文字形的窗體呢?文字形窗體通常應用在屏幕提示中,如收款機屏幕等。運行本例,效果如圖1.23所示。

技術要點

之前,建立字體形窗體是一個既費時又費人力的過程,其中涉及到API調用和大量的編程工做。在.NET 2.0框架中能夠不調用API很是輕鬆的實現這一功能。只要先將字體畫在一幅圖上,而後重寫窗體的OnPaint方法(方法的詳細內容能夠參見實例022),在方法中用圖從新繪製窗體,用背景色將窗體設置透明便可。

實現過程

(1)建立一個項目,將其命名爲Ex01_23,默認窗體爲Form1。

(2)主要程序代碼。

namespace SpecialSharpWindows

{

    public partial class Form1 : Form

    {

        Bitmap bit;

        public Form1()

        {

            InitializeComponent();

        }

設置圖片透明顏色的實現。代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            bit = new Bitmap("1.bmp");

            bit.MakeTransparent(Color.Blue);

        }

重寫基類方法的實現。代碼以下:

        protected override void OnPaint(PaintEventArgs e)

        {

            e.Graphics.DrawImage((Image)bit, new Point(0, 0));

        }

        private void label1_Click(object sender, EventArgs e)

        {

            this.Close();

        }

    }

}

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做圓形的窗體。

  製做鋸齒狀的窗體。

 

實例024 控件隨窗體自動調整

實例說明

在軟件開發中,隨着窗體的大小變化,界面會和設計時出現較大的差別,控件和窗體的大小會不成比例很是不美觀。本例中的控件是一個能夠隨窗體大小變化的控件。運行該例會看到一個控件隨窗體大小變化的窗體。實例效果如圖1.24所示。

技術要點

在.NET 2.0框架中能夠很是輕鬆的實現這一功能。大多數控件都有Anthor屬性,當在窗體上添加控件時設置Anthor屬性便可。Anthor屬性是個錨定屬性,指定了控件距容器邊緣的距離。當窗體大小變化時,控件距窗體邊緣的距離不變,天然大小就隨窗體自動調整。

實現過程

(1)建立一個項目,將其命名爲Ex01_24,默認窗體爲Form1。

(2)在窗體上添加MenuStrip控件、ToolStrip控件和Button控件。並設置Button的Anthor屬性和Text屬性。

觸類旁通

根據本實例,讀者能夠實現如下功能。

  圖片大小隨着窗體大小變化的窗體。

  菜單欄大小隨着窗體大小變化的窗體。

 

實例025 帶分隔欄的窗體

實例說明

在軟件開發中,常常須要將界面分紅幾個部分,並且這幾個部分又能夠自由調整大小。運行本例,實例效果如圖1.25所示。

技術要點

在.NET 2.0框架中能夠很是輕鬆的實現這一功能,只要在窗體中加入SplitContainer控件便可。SplitContainer控件帶有一個分隔欄,用來把窗體分紅兩部分。

實現過程

(1)建立一個項目,將其命名爲Ex01_25,默認窗體爲Form1。

(2)在Form1窗體上添加MenuStrip控件用來設計菜單欄,添加ToolStrip控件用來設計工具欄,添加SplitContainer控件用來設計分隔欄。

觸類旁通

根據本實例,讀者能夠實現如下功能。

  分紅3部分的窗體。

  分紅4部分的窗體。

 

實例026 隨機更換主界面背景

實例說明

若是開發的軟件用戶使用頻率很是高,能夠爲程序設計隨機更換背景的程序。這樣不但可使用戶心情愉快,也增長了軟件的人性化設計。下面的界面就是一個隨機更換主界面的例子,效果如圖1.26所示。

技術要點

隨機更換主界面背景使用了Random類和ImageList控件。首先爲ImageList控件添加一組圖片,而後實例化一個Random類,再用Next()方法產生一個隨機數以決定將哪一個圖片設爲背景。

Random.Next()方法用來返回一個小於所指定最大值的非負隨機數。其結構以下:

public virtual int Next (int maxValue)

參數說明以下。

l     maxValue:要生成的隨機數的上界(隨機數不能取該上界值)。maxValue必須大於或等於零。

l     返回值:大於或等於零且小於maxValue的32位帶符號整數,即返回的值範圍包括零但不包括maxValue。

實現過程

(1)建立一個項目,將其命名爲Ex01_26,默認窗體爲Form1。

(2)在Form1窗體上添加ImageList控件,併爲ImageList控件添加圖片。

(3)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            Random rdn = new Random();

            int i = rdn.Next(imageList1.Images.Count);//產生一個隨機數

            this.BackgroundImage = imageList1.Images[i];

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  天天更換主程序背景的主界面。

  隨機更換菜單欄、工具欄圖標的主程序。

 

1.7 多媒體光盤

本節主要介紹瞭如何自動啓動多媒體光盤和觸摸屏的相關技術。自動啓動多媒體光盤技術應用十分普遍,如今的光盤大多應用這些技術,節省了用戶單擊進入的時間。

 

實例027 自動啓動的多媒體光盤程序

實例說明

用戶在安裝軟件時,將光盤放入光驅內,光盤會自動運行,進行安裝操做,該功能是如何實現的呢?本例介紹如何製做「自動安裝的光盤程序」,程序運行效果如圖1.27所示。

技術要點

其實,實現光盤的自動運行很是簡單,當用戶打開自動運行的光盤時,會發現光盤中有幾個特殊的文件,分別爲「autorun.exe」、「run.ico」和「autorun.inf」,其中「autorun.exe」是光盤自動播放時執行的可執行文件,「run.ico」是光盤的圖標,「autorun.inf」是一個INI文件。只要光盤中包含這些文件,那麼在將光盤放入光驅時,就會自動運行。

實現過程

(1)建立一個項目,將其命名爲Ex01_27,默認窗體爲Form1。

(2)爲Form1窗體添加背景圖片Button控件。

(3)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            StreamWriter sw = new StreamWriter("AutoRun.inf",false);

            sw.WriteLine("[autorun]");

            sw.WriteLine("OPEN=AUTORUN.EXE");

            sw.WriteLine("ICON=run.ICO");

            sw.Close();

        }

(4)運行程序,將可執行文件命名爲「autorun.exe」,該文件就是光盤自動播放時打開的文件。

(5)選擇一個圖標,命名爲「run.ico」,該圖標在光驅讀盤時顯示。

(6)在刻光盤時,將上面的「run.ico」、「autorun.inf」和「autorun.exe」3個文件刻錄到光盤中。

觸類旁通

根據本實例,讀者能夠開發如下程序。

  設計多媒體宣傳光盤。

  製做後門程序。

 

實例028 爲觸摸屏程序添加虛擬鍵盤

實例說明

因爲觸摸屏沒有鍵盤,只能利用屏幕操做。若是要輸入數據或查找數據,須要製做一個虛擬鍵盤,以方便用戶輸入。本例介紹如何實現虛擬鍵盤的程序設計。運行本例,效果如圖1.28所示。

技術要點

本例中用到了Lable控件的透明屬性和字符串截取技術。主要是使用Substring()方法。下面詳細介紹一下該方法。

Substring()方法用來今後實例檢索子字符串。子字符串從指定的字符位置開始且具備指定的長度。其語法結構以下:

public string Substring (int startIndex,int length)

參數說明以下。

l     startIndex:子字符串起始位置的索引。

l     length:子字符串中的字符數。

l     返回值:一個String,等於此實例中從startIndex開始的長度爲length的子字符串,若是startIndex等於此實例的長度且length爲零,則爲Empty。

實現過程

(1)建立一個項目,將其命名爲Ex01_28,默認窗體爲Form1。

(2)在窗體上添加2個Panel控件,1個TextBox控件和許多Label控件,每一個Label控件對應背景圖片上的1個按鈕。

(3)爲Panel控件添加背景圖片,並將Label控件的BackColor設置爲透明。

(4)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            lbl_0.Click += new EventHandler(lbl_Click);

            lbl_1.Click += new EventHandler(lbl_Click);

            lbl_2.Click += new EventHandler(lbl_Click);

            lbl_3.Click += new EventHandler(lbl_Click);

            lbl_4.Click += new EventHandler(lbl_Click);

            lbl_5.Click += new EventHandler(lbl_Click);

            lbl_6.Click += new EventHandler(lbl_Click);

            lbl_7.Click += new EventHandler(lbl_Click);

            lbl_8.Click += new EventHandler(lbl_Click);

            lbl_9.Click += new EventHandler(lbl_Click);

            lbl_Q.Click += new EventHandler(lbl_Click);

            lbl_W.Click += new EventHandler(lbl_Click);

            lbl_R.Click += new EventHandler(lbl_Click);

            lbl_E.Click += new EventHandler(lbl_Click);

            lbl_T.Click += new EventHandler(lbl_Click);

            lbl_Y.Click += new EventHandler(lbl_Click);

            lbl_U.Click += new EventHandler(lbl_Click);

            lbl_I.Click += new EventHandler(lbl_Click);

            lbl_O.Click += new EventHandler(lbl_Click);

            lbl_P.Click += new EventHandler(lbl_Click);

            lbl_A.Click += new EventHandler(lbl_Click);

            lbl_S.Click += new EventHandler(lbl_Click);

            lbl_D.Click += new EventHandler(lbl_Click);

            lbl_F.Click += new EventHandler(lbl_Click);

            lbl_G.Click += new EventHandler(lbl_Click);

            lbl_H.Click += new EventHandler(lbl_Click);

            lbl_J.Click += new EventHandler(lbl_Click);

            lbl_K.Click += new EventHandler(lbl_Click);

            lbl_L.Click += new EventHandler(lbl_Click);

            lbl_Z.Click += new EventHandler(lbl_Click);

            lbl_X.Click += new EventHandler(lbl_Click);

            lbl_C.Click += new EventHandler(lbl_Click);

            lbl_V.Click += new EventHandler(lbl_Click);

            lbl_B.Click += new EventHandler(lbl_Click);

            lbl_N.Click += new EventHandler(lbl_Click);

            lbl_M.Click += new EventHandler(lbl_Click);

            label44.Click += new EventHandler(label44_Click);

        }

將選中的數字或字母加入TextBox.Text的實現代碼以下:

        void lbl_Click(object sender, EventArgs e)

        {

            Label l = (Label)sender;        

            textBox1.Text += l.Name.Substring(4, 1);

            textBox1.SelectionStart = textBox1.Text.Length;

        }

觸類旁通

根據本實例,讀者能夠實現如下程序。

  製做註冊控件的程序。

  製做網絡程序複製的程序。

 

1.8

本節主要是對窗體的透明度、顏色漸變、背景及邊框的相關技術進行講解。在項目開發中窗體的設計會影響用戶對軟件的總體印象,因此窗體的效果要設計的美觀一些。下面將介紹一些經常使用的效果。

 

實例029 半透明漸顯窗體

實例說明

不少專業軟件在啓動前都會顯示一個說明該軟件信息或用途的窗口,有的則是一個漂亮的啓動界面,如Adobe公司的Acrobat。該窗口使軟件顯得更加專業。本例將實現一個半透明的漸顯窗體,運行本軟件會顯示一個啓動畫面,而且畫面會將徹底透明慢慢到半透明的效果顯示在用戶面前。效果如圖1.29所示。

圖1.29  半透明濺顯窗體

技術要點

在其餘開發環境中,實現窗體的半透明漸顯須要調用API函數,實現很是困難,但在C# 2.0中,窗體提供了Opacit屬性來設置窗體的透明度。

Form.Opacit屬性用來獲取或設置窗體的不透明度級別,其語法格式以下:

public double Opacity { get; set; }

l     屬性值:窗體的不透明度級別。默認值爲1.00。

實現過程

(1)建立一個項目,將其命名爲Ex01_29,默認窗體爲Form1。

(2)在Form1窗體中設置背景圖片,添加Timer控件用來觸發漸變事件。

(3)設置Timer控件的Enable屬性爲True,設置Interval屬性爲1000。

(4)主要程序代碼。

        private void timer1_Tick(object sender, EventArgs e)

        {

            this.Opacity += 0.1;

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  使窗體由透明狀態顯現出來,能夠用Time控件來控制窗體由透明到顯示所需的時間。

  可使窗體爲透明狀態,只顯示窗體上的控件。

 

實例030 窗口顏色的漸變

 

實例說明

在程序設計時,能夠經過設置窗體的BackColor屬性來改變窗口的背景顏色。可是這個屬性改變後整個窗體的客戶區都會變成這種顏色,而且很是單調。若是窗體的客戶區能夠向標題欄同樣可以體現顏色的漸變效果,那麼窗體風格將會另有一番風味。本例設計了一個顏色漸變的窗體。效果如圖1.30所示。

技術要點

C#中能夠經過Color.FromArgb( )方法返回一種顏色,下面詳細介紹一下該方法。

Color.FromArgb( )方法用來返回Color的顏色值,該方法語法結構以下:

public static Color FromArgb (

    int red,

    int green,

    int blue

)

參數說明以下。

l     red:新Color的紅色份量值。有效值爲從0~255。

l     green:新Color的綠色份量值。有效值爲從0~255。

l     blue:新Color的藍色份量值。有效值爲從0~255。

l     返回值:此方法建立的Color。

該函數就是用3種不一樣的色值來返回一個顏色,而稍微的調整某一種顏色值就可使總體的顏色發生細微的變化,在窗體中至上而下每行填充一種稍微調整後的顏色,這樣總體看來就會產生漸變的效果。能夠利用窗體的Graphics對象對窗體進行繪圖,該對象能夠徹底操控窗體的客戶區。

注意:顏色值在0~255之間。

實現過程

(1)建立一個項目,將其命名爲Ex01_30,默認窗體爲Form1。

(2)在Form1窗體中添加Button用來使顏色漸變;添加TextBox控件用來輸入顏色RGB值。

(3)主要程序代碼。

觸發從新繪製事件的實現代碼以下:

        private void button2_Click(object sender, EventArgs e)

        {

            InvokePaintBackground( );

            this.Hide( );

            this.Visible=true;

        }

從新繪製窗體背景顏色的實現代碼以下:

        protected override void OnPaintBackground(PaintEventArgs e)

        {

            int y, dy;

            y = this.ClientRectangle.Location.Y;

            dy = this.ClientRectangle.Height / 256;

            for (int i = 255; i >= 0; i--)

            {

                Color c = new Color( );

                c = Color.FromArgb(Convert.ToInt32(textBox1.Text.ToString( )), i,Convert.ToInt32(textBox2.Text.ToString( )));

                SolidBrush sb = new SolidBrush(c);

                Pen p = new Pen(sb, 1);

                e.Graphics.DrawRectangle(p,this.ClientRectangle.X, y, this.Width,y+dy);

                y = y + dy;

            }

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  把窗體設置成單一的顏色。

  利用Timer組體,使窗體動態改變顏色。

 

1.9

本節主要對窗體進行動畫設置,在窗體上添加一些動畫效果,能夠爲操做者添加一些樂趣,下面的幾個例子將詳細介紹窗體動畫的相關技術。

 

實例031 窗體中的滾動字幕

實例說明

普通窗體中的文字位置都是固定的,一些窗體中須要讓文字動起來,例如一些廣告性較強的界面中須要作一些滾動的字幕。本例實現了一個具備滾動字幕效果的窗體,運行本例,單擊【演示】按鈕,看到窗口中的文字開始滾動。單擊【暫停】按鈕,可使字幕中止滾動。本例運行效果如圖1.31所示。

技術要點

滾動字幕的效果其實就是改變了文字的位置,在窗體中顯示一串文字最好的辦法就是利用Label控件。將Label控件的位置改變就能夠實現文字的位置變換,若是該控件的位置不斷的向水平方向移動,就會實現文字的滾動效果。改變Label控件的水平位置能夠經過改變Label控件的Left的值來實現。用Timer控件對文字的移動進行時間控制。

實現過程

(1)建立一個項目,將其命名爲Ex01_31,默認窗體爲Form1。

(2)在窗體上添加Label控件用來顯示消息;添加Button控件用來控制消息的運動;添加Timer控件用來控制滾動速度。

(3)主要程序代碼。

        private void timer1_Tick(object sender, EventArgs e)//用Timer來控制滾動速度

        {

            label1.Left -= 2;

            if (label1.Right < 0)

            {

                label1.Left = this.Width;

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            timer1.Enabled = true; //開始滾動

        }

        private void button2_Click(object sender, EventArgs e)

        {

            timer1.Enabled = false; //中止滾動

        }

注意:要特別注意文字滾動的方向問題,向左則減,向右則加。

觸類旁通

根據本實例,讀者能夠開發如下程序。

  能夠在窗體中設置一個滾動的圖片。

  能夠在窗體中設置一個滾動的提示信息。

 

實例032 動畫顯示窗體

實例說明

當用戶啓動程序後,普通的程序窗口都是瞬間顯示到屏幕上,這樣未免有些生硬。若是窗口可以慢慢的展示在用戶面前,將會是什麼樣的效果?本例設計的是一個動畫顯示的窗體,該程序運行後,窗體是慢慢的以拉伸的效果顯示到用戶的面前。當關閉時也是同樣慢慢的消失。本例運行效果如圖1.32所示。

技術要點

Windows提供了一個API函數Animate Window,該函數能夠實現窗體的動畫效果,AnimateWindow函數在C#中的聲明以下。

        [DllImportAttribute("user32.dll")]

        private static extern bool AnimateWindow(IntPtr  hwnd, int  dwTime, int  dwFlags);

參數說明以下。

l     hwnd:目標窗口句柄。

l     dwTime:動畫的持續時間,數值越大動畫效果的時間就越長。

l     DwFlags:DwFlags參數是動畫效果類型選項,該參數在C#中的聲明以下:

        public const Int32 AW_HOR_POSITIVE = 0x00000001;

        public const Int32 AW_HOR_NEGATIVE = 0x00000002;

        public const Int32 AW_VER_POSITIVE = 0x00000004;

        public const Int32 AW_VER_NEGATIVE = 0x00000008;

        public const Int32 AW_CENTER = 0x00000010;

        public const Int32 AW_HIDE = 0x00010000;

        public const Int32 AW_ACTIVATE = 0x00020000;

        public const Int32 AW_SLIDE = 0x00040000;

        public const Int32 AW_BLEND = 0x00080000;

DwFlags參數可選值含義如表1.1所示

表1.1                                                                   參數說明

標    志

描    述

AW_SLIDE

使用滑動類型。缺省則爲滾動動畫類型。當使用AW_CENTER標誌時,這個標誌就被忽略

AW_ACTIVE

激活窗口。在使用了AW_HIDE標誌後不要使用這個標誌

AW_BLEND

使用淡入效果。只有當hWnd爲頂層窗口的時候纔可使用此標誌

AW_HIDE

隱藏窗口,缺省則顯示窗口

AW_CENTER

若使用了AW_HIDE標誌,則使窗口向內重疊;若未使用AW_HIDE標誌,則使窗口向外擴展

AW_HOR_POSITIVE

自左向右顯示窗口。該標誌能夠在滾動動畫和滑動動畫中使用。當使用AW_CENTER標誌時,該標誌將被忽略

AW_HOR_NEGATIVE

自右向左顯示窗口。當使用了 AW_CENTER 標誌時該標誌被忽略

AW_VER_POSITIVE

自頂向下顯示窗口。該標誌能夠在滾動動畫和滑動動畫中使用。當使用AW_CENTER標誌時,該標誌將被忽略

AW_VER_NEGATIVE

自下向上顯示窗口。該標誌能夠在滾動動畫和滑動動畫中使用。當使用AW_CENTER標誌時,該標誌將被忽略

實現過程

(1)建立一個項目,將其命名爲Ex01_32,默認窗體爲Form1。

(2)在窗體上添加PictureBox控件。

(3)設置PictureBox控件的Image屬性。

(4)主要代碼以下。

        public Form1( )

        {

            InitializeComponent( );

            AnimateWindow(this.Handle, 300, AW_SLIDE + AW_VER_NEGATIVE);//開始窗體動畫

        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)

        {  //結束窗體動畫

           AnimateWindow(this.Handle, 300, AW_SLIDE + AW_VER_NEGATIVE + AW_HIDE);

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  實現窗體的淡入淡出。

  實現窗體從中間擴散顯示。

 

實例033 製做閃爍的窗體

實例說明

Windows系統中,當程序在後臺運行時,若是某個窗口的提示信息須要用戶瀏覽,該窗口就會不停的閃爍,這樣就會吸引用戶的注意。一樣,若是在本身的程序中使某個窗口不停的閃爍就會吸引用戶的注意。本例設計了一個閃爍的窗體,運行程序,單擊【開始閃爍】按鈕,窗體就會不停的閃爍,單擊【中止】按鈕,窗體就會中止閃爍。本例運行效果如圖1.33所示。

技術要點

Windows提供了一個API函數FlashWIndow,該函數可使窗體閃爍一下。FlashWIndow函數在C#中聲明以下:

        [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]

        public static extern bool FlashWindow(IntPtr handle, bool bInvert);

參數說明以下。

l     handle:表示將要閃爍的窗體。

l     bInvert:是否恢復狀態。

利用該函數只能使窗體閃爍一下,若是讓窗口不停地閃爍,就須要用一個Timer控件每隔一段時間就調用該函數使窗體閃爍。

實現過程

(1)建立一個項目,將其命名爲Ex01_33,默認窗體爲Form1。

(2)在窗體上添加PictureBox控件用來顯示窗體;添加Button、Timer控件用來開始和中止閃爍。

(3)設置PictureBox控件的Image屬性。

(4)主要程序代碼。

timer1的Tick事件處理代碼以下:

        private void timer1_Tick(object sender, EventArgs e)

        {

            FlashWindow(this.Handle,true);

        }

【開始閃爍】按鈕的單擊事件,用來啓動窗體閃爍:

        private void button1_Click(object sender, EventArgs e)

        {

            timer1.Enabled = true;

        }

【中止】按鈕的單擊事件,用來中止窗體的閃爍:

        private void button2_Click(object sender, EventArgs e)

        {

            timer1.Enabled = false;

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  利用Visible屬性製做一個閃爍的圖片。

  製做一個閃爍的按鈕。

 

實例034 直接在窗體上繪圖

實例說明

含有Graphics對象的控件都可以在其上進行繪圖,不少軟件就是經過Graphics對象來美化程序的主界面,由於窗體中含有Graphics對象,因此能夠將窗體看做一個大畫板,一個能夠在上面繪圖的特殊控件。本例設計了一個簡單的繪圖軟件,該軟件就利用了在窗體上繪圖的方法,運行本軟件能夠在窗體上進行繪圖。實例效果如圖1.34所示。

技術要點

窗體中含有Graphics對象,使用該對象就可以完成大部分繪圖功能,Graphics對象已經對Windows底層的一些繪圖API進行了封裝,使用起來比較方便。下面介紹Graphics對象的經常使用方法。

Graphics.DrawLine繪圖方法用來繪製一條鏈接由座標對指定的兩個點的線條。其語法結構以下:

public void DrawLine (Pen pen,int x1,int y1,int x2,int y2)

參數說明以下。

l     pen:Pen對象,肯定線條的顏色、寬度和樣式。

l     x1:第一個點的x座標。

l     y1:第一個點的y座標。

l     x2:第二個點的x座標。

l     y2:第二個點的y座標。

實現過程

(1)建立一個項目,將其命名爲Ex01_34,默認窗體爲Form1。

(2)向Form1窗口中添加GroupBox控件,用做RadioButton控件的容器;添加Button控件用來推出程序。

(3)主要程序代碼。

在窗體單元的private中添加變量以下:

        int startX,startY;

        Graphics g;

單擊鼠標事件。具體代碼以下:

        private void Form1_MouseDown(object sender, MouseEventArgs e)

        {

            startX=e.X;

            startY = e.Y;

        }

鼠標在窗體中的移動事件。具體代碼以下:

        private void Form1_MouseMove(object sender, MouseEventArgs e)

        {

             g = this.CreateGraphics( );

            Pen p = new Pen(Color.Black, 1);

            if(radioButton2.Checked==true)

            {

                g.DrawRectangle(p, e.X, e.Y, 1, 1);

            }

        }

鼠標擡起事件。具體代碼以下:

        private void Form1_MouseUp(object sender, MouseEventArgs e)

        {

            g = this.CreateGraphics( );

            Pen p = new Pen(Color.Black, 2);

            if (radioButton1.Checked == true )

            {

                g.DrawLine(p, startX, startY, e.X, e.Y);

            }

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  改變畫筆的顏色。

  在窗體上繪製矩型。

 

實例035 動畫形式的程序界面

實例說明

在不少的程序界面中,都是以菜單或工具欄的形式顯示窗體界面,這種顯示方式是以靜止狀態顯示的,界面不夠生動。下面介紹一個以動畫顯示窗體界面的設計方法。運行本例,效果如圖1.35所示。

技術要點

在該實例中用到了Microsoft Animation Control 6.0(SP4)COM組件,因此要從工具箱「選擇項」中將該組件添加到工具箱,而後繼續將該組件從工具箱添加到窗體便可。下面介紹本例中用到的相關方法。

AxAnimation.open方法用來播放動畫文件。其結構以下:

Public void AxAnimation.open(string bstrFilename)

參數說明以下。

l     bstrFilename:將要播放的文件名。

注意:由於使用了AxAnimation類,因此要添加對WMPLib命名空間的引用。

實現過程

(1)建立一個項目,將其命名爲Ex01_35,默認窗體爲Form1。

(2)在Form1窗體添加PictureBox控件用來顯示圖片,添加Microsoft Animation Control 6.0 (SP4)COM組件用來播放動畫。

(3)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            axAnimation1.Open("Electron.avi");

            axAnimation2.Open("zybiao.avi");

            axAnimation3.Open("gd.avi");

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  製做摸擬網頁。

  製做動畫播放器。

 

1.10 標題欄窗體

本節主要是對窗體的標題欄進行設置,標題欄是一個顯著的位置,在這個位置添加按鈕或進行一些個性化的設置,都會給人一種新奇的感受。經過如下實例的學習,讀者將掌握此技術。

 

實例036 使窗體標題欄文字右對齊

實例說明

窗口標題欄中的文字是窗口的重要說明,該文字能夠標示窗口的功能、狀態或名稱等信息,通常該文字是居左顯示的,在本例中設計一個標題欄文字右對齊的窗口。本實例運行結果如圖1.36所示。

技術要點

在C# 2.0中實現這一功能很是容易,只需將窗體的RightToLeft屬性設置爲Yes便可。

Form. RightToLeft屬性用來獲取或設置一個值,該值指示是否將控件的元素對齊以支持使用從右向左的字體的區域設置,其語法結構以下:

public virtual RightToLeft RightToLeft { get; set; }

l     屬性值:RightToLeft值之一。默認爲Inherit。

實現過程

(1)建立一個項目,將其命名爲Ex01_36,默認窗體爲Form1。

(2)爲Form1窗體添加背景圖片。

(3)設置RightToLeft屬性爲Yes。

觸類旁通

根據本實例,讀者能夠開發如下程序。

  利用Timer控件使窗體標題欄的文字進行左右閃動。

  製做窗體標題欄滾動播放圖片的窗體。

 

實例037 沒有標題欄可義改變大小的窗口

實例說明

隱藏Windows窗口的標題欄以後,窗口只剩下一個客戶區域,有點像Panel控件在窗口中的樣子,而這樣的窗口一般是不可以改變大小的。由於屏蔽其標題欄以後,窗口默認將邊框也去除了,本例將用特殊的方法創建一個沒有標題欄可是能夠改變其大小的窗體。實例運行效果如圖1.37所示。

技術要點

窗口的樣式是在窗口創建時肯定的,在C#中實現窗體沒有標題欄可是能夠改變大小的窗口,有一個巧妙的方法就是將窗體的Text屬性設爲空,同時將ControlBox屬性設爲False。下面介紹一下相關的屬性。

ControlBox屬性用來獲取或設置一個值,該值指示在該窗體的標題欄中是否顯示控件框,其語法結構以下:

public bool ControlBox { get; set; }

l     屬性值:若是該窗體在窗體的左上角顯示控件框,則爲True;不然爲False。默認爲True。

實現過程

(1)建立一個項目,將其命名爲Ex01_37,默認窗體爲Form1。

(2)在Form1窗口中添加Label、Button控件,用來設計界面。

(3)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            ControlBox = false;

        }

注意:必須將窗體的Text屬性設爲空。

觸類旁通

根據本實例,讀者能夠開發如下程序。

  在窗體顯示時最小化。

 

  在窗體顯示時最大化。1.11  設置窗體位置

在許多的軟件中,都會對窗體的大小、位置和移動進行限定。在不一樣分辨率的顯示器中如何正確顯示窗體、如何設置窗體始終在最上面,這些都須要本節的技術。

 

實例038 設置窗體在屏幕中的位置

實例說明

在窗體中能夠設置窗體居中顯示,本例經過設置窗體的Left屬性和Top屬性能夠準確設置窗體的位置。運行本例,效果如圖1.38所示。

技術要點

設置窗體在屏幕中的位置,能夠經過設置窗體的屬性來實現。窗體的Left屬性表示窗體距屏幕左側的距離,Top屬性表示窗體距屏幕上方的距離。

實現過程

(1)建立一個項目,將其命名爲Ex01_38,默認窗體爲Form1。

(2)在窗體上添加Label控件;添加TextBox控件用來輸入距屏幕的距離;添加Button控件用來設置窗體在屏幕上的位置。

(3)主要程序代碼。

        private void button1_Click(object sender, EventArgs e)

        {

            this.Left = Convert.ToInt32(textBox1.Text);

            this.Top = Convert.ToInt32(textBox2.Text);

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  根據分辨率的變化動態設置窗體位置。

  用Timer控件實時顯示窗體位置。

 

實例039 始終在最上面的窗體

實例說明

Windows桌面上容許多個窗體同時顯示,可是隻有一個窗體可以獲得焦點,當一個窗體獲得焦點後在其上面的窗體會被獲得焦點的窗體遮擋,獲得焦點的窗體會顯示在最上層,這樣被覆蓋的窗體就不能徹底的顯示給用戶,若是該窗體中具備實時性和比較重要的信息時,須要該窗口始終在最上層。本例就實現了此功能,運行本例後,主窗體會始終在桌面的最上面。實例效果如圖1.39所示。

技術要點

在其餘開發環境中實現窗體始終在最上面比較複雜,但在C# 2.0中實現很是簡單,只要將TopMost屬性設爲True便可。下面介紹一下TopMost屬性。

Form.TopMost屬性用來獲取或設置一個值,指示該窗體是否應顯示爲最頂層窗體。其結構以下:

public bool TopMost { get; set; }

l     屬性值:若是將窗體顯示爲最頂層窗體,則爲True;不然爲False。默認爲False。

實現過程

(1)建立一個項目,將其命名爲Ex01_39,默認窗體爲Form1。

(2)爲Form1窗體添加背景圖片,並設置窗體TopMost屬性爲True。

觸類旁通

根據本實例,讀者能夠開發如下程序。

  能夠將設爲最上層的窗體設置成爲一個電子錶,以便觀看時間。

  能夠將設爲最上層的窗體設置成爲一個工做計劃表,以便隨時提醒本身。

 

1.12 設置窗體大小

用戶打開軟件後首先看到的就是窗體和窗體上的控件,如何設置窗體的大小及合理的設置窗體和控件的關係就變得十分重要,下面的實例將介紹這方面的知識。

 

實例040 限制窗體大小

實例說明

Windows窗體是能夠隨意改變大小的,然而對於一些要求嚴格的窗體,開發人員不但願用戶隨意的改變其大小,例如,定位準確的地圖和遊戲軟件等。遇到這種狀況必須對窗口的大小進行一些限制。本例設計一個限制了大小的窗體,用戶雖然能夠改變其大小,可是,大小的範圍是受到限制的。實例效果如圖1.40所示。

技術要點

在此C#中實現限制大小很是方便,只要設置窗體的最大和最小範圍便可。下面介紹一下相關屬性。

Form.MinimumSize屬性用來獲取或設置窗體可調整到的最小大小,其語法格式以下:

public override Size MinimumSize { get; set; }

l     屬性值:Size,表示該窗體的最小大小。

Form.MaximumSize屬性用來獲取或設置窗體可調整到的最大大小,其語法格式以下:

public override Size MaximumSize{ get; set; }

l     屬性值:Size,表示該窗體的最大大小。

實現過程

(1)建立一個項目,將其命名爲Ex01_27,默認窗體爲Form1。

(2)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            MinimumSize = new Size(200, 200);

            MaximumSize = new Size(400, 400);

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  在窗體顯示時規定其大小。

  在窗體運行時規定其大小。

 

實例041 獲取桌面大小

實例說明

獲取桌面分辨率可使用API函數GetDeviceCaps,但API函數參數較多,使用不方便,如何更方便的獲取桌面分辨率呢?在本例中,經過讀取Screen對象的屬性,來獲取桌面分辨率信息,以像素爲單位。運行本例,效果如圖1.41所示。

技術要點

C#中提供了Screen對象,在該對象中封裝了屏幕相關信息。能夠經過讀取Screen對象的相關屬性,來獲取屏幕的信息,Screen.PrimaryScreen.WorkingArea.Width用於讀取桌面寬度;Screen.PrimaryScreen.WorkingArea.Height能夠讀取桌面的高度。下面介紹一下相關屬性。

Screen.PrimaryScreen.WorkingArea屬性用於獲取顯示器的工做區。工做區是顯示器的桌面區域,不包括任務欄、停靠窗口和停靠工具欄。其結構以下:

public Rectangle WorkingArea { get; }

l     屬性值:一個Rectangle,表示顯示器的工做區。

實現過程

(1)建立一個項目,將其命名爲Ex01_41,默認窗體爲Form1。

(2)在Form1窗體上添加一個Button控件,用來獲取桌面大小;添加兩個TextBox控件,用來輸出所獲取的桌面大小。

(3)主要程序代碼。

        private void button1_Click(object sender, EventArgs e)

        {

            textBox2.Text = Screen.PrimaryScreen.WorkingArea.Height.ToString( );

            textBox1.Text = Screen.PrimaryScreen.WorkingArea.Width.ToString( );

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  根據顯示器的分辨率信息設置窗體大小及位置。

  根據顯示器的分辨率信息調整窗體界面。

 

實例042 在窗口間移動按扭

實例說明

窗體中每一個可視控件都有全部者和父對象兩個重要屬性,全部者是控件創建時指定的所屬對象,該對象能夠是不可視控件,而父對象必須是可視控件。所以能夠經過窗體中可視控件的Parent屬性來判斷控件是否在這個窗體中,還能夠用Form.Controls.Add( )方法爲窗體添加控件。本例以一個能夠在窗口間移動的按鈕來演示父對象改變後的運行效果。運行本例,在窗口中單擊按鈕,按鈕就會移動到另一個窗口中。實例效果如圖1.42和圖1.43所示。

圖1.42  在窗口間移動按鈕                          圖1.43  在窗口間移動按鈕

技術要點

可視控件包含一個Parent屬性,該屬性表示控件的父對象。通常將此屬性設置爲一個窗口。經過該屬性能夠控制所屬窗體。

實現過程

(1)建立一個項目,將其命名爲Ex01_42,默認窗體爲Form1。

(2)添加一個窗體,默認窗體的Name屬性爲Form2。

(3)在Form1窗口中添加一個Button控件。併爲Form1和Form2設置背景圖片。

(4)主要程序代碼。

單擊按鈕在兩個窗體之間移動,具體代碼以下:

        private void button1_Click(object sender, EventArgs e)

        {

            if (button1.Parent == this)

            {

                f.Controls.Add(this.button1);

                this.button1.Text = "返回原地";

            }

            else

            {

                this.Controls.Add(button1);

                this.button1.Text = "開始移動";

            }

        }

Form1窗體加載時同時顯示Form2窗體,具體代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            f = new Form2( );

            f.Show( );

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  試作從一個窗體將控件拖到另外一個窗體。

  試作用一個窗體控制另外一個窗體。

 

實例043 如何實現Office助手

實例說明

用過Office的人都知道,Office助手是一個很是漂亮的小工具,有了它,即便對Office不太熟悉的用戶也能夠操做自如。本實例使用C#製做了一個相似Office助手的程序,實例效果如圖1.44所示。

技術要點

要實現Office助手效果,須要使用Microsoft提供的第3方控件。在工具箱中單擊「選擇項」,從彈出的對話框中選擇COM組件選項卡中的Microsoft Agent Control 2.0組件並加入工具箱中,而後再添加到窗體中。

實現過程

(1)建立一個項目,將其命名爲Ex01_43,默認窗體爲Form1。

(2)在Form1窗體上添加一個ListBox控件用來讓用戶選擇人物的動做。

(3)主要程序代碼。

聲明成員變量及字符串數組,具體代碼以下:

        IAgentCtlCharacterEx ICCE;

        IAgentCtlRequest ICR;

        string[] ws = new string[10] { "Acknowledge", "LookDown", "Sad", "Alert", "LookDownBlink", "Search", "Announce", "LookUp", "Think", "Blink"};

爲ListBox添加選項的實現代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            for (int i = 0; i < 10; i++)

            {

                listBox1.Items.Add(ws[i]);

            }

            ICR = axAgent1.Characters.Load("merlin", "merlin.acs");

            ICCE = axAgent1.Characters.Character("merlin");

            ICCE.Show(0);

        }

隨着選項改變Office表情的實現代碼以下:

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            ICCE.StopAll("");

            ICCE.Play(ws[listBox1.SelectedIndex]);

        }

觸類旁通

根據本實例,讀者能夠實現如下程序。

  瑞星助手。

  在本身的程序中加入Office助手。

 

實例044 在關閉窗口前加入確認對話框

實例說明

用戶對程序進行操做時,不免會有錯誤操做的狀況,例如不當心關閉程序,若是尚有許多資料沒有保存,那麼損失將很是嚴重,因此最好使程序具備靈活的交互性。人機交互過程通常都是經過對話框來實現的,對話框中有提示信息,而且提供按鈕讓用戶選擇,例如【是】或【否】。這樣用戶就可以對所作的動做進行確認。正如前面所說的不當心關閉程序,若是在關閉程序以前提示用戶將要關閉程序,而且提供用戶選擇是否繼續下去,這樣就大大減小了誤操做現象。本例程序中的窗口在關閉時會顯示一個對話框,該對話框中有兩個按鈕【是】與【否】表明是否贊成關閉程序操做。實例運行結果如圖1.45所示。

技術要點

窗口正要關閉可是沒有關閉以前會觸發FormClosing事件,該事件中的參數FormClosingEventArgs e中包含Cancel屬性,若是設置該屬性爲True,窗口將不會被關閉。因此在該事件處理代碼中能夠提示用戶是否關閉程序,若是用戶不想關閉程序,則設置該參數爲True。利用MessageBox參數的返回值能夠知道用戶所選擇的按鈕。下面詳細介紹一下相關屬性。

CancelEventArgs.Cancel屬性用來獲取或設置指示是否應取消事件的值。該屬性結構以下:

public bool Cancel { get; set; }

l     屬性值:若是應取消事件,則爲True;不然爲False。

實現過程

(1)建立一個項目,將其命名爲Ex01_44,默認窗體爲Form1。

(2)主要程序代碼。

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            if (MessageBox.Show("將要要關閉窗體,是否繼續?", "詢問", MessageBoxButtons.YesNo) == DialogResult.Yes)

            {

                e.Cancel = false;

            }

            else

            {

                e.Cancel = true;

            }

        }

觸類旁通

根據本實例,讀者能夠實現如下程序。

  使窗體的關閉按鈕無效。

  使窗體關閉出如今托盤中。

 

實例045 使用任意組件拖動窗體

實例說明

一般將鼠標按住窗口的標題欄纔可以拖動窗口,可是,在沒有窗口標題欄的狀況下如何拖動窗體呢?本例將會利用窗口中的控件拖動窗口,將鼠標放在按鈕上而後按住鼠標左鍵移動鼠標便可拖動窗體。實例效果如圖1.46所示。

技術要點

經過控件移動窗體時,須要判斷用戶的鼠標動做。用戶準備拖動窗體時必須在控件上按住鼠標左鍵,因此應該在鼠標MouseDown事件處理過程當中來實現窗體的拖動。當用戶在按鈕上將鼠標左鍵按下時,觸發MouseDown事件,在該事件處理代碼中,MouseEventArgs e的Button屬性記錄了當前按下的鼠標按鈕,若是按鍵是鼠標左鍵,則表示能夠移動窗口,鼠標移動時,窗體就能夠跟着移動了。

實現過程

(1)建立一個項目,將其命名爲Ex01_45,默認窗體爲Form1。

(2)在Form1窗體上添加兩個Button控件,分別用來拖動窗體和關閉窗體。而後設置窗體的背景顏色。

(3)主要程序代碼。

聲明記錄鼠標按下時初始位置的變量,具體代碼以下:

        private int startX, StartY;

鼠標按下事件處理代碼,具體代碼以下:

        private void button1_MouseDown(object sender, MouseEventArgs e)

        {

            if (e.Button == MouseButtons.Left)

            {

                startX = e.X;

                StartY = e.Y;

            }

        }

鼠標移動事件處理代碼,具體代碼以下:

        private void button1_MouseMove(object sender, MouseEventArgs e)

        {

            if (e.Button == MouseButtons.Left)

            {

                this.Left += e.X - startX;

                this.Top += e.Y - StartY;

            }

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  能夠用窗體的用戶區拖動窗體。

  不能夠拖動的窗體。

 

實例046 修改提示字體及顏色

實例說明

若是設置了控件的ToolTip屬性,當鼠標移到該控件後,會提示相關的文本,但沒有提供對提示字體及顏色的設置屬性,如何改變提示文本的樣式和字體呢?本例能夠設置提示文本的字體及顏色。運行本例,效果如圖1.47所示。

技術要點

C# 2.0中提供了ToolTip控件,能夠指定關聯控件併爲每一個控件提供提示文本,其中ToolTipTitle屬性指定文本提示盒中的文本。下面介紹相關的屬性和方法。

(1)SetToolTip方法

使工具提示文本與指定的控件相關聯。其語法結構以下:

public void SetToolTip (Control control,string caption)

參數說明以下。

l     control:要將工具提示文本與其關聯的Control。

l     caption:指針位於控件上方時要顯示的工具提示文本。

(2)ToolTip.ToolTipTitle屬性

獲取或設置工具提示窗口的標題。其語法結構以下:

public string ToolTipTitle { get; set; }

l     屬性值:包含窗口標題的String。該標題在窗口中做爲一行粗體文本顯示在標準的工具提示控件說明文本的上方。一般,標題只用於區分窗體上不一樣類別的控件,或做爲較長控件說明的簡介。

實現過程

(1)建立一個項目,將其命名爲Ex01_46,默認窗體爲Form1。

(2)在Form1窗體上添加Button控件用來在其上方顯示提示文本;添加ToolTip控件用來設計提示文本。

(3)主要程序代碼。

設置提示文本,及提示文本的關聯控件,具體代碼以下:

        private void Form1_Load(object sender, EventArgs e)

        {

            this.toolTip1.OwnerDraw = true;

            this.toolTip1.SetToolTip(this.button1,"設置提示的字體及顏色");

            this.toolTip1.Draw += new DrawToolTipEventHandler(toolTip1_Draw);

        }

設置文本的提示樣式,具體代碼以下:

        void toolTip1_Draw(object sender, DrawToolTipEventArgs e)

        {

           // throw new Exception("The method or operation is not implemented.");

            e.DrawBackground( );

            e.DrawBorder( );

            using (StringFormat sf = new StringFormat( ))

            {

                sf.Alignment = StringAlignment.Center;

                sf.LineAlignment = StringAlignment.Center;

                sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.None;

                sf.FormatFlags = StringFormatFlags.NoWrap;

                using (Font f = new Font("宋體", 12))

                {

                    e.Graphics.DrawString(e.ToolTipText, f,

                        SystemBrushes.ActiveCaptionText, e.Bounds, sf);

                }

            }

        }

觸類旁通

根據本實例,讀者能夠實現如下功能。

  修改任意控件提示文本的樣式。

  提示時加提示的聲音。

 

1.14

本節主要介紹瞭如何建立和關閉MDI窗體。在大型項目和產品的開發中經常將系統設計爲MDI界面。

 

實例047 如何爲MDI類型窗體設置背景圖片

實例說明

MDI窗體是一種應用很是普遍的窗體類型,在一個主窗體內包含多個子窗體,子窗體永遠不會顯示在主窗體的外面。當子窗體不能徹底的顯示在主窗體中時,主窗體會顯示滾動條來調整可視範圍,在其餘開發環境中爲MDI窗體添加背景圖片十分困難。但在C# 2.0中實現很是容易。在本例中實現了一個具備背景的MDI窗體。實例效果如圖1.48所示。

技術要點

在C# 2.0中直接提供了BackgroundImage 屬性,該屬性能夠直接設置窗體的背景圖片。設置IsMdiContainer屬性爲True可使窗體成爲MDI主窗體。下面詳細介紹一下相關屬性。

(1)BackgroundImage屬性

獲取或設置在控件中顯示的背景圖像。其語法結構以下:

public virtual Image BackgroundImage { get; set; }

l     屬性值:一個Image,表示在控件的背景中顯示的圖像。

(2)Form.IsMdiContainer屬性

獲取或設置一個值,該值指示窗體是否爲多文檔界面(MDI)子窗體的容器。其語法結構以下:

public bool IsMdiContainer { get; set; }

l     屬性值:若是該窗體是MDI子窗體的容器,則爲True;不然爲False。默認爲False。

此屬性將窗體的顯示和行爲更改成MDI父窗體。當此屬性設置爲True時,該窗體顯示具備凸起邊框的凹陷工做區。全部分配給該父窗體的MDI子窗體都在該父窗體的工做區內顯示。

實現過程

(1)建立一個項目,將其命名爲Ex01_47,默認窗體爲Form1。

(2)添加一個窗體,默認窗體的Name屬性爲Form2。

(3)爲Form1窗體中添加背景圖片。

(4)設置Form1窗體的IsMdiContainer屬性爲True,該窗口做爲MDI主窗體。

(5)主要程序代碼。

        private void Form1_Load(object sender, EventArgs e)

        {

            Form2 f = new Form2( );

            f.MdiParent = this;

            f.Show( );

        }

觸類旁通

根據本實例,讀者能夠開發如下程序。

  爲非MDI窗體制做背景。

  爲MDI子窗體設定顯示區域。

相關文章
相關標籤/搜索