C#470多例winform 界面特效的源碼


一共470多例winform 界面特效的源碼。

窗體與界面設計... 9

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

實例002  菜單動態合並    12

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

實例004  任務欄托盤菜單    15

實例005  可以拉伸的菜單界面    16

實例006  菜級聯菜單    18

1.2  工具欄設計... 19

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

實例008  帶浮動工具欄    20

實例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子窗體設定顯示區域。

 

源碼:http://files.cnblogs.com/jara/C_%E5%AE%9E%E4%BE%8B.net_%E7%BB%8F%E5%85%B8%E4%BE%8B%E5%AD%90400%E4%B8%AA.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM