C# winForm


應用程序實例——用戶信息管理

下面用我們學過的知識創建一個應用程序實例,演示MDI窗體的用法,此窗體包括菜單,工具欄和狀態欄。用戶選擇“創建用戶”菜單中“創建學員賬戶”菜單項,或者單擊工具欄上的“創建”按鈕后,將顯示“frmNewUser”窗體。使用“菜單管理”命令可動態添加上下文菜單,狀態欄顯示日期和當前窗體名稱,選擇“退出系統”菜單可退出系統。

創建步驟如下:
1、創建一個名為“UserManage”的Windows應用程序。
2、將Form1改為frmUserManage,作為主窗體,將其“IsMdiContainer”屬性值設置為true,這個窗體成為子窗體的窗器。
3、將菜單欄(MenuStrip)、工具欄(ToolStrip)、和狀態欄(StatusStrip)控件拖到窗體上,建成界面。

C winForm - yuanjinlin08 - 魔獸世界

4、將以下代碼添加到frmUserManage的Load事件中。
        private void frmUserManage_Load(object sender, EventArgs e)
        {
            this.toolStripStatusLabel1.Text = DateTime.Now.ToString();
        }

以上代碼實現窗體載入時,在狀態欄的Label標簽中顯示當前時間。

5、在項目上右擊,打開關聯菜單,選擇“添加新項”—“Windows窗體”命令,打開“添加新項”對話框,修改名稱為“frmNewUser”,單擊“確定”按鈕。窗體界面如下:
C winForm - yuanjinlin08 - 魔獸世界

6、將以下代碼添加到“創建學生用戶的菜單”中

        private void 創建學生用戶ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmNewUser user = new frmNewUser();
            user.MdiParent = this;
            user.WindowState = FormWindowState.Maximized;
            user.Show();
            this.toolStripStatusLabel2.Text = this.ActiveMdiChild.ToString();
        }

C winForm - yuanjinlin08 - 魔獸世界

以上代碼實現選擇“創建學生用戶”菜單時,打開frmNewUser窗體,作為子窗體打開,並在主窗體的狀態欄中顯示當前活動窗體的信息。
7、將以下代碼加到“退出”菜單項和工具欄的“退出”按鈕中。

        private void 退出EToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

8、將以下代碼添加到“用戶管理”菜單項的Click事件中。
        private void 用戶管理ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ContextMenuStrip mnuContext = new ContextMenuStrip();
            this.ContextMenuStrip = mnuContext;
            mnuContext.Items.Add("創建用戶");
            mnuContext.Items.Add("查詢用戶");
            mnuContext.Items.Add("退出系統");
       }
該代碼用於動態創建應用程序上下文菜單。

9、對於實現的功能鍵,添加一個提示信息,代碼如下:
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("正在建設中");
        }

編譯並運行,首先出現的是主窗體,單擊“創建”按鈕,frmNewUser窗體作為子窗體顯示在主窗體中。

C winForm - yuanjinlin08 - 魔獸世界


 

 

 

C# winForm 將窗體狀態欄StatusStrip示例(顯示當前時間)


實現效果:通過StatusStrip顯示窗體狀態欄,同時將狀態欄分成三部分:

居左邊顯示相關文字信息,中間空白顯示,居右邊顯示時間信息。

1.創建窗體及添加StatusStrip

默認StatusStrip名稱為statusStrip1

2.在statusStrip1的Items屬性中

添加三個StatusLabel

默認名稱為toolStripStatusLabel1,2,3

按1,2,3的順序排列

3.修改toolStripStatusLabel1的Text屬性

為相關文字如"歡迎使用本系統"

4.修改toolStripStatusLabel2的Text屬性 為空

Sprint屬性為True

BorderSides屬性為Left,Right

5.修改toolStripStatusLabel3的Text屬性 為空

在Form的Load事件中 修改其顯示為當前時間

this.toolStripStatusLabel3.Text = "登錄時間:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

6.如果要使狀態欄時間信息隨操作系統當前時間不停的改變

則可以通過增加Timer控件來實現

增加Timer控件 timer1

編寫其Tick事件為

private void timer1_Tick(object sender, EventArgs e)

{

      this.toolStripStatusLabel3.Text = "系統當前時間:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

}

 

在Form的Load事件中 對timer1進行相關設置

private void MainForm_Load(object sender, EventArgs e)

{

    this.toolStripStatusLabel3.Text = "系統當前時間:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

    this.timer1.Interval=1000;

    this.timer1.Start();

}

 

C#windows服務中的Timer控件的使用

C#windows服務程序中的Timer控件的使用是什么情況呢?那么本文就C#windows服務程序中的Timer控件的使用問題向你介紹相關的操作。


 

C# windows服務程序中的Timer控件的使用問題是如何解決的呢?

今天和同事一起研究了下C# windows服務程序中的Timer控件的使用的寫法.

我們在建立一個C# windows服務程序后,要用到計時器的話一般都會想到Timer控件,於是到工具器把Timer控件拉過來,雙擊寫事件,設置時間,哇,成功了....

但服務一跑起來,唉,怎么回事,時間到了怎么沒有執行事件呢?

后來,我找很多資料才知道,這個Timer控件是winForm下的,不能用在C# windows服務程序中.

怎么辦呢.......

打開"工具箱"---右鍵---"選擇項"---找到Timer控件,看好了,這個Timer控件的是system.Timer下的.可不是System.Windows.Form.然后添加.

Timer控件的使用

雙擊...寫事件...

OK,搞定

C#windows服務程序中的Timer控件的使用的相關操作就向你介紹到這里,希望對你了解C#windows服務程序中的Timer控件的使用有所幫助。

Windows Forms高級界面組件-Timer控件實例

要求顯示計算機運行的時間長度和應用程序運行的時間長度,界面如圖
C winForm - yuanjinlin08 - 魔獸世界

代碼如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Example_1
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class frmTickCounter : System.Windows.Forms.Form
{
private System.Windows.Forms.Label lblComputer;
private System.Windows.Forms.Label lblApplication;
private System.Windows.Forms.GroupBox grpElapsed;
private System.Windows.Forms.Button btnClose;
private System.Windows.Forms.Timer tmrTickTimer;
private System.ComponentModel.IContainer components;
private int compuTime;
public frmTickCounter()
{
InitializeComponent();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.grpElapsed = new System.Windows.Forms.GroupBox();
this.lblApplication = new System.Windows.Forms.Label();
this.lblComputer = new System.Windows.Forms.Label();
this.btnClose = new System.Windows.Forms.Button();
this.tmrTickTimer = new System.Windows.Forms.Timer(this.components);
this.grpElapsed.SuspendLayout();
this.SuspendLayout();
//
// grpElapsed
//
this.grpElapsed.Controls.Add(this.lblApplication);
this.grpElapsed.Controls.Add(this.lblComputer);
this.grpElapsed.Font = new System.Drawing.Font( "Microsoft Sans Serif ", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.grpElapsed.Location = new System.Drawing.Point(8, 8);
this.grpElapsed.Name = "grpElapsed ";
this.grpElapsed.Size = new System.Drawing.Size(600, 120);
this.grpElapsed.TabIndex = 0;
this.grpElapsed.TabStop = false;
this.grpElapsed.Text = "開機時長 ";
//
// lblApplication
//
this.lblApplication.Location = new System.Drawing.Point(16, 72);
this.lblApplication.Name = "lblApplication ";
this.lblApplication.Size = new System.Drawing.Size(576, 26);
this.lblApplication.TabIndex = 1;
//
// lblComputer
//
this.lblComputer.Location = new System.Drawing.Point(16, 32);
this.lblComputer.Name = "lblComputer ";
this.lblComputer.Size = new System.Drawing.Size(576, 26);
this.lblComputer.TabIndex = 0;
//
// btnClose
//
this.btnClose.Location = new System.Drawing.Point(488, 136);
this.btnClose.Name = "btnClose ";
this.btnClose.Size = new System.Drawing.Size(115, 26);
this.btnClose.TabIndex = 1;
this.btnClose.Text = "關閉 ";
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// tmrTickTimer
//
this.tmrTickTimer.Enabled = true;
this.tmrTickTimer.Interval = 20;
this.tmrTickTimer.Tick += new System.EventHandler(this.tmrTickTimer_Tick);
//
// frmTickCounter
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(616, 173);
this.Controls.Add(this.btnClose);
this.Controls.Add(this.grpElapsed);
this.Name = "frmTickCounter ";
this.Text = "時鍾 ";
this.Load += new System.EventHandler(this.frmTickCounter_Load);
this.grpElapsed.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new frmTickCounter());
}
private void frmTickCounter_Load(object sender, System.EventArgs e)
{
compuTime = Environment.TickCount;
}
private void tmrTickTimer_Tick(object sender, System.EventArgs e)
{
//Environment類提供有關當前環境和平台的信息以及操作它們的方法
long curTickValue = Environment.TickCount;
long difference = curTickValue - compuTime;
long computerHours, computerMinutes, computerSeconds;
long applicationHours, applicationMinutes, applicationSeconds;
//converting milliseconds into hours, minutes and seconds computerHours = (curTickValue / (3600 * 999)) % 24;
computerHours = (curTickValue / (3600 * 999)) % 24;
computerMinutes = (curTickValue / (60 * 999)) % 60;
computerSeconds = (curTickValue / 999) % 60;
applicationHours = (difference / (3600 * 999)) % 24;
applicationMinutes = (difference / (60 * 999)) % 60;
applicationSeconds = (difference / 999) % 60;
this.lblComputer.Text = String.Format( "本計算機已運行了 {0} 小時 {1} 分 {2} 秒 ", computerHours.ToString(), computerMinutes.ToString(),
computerSeconds.ToString());
this.lblApplication.Text = String.Format( "本應用程序已運行了 {0} 小時 {1} 分 {2} 秒 ",
applicationHours.ToString(), applicationMinutes.ToString(),
applicationSeconds.ToString());
}
private void btnClose_Click(object sender, System.EventArgs e)
{
this.Close();
}
}
}

以上代碼是別人源碼,我雖然在機器上運行過,但對其每行的意義不是很了解,希望朋友們多多指導!

Windows Forms高級界面組件-Timer控件

Timer控件提供了一種可在程序運行時操控時間的機制。它是一種非可視化控件,不向用戶提供用戶界面,因此在運行時不會顯示在界面上。它類似與時鍾,在指定的時間間隔不斷記時,時間一到即觸發事件,執行預設的動作。
Timer控件的主要屬性
    Enabled:用於設置是否啟用定時器
    Interval:設置時鍾周期,單位ms
Timer控件的主要事件
    Tick::設定的時間到,觸發該事件
Timer控件的主要方法
    Start():啟動時鍾進行計時。
    Stop():停止時鍾

Interval屬性用來決定每隔多長的時間要引發回送,其設置值的單位是毫秒(也就是千分之一秒),默認值則是60000毫秒,也就是60秒。這里需要大家注意的是,將Timer控件的Interval屬性設置成較小的值會使得回送頻率增加,也很容易使得Web服務器的流量大增,對整體資源耗用與效率都會造成不良的影響。因此盡量在確實需要的時候使用Timer控件來定時更新頁面上的內容。

每當Timer控件的Interval屬性所設置的間隔時間到達而進行回送時,就會在服務器上引發Tick事件。我們通常會為Tick事件處理函數編寫程序代碼,以便能夠根據自己的需求來定時執行特定操作。

另外一個常用的屬性就是Enabled,用戶可以將Enabled屬性設置成false以便讓Timer控件停止計時,而當需要讓Timer控件再次開始計時的時候,只需再將Enabled屬性設置成True即可。

Timer控件在UpdatePanel控件的內外是有區別的。當Timer控件在UpdatePanel控件內部時,JavaScript計時組件只有在一次回傳完成進才會重新建立。也就說直到網頁回傳之前,定時器間隔時間不會從頭計算。例如,用戶設置Timer控件的Interval屬性值為6000ms(6s),但是回傳操作本身卻花了2s才完成,則下一次的回傳將發生在前一次回傳被引發之后的8s。而如果Timer控件位於UpdatePanel控件之外,則當回傳正在處理時,下一次的回傳仍將發在前一次回傳被引發之后的6s。也就是說,UpdatePanel控件的內容被更新之后的4s,就會再次看到該控件被更新。


C#解決StatusStrip控件上的項目不能靠右對齊的問題

在C#中用到了狀態欄控件StatusStrip,但當我想把StatusStrip上某個StatusLabel靠右對齊時出了問題。

按照MSDN中的辦法,是設置ToolStripStatusLabel的Alignment屬性為Right。不過我在設計界面的屬性窗口中找不到Alignment。

就算加入代碼toolStripStatusLabel2.Alignment = ToolStripItemAlignment.Right; 也還是沒什么效果。

 

后來我找到兩種方法解決這個問題:

方法一:

在狀態欄所有項目(StatusLabel、ProgressBar、DropDownButton等)前添加一個空白的StatusLabel (Text屬性為空),並將其Spring屬性設為True。

Spring屬性的作用是設置該項是否填滿剩余空間,設為True以后,當程序運行時后面的項就都擠到右邊,實現靠右對齊了。

如果更進一步,需要一部分項靠左,一部分靠右,那就在兩部分中間插入空白StatusLabel,同時設其Spring屬性為True。

這種方法比較簡單,不用手工添加代碼。首選!

 

方法二:

這個方法是我無意中發現的。

設置StatusStrip控件的LayoutStyle屬性為HorizontalStackWithOverflow 或 StackWithOverflow。

然后在代碼中修改狀態欄上某項的Alignment為Right,這次就有靠右的效果了。

例如:this.toolStripStatusLabel1.Alignment = ToolStripItemAlignment.Right;

注意如果是多個項,那靠左對齊的從左往右排列,靠右對齊的從右往左排列。

 

問題是基本解決了,只是我還是不知道為什么在屬性窗口里ToolStripStatusLabel沒有Alignment屬性。從網上搜集的帖子看,好像其他人都沒這個問題啊?


Windows Forms高級界面組件-使用狀態欄控件

狀態欄(StatusStrip)控件通常顯示在窗體的底部,向用戶提供有關應用程序狀態的信息。如Word應用程序使用狀態欄提供頁碼、行數和列數的信息。
StatusStrip派生於ToolStrip,通常由ToolStripStatusLabel對象組成,用於顯示指示狀態的文本或圖標,或者有可以用圖形顯示進程完成狀態的ToolStripProgressBar,其中ToolStatusLabel是默認項,表示StatusStrip控件中的一個面板。ToolStripStatusLabel除具有標簽通用的屬性外,還有AutoSize和DoubleClickEnable兩個常用的屬性。
ToolStripStatusLabel控件屬性:

屬    性

AutoSize

AutoSize在默認狀態下是打開的,這不是非常直觀,因為在改變狀態欄上標簽的文本時,不希望該標簽來回移動,除非標簽上的信息是靜態的,否則總是應把這個屬性改為false

DoubleClickEnable

在這個屬性中,可以指定是否引發DoubleClick事件。也就是說,用戶可以在應用程序的另一個地方修改信息。例如,讓用戶雙擊包含Bold的面板,在文本中啟用或禁用黑體格式

 

 

先了解一下StatusStrip:首選StatusStrip是Form中的一個控件,同時也是一個大的控件,其中含有許多子控件,這些子控件存放在控件群中。

將StatusStrip控件拖到窗體中,單擊該控件右上角的黑色三角,打開“StatusStrip任務欄”,單擊“編輯項”選項,打開“項集合編輯器選項卡”。“StatusStrip”項集合編輯器用於添加、移除和重新排序StasusStrip的ToolStripItem控件,以及查看和設置StatusStrip及ToolStripItem屬性。

單擊“項集合編輯器”左邊組合框,選擇要添加的狀態欄類型,單擊“添加”按鈕,添加的狀態欄項目顯示在“成員”列表框中。采用此方法,可將ToolStripStatusLabel、ToolStripProgressBar、ToolStripDropDownButton、ToolStripSplitButton控件中的一個或多個添加到“成員”列表框中。

這樣我們要使用StatusStrip時,首先要定義StatusStrip,然后定義ToolStrip控件,再次定義ToolStrip控件群,第三將ToolStrip控件加入到控件群中,第四將控件群加入到StatusStrip中,最后要將StatusStrip加入到窗體中。

舉例說明:
本例是在Form窗體中加入任務欄,並在任務欄左邊顯示「Test」。

一、在設計模式下的添加方法為:
在窗體上添加一個StatusStrip控件。在StatusStrip上添加一個ToolStripLabel控件。將ToolStripLabel控件的Text屬性設置成在運行時顯示的消息(即為Test)。

二、 在代碼模式下添加過程即為:
1. 定義StatusStrip
2. 定義控件(ToolStripLabel)
3. 定義控件群(ToolStripItem)
4. 將控件加入控件群(Items.AddRange)
5. 將StatusStrip加入到Form中

public Form1()
{
InitializeComponent();

#region AddStatusStrip

//1. 定義要增加的StatusStrip
StatusStrip sb = new StatusStrip();

//2. 定義StatusStrip項目中的控件,其中ToolStripLabel是一個相似於label的控件,現在用於顯示文字
ToolStripLabel tsl = new ToolStripLabel();
//要顯示的文字內容
tsl.Text = "Test";

//3. 定義StatusStrip中要項目
ToolStripItem[] tsi = new ToolStripItem[1];
tsi[0] = tsl;

//4. 將項目加入到StatusStrip中
sb.Items.AddRange(tsi);

//5. 將StatusStrip加入到窗體中
this.Controls.Add(sb);

#endregion

Windows Forms高級界面組件-使用工具欄控件實例

我們使用以前創建的菜單欄,在窗體中繼續添加工具欄,其中包括工具欄的標准工具和另外3外按鈕:加粗、斜體、和加下划線。添加組合框用於選擇字體。
實現步驟如下:
一、打開以前的項目MenuTest,打開其中的窗體文件Form1。

C winForm - yuanjinlin08 - 魔獸世界

2、在窗體中添加ToolStrip控件,可以看到窗體的下方顯示有“toolStrip”控件。
C winForm - yuanjinlin08 - 魔獸世界

3、添加標准工具欄,單擊“toolStrip1”工具欄右上角黑色按鈕,打開“ToolStrip”任務欄,單擊“插入標准項”選項,即可在工具欄中插入標准工具欄按鈕。
C winForm - yuanjinlin08 - 魔獸世界

4、單擊工具欄上的提示按鈕中黑色三角,打開下拉列表框,在其中單擊“Button”按鈕,可在工具欄中添加一個按鈕。修改“Text”屬性為“B”,“DisplayStyle”屬性設置為“Text”。
5、執行上邊的相同步驟,在工具欄中添加一個按鈕,將其“Text”屬性設置為“I”,並將“Font”屬性中的“Italic”屬性值設置為true,“I”以斜體的方式顯示。
6、單擊工具欄上的提示按鈕中黑色三角,打開下拉列表框,在其中單擊“SplitButton”按鈕,可添加帶下拉選項的按鈕。將“DisplayStyle”屬性設置為“Text”,“Text”屬性值設置為“U”,並將“Font”屬性中的“Underline”屬性值設置為true,“U”以下划線的方式顯示。在打開的菜單項中輸入“下划線”,“雙下划線”等。
C winForm - yuanjinlin08 - 魔獸世界
7、繼續上面的操作,在工具欄上添加“ToolStripComBox”控件,編輯其“Items”屬性,在項目集合編輯器中輸入“黑體”,“宋體”,“楷體”,“仿宋”等
8、編譯並執行程序。結果如圖
C winForm - yuanjinlin08 - 魔獸世界
說明:為工具欄中的工具添加功能的方法和菜單基本相同,在設計窗體中雙擊“工具”按鈕,即可打開按鈕的Click事件,在此處添加處理代碼實現。

 

 

 

Windows Forms高級界面組件-使用工具欄控件


為了使用使用方便,許多應用程序的下面提供了一組附加的小按鈕,單擊這些按鈕可以激活最常用的功能,而不用在菜單欄的菜單中導航。這組按鈕就是工具欄(ToolStrip)。
使用ToolStrip及相關聯的類,可以創建具有Office,IE或自定義外觀和行為的工具欄及其他用戶界面元素。

工具欄上的按鈕通常包含圖片,不包含文本,但它可以既包含圖片又包含文本。例如Word中的工具欄按鈕就不包含文本。包含文本的工具欄按鈕有Internet Explorer中的工具欄。除了按鈕之外,工具欄上偶爾也會有組合框和文本框。如果把鼠標指針停留在工具欄的一個按鈕上,就會顯示一個工具提示,給出該按鈕的用途信息,特別是只顯示圖標時,這是很有幫助的。
ToolStrip與MenuStrip一樣,也具有專業化的外觀和操作方式。在用戶查看工具欄時,希望能把它移動到自己希望的任意位置上。ToolStrip就允許用戶這么做。
第一次把ToolStrip添加到窗體的設計界面上時,它看起來非常類似於前面的MenuStrip,但存在兩個區別:ToolStrip的最左邊有4個垂直排列的點,這與Visual Studio中的菜單相同。這些點表示工具欄可以移動,也可以停靠在父應用程序窗口中。第二個區別是在默認情況下,工具欄顯示的是圖像,而不是文本,所以工具欄上項的默認控件是按鈕。工具欄顯示的下拉菜單允許選擇菜單項的類型。
ToolStrip與MenuStrip完全相同的一個方面是,Action窗口包含Insert Standard Items鏈接。單擊這個鏈接,不會得到與MenuStrip相同的菜單項數,而會得到New、Open、Save、Print、Cut、Copy、Paste和Help等菜單項。
一、ToolStrip控件的屬性

屬    性

描    述

GripStyle

這個屬性控制着4個垂直排列的點是否顯示在工具欄的最左邊。隱藏柵格后,用戶就不能移動工具欄了

 

(續表)      

 

屬    性

描    述

LayoutStyle

設置這個屬性,就可以控制工具欄上的項如何顯示,默認為水平顯示

Items

這個屬性包含工具欄中所有項的集合

ShowItemToolTip

這個屬性允許確定是否顯示工具欄上某項的工具提示

Stretch

默認情況下,工具欄比包含在其中的項略寬或略高。如果把Stretch屬性設置為true,工具欄就會占據其容器的總長

 

 

ToolStrip控件為Windows工具欄對象提供容器,必須聯合使用其他控件,包括按鈕,組合框,文框等其他控件,才能完成工具欄的設計。下面是和ToolStrip相關聯的控件

控    件

描    述

ToolStripButton

這個控件表示一個按鈕。用於帶文本和不帶文本的按鈕

ToolStripLabel

這個控件表示一個標簽。這個控件還可以顯示圖像,也就是說,這個控件可以用於顯示一個靜態圖像,放在不顯示其本身信息的另一個控件上面,例如文本框或組合框

ToolStripSplitButton

這個控件顯示一個右端帶有下拉按鈕的按鈕,單擊該下拉按鈕,就會在它的下面顯示一個菜單。如果單擊控件的按鈕部分,該菜單不會打開

ToolStripDropDownButton

這個控件非常類似於ToolStripSplitButton,惟一的區別是去除了下拉按鈕,代之以下拉數組圖像。單擊控件的任一部分,都會打開其菜單部分

ToolStripComboBox

這個控件顯示一個組合框

ToolStripProgressBar

這個項可以在工具欄上嵌入一個進度條

ToolStripTextBox

這個控件顯示一個文本框

ToolStripSeparator

前面在菜單示例中見過這個控件,它為各個項創建水平或垂直分隔符

 

ToolStrip控件和MeunStrip一樣,也具有專業化的外觀和操作方式,把ToolStrip控件添加到窗體的設計界面上時,和MenuStrip很相似,只是在右邊多個排列的4個點,這些點表示工具欄是可以移動的,可以停靠在父應用程序窗口中。默認情況下,工具欄顯示的是圖像,不是文本。


 

Windows Forms高級界面組件-快捷菜單

快捷菜單通常所說的就是上下文菜單,敢就是程序運行時單擊右鍵彈出的菜單。Word,Excel,Windows教有快捷菜單,使用Word時,有時需要反復使用復制、粘貼等操作,完成這些操作有多種方法,最簡單和易用的方法是從Word顯示的選項中右擊並選取適當選項,此時顯示的菜單就是上下文菜單,也就是快捷菜單。快捷菜單會隨着右擊位置不同而變化。VS2008中使用ContextMenuStrip控件創建快捷菜單。
ContextMenuStrip控件和MenuStrip控件使用方式相似。創建步驟如下:
1、創建項目ContextMenuText。
2、將工具箱的ContextMenuStrip控件拖放到窗體中。
3、設計菜單內容,方法和前面的菜單設計相同。設計好的菜單如下圖
4、設置窗體“Form1”的ContextMenuStrip屬性為窗體添加的快捷菜單屬性“contextMenuStrip1”,運行程序,在窗體上右擊鼠標,即可彈出快捷菜單,效果如圖
C winForm - yuanjinlin08 - 魔獸世界

注意:快捷菜單是與某個控件相關聯的,創建了快捷菜單后,一定要設置相關聯控件的ContextMenu屬性為該快捷菜單,否則是不會起作用的。
C winForm - yuanjinlin08 - 魔獸世界

上面是使用窗體設計器設計快捷菜單方法,編寫代碼可在程序運行中實現。代碼如下:
private void CreateContextMenu()
{
ContextMenuStrip cmnu=new ContextMenuStrip();//創建快捷菜單對象
cmnu.RenderMode=ToolStripRenderMode.System;//設置快捷菜單的繪制樣式
//在快捷菜單中添加項
cmun.Items.Add("復制");
cmun.Items.Add("粘貼");
cmun.Items.Add("剪切");
cmun.Items.Add("退出");
this.ContextMenuStrip=cmnu;//給窗體添加快捷菜單
}
說明:快捷菜添加功能的方法和主菜單相同。


 

 

 

 

創建MDI窗體、激活和排列子窗體

 

多文檔應用程序中,有多個窗口打開時,在同一時間只有一個窗口是活動的,應用程序的活動窗口是所有操作的窗口,通常最上面的窗口是活動窗口。活動窗口的標題欄顏色和非活動窗口的顏色是不同的。
說明:MDI程序主窗體的標題欄顏色和活動的子窗口的標題欄顏色相同。

注意:如果窗體為 MDI 父窗體,則在觸發 MDI 父窗體的 Closing 事件之前,將觸發所有 MDI 子窗體的 Closing 事件。另外,在觸發 MDI 父窗體的 Closed 事件之前,將觸發所有 MDI 子窗體的 Closed 事件
一、 創建MDI窗體
        ? 將 IsMdiContainer 屬性設置為 True
        ? 選擇“項目”→“添加 Windows 窗體”
        ? 選擇“項目”→“添加 Windows 窗體”
        ? 添加給定的代碼,將其他窗體設置為子窗體。下面代碼演示如何將TestForm設置為當前窗體的子窗體。
            TestForm objChild = new TestForm();
            objChild.MdiParent = this;
            objChild.Show();
二、 激活窗體:

要得到當前活動的子窗體,使用ActiveMdiChild屬性獲取,示例代碼如下:
MessageBox.Show(this.ActiveMdiChild.ToString());
在MDI應用程序中,可以使用以下代碼激活窗體:
this.ActivateMdiChild(<子窗體>);
this.ActivateMdiChild(frmChild);

這句代碼是將要激活的子窗體的名稱傳遞給ActiveMdiChild()方法。如果設置了另外一個窗體為活動的子窗體,當前活動的窗體將自動取消激活。
注意:ActiveMdiChild和ActivateMdiChild()的不同,前者是屬性,后者是方法。

三、排列子窗體
MDI應用程序打開多個子窗體時,需要合理安排子窗體的排列方式,要排列WinForms中的子窗口,需要調用Form類的LayoutMdi方法來使用MdiLayout枚舉成員,該枚舉指定了MDI子窗口在MDI父窗口中的布局。

        MdiLayout枚舉的成員列表如下:
        ? ArrangeIcons :在 MDI 父窗體的客戶端區內排列所有 MDI 子窗體的圖標
        ? Cascade:在 MDI 父窗體的客戶端區內層疊所有 MDI 子窗口
        ? TileHorizontal :在 MDI 父窗體的客戶端區內水平平鋪所有 MDI 子窗口
        ? TileVertical:在 MDI 父窗體的客戶端區內垂直平鋪所有 MDI 子窗口

設定子窗口排列方式的代碼如下:
this.LayoutMdi(MdiLayout.TileHorizontal);

將MdiLayout枚舉成員的名稱傳遞給LayoutMdi方法,即可設定窗口的排列方式。
C winForm - yuanjinlin08 - 魔獸世界

 

 

 

Windows Forms高級界面組件-單文檔和多文檔應用程序


單文檔和多文檔應用程序簡介
通常Windows應用程序分為三類:基於對話框的應用程序、單文檔界面應用程序(SDI)和多文檔界面應用程序(MDI)。單文檔界面(Single-Document Interface, SDI)和多文檔界面(Multi-Document Interface, MDI)。
單文檔應用程序(MDI)是處理單一文檔的應用程序,通常用於完成一個任務,使用單一的文檔。此應用程序常涉及許多用戶交互操作,並且能夠保存或打開工作的結果。在SDI應用程序中已打開一個文件,要新建或再打開一個文件,則必須關閉當前打開的文件,才會打開新文件。如果要同時打開兩個文件,則必須啟動應用程序的一個新實例。Microsoft Windows中的“記事本”是單文檔界面應用程序的一個典型示例。在“記事本”中,同一時間只能打開一個文檔。

多文檔應用程序(MDI)是一種常用的文檔程序,常用的Excel,VS應用程序都是多文檔應用程序。多文檔應用程序最大特點是,用戶可以一次打開多個文檔,每個文檔對應不同的窗口。MDI應用程序允許創建一個在單個容器窗體內容納多個窗體應用程序,每個應用程序都有一個主窗口,子窗口在主窗口中打開,主窗口的菜單會隨着當前活動的子窗口的變化而變化。

 

多文檔應用程序的主窗體和子窗體
多文檔應用程序(MDI)至少由兩上載然不同的窗口組成,第一個窗口叫MDI窗體容器,也叫做主窗體,它包含多個MDI子窗體,也就是可以在主窗體中顯示的窗口。MDI主窗體的特點如下:
啟動MDI應用程序時,首先顯示的是主窗體。
主窗體是MDI程序的窗體窗器,該程序的所有窗體都在主窗體的界面內打開。
每個MDI應用程序都只能有一個MDI主窗體。
任何MDI子窗體都不能移出MDI框架區域。
關閉MDI主窗體則自動關閉所有打開的MDI子窗體

多文檔操作MDI的屬性和事件

屬性

說明

MdiChildren

用於獲取表示多文檔界面 (MDI) 子窗體的窗體數組

MdiParent

用於獲取或設置當前多文檔界面 (MDI) 父窗體

ActiveMdiChild

用於獲取當前活動的多文檔界面 (MDI) 子窗體

方法

說明

ActivateMdiChild

用於激活子窗體

LayoutMdi

排列 MDI 父窗體中的多文檔界面 (MDI) 子窗體

事件

說明

Closed

由用戶或窗體的 Close 方法關閉窗體后,發生該事件

Closing

正在關閉窗體時,發生該事件

MdiChildActivate

在 MDI 應用程序中激活或關閉多文檔界面 (MDI) 子窗體時,觸發該事件

 


 

 

 

 

 

Windows Forms高級界面組件-Timer控件簡單用法

Timer控件

Timer控件主要會用到2個屬性一個是Enabled和Interval
Enabled主要是控制當前Timer控件是否可用
timer1.Enabled=false;不可用
timer1.Enabled=true;可用
timer1.Interval=1000;主要是設置timer2_Tick事件的時間,單位為毫秒

例一:到9:00提示去上廁所:(
把timer2.Interval=60000;//1分鍾


private void timer2_Tick(object sender, System.EventArgs e){
        string cesuotime=DateTime.Now.DateTime.Now.ToShortTimeString();//得到現在的時間
         if(cesuotime.equles("9:00")){
                       timer1.Enabled=false;
                       MessageBox.show("該去上廁所了");
                       timer1.Enabled=true;//如果不先把enabled設置成false對話框會一直彈下去
           }
}


例二:每2小時提示用戶看電腦時間已經很久了,需要休息了
把timer2.Interval=7200000;//7200秒


private void timer2_Tick(object sender, System.EventArgs e){
                        timer1.Enabled=false;
                       MessageBox.show("需要休息了,開機已經2小時了");
                       timer1.Enabled=true;//如果不先把enabled設置成false對話框會一直彈下去
           }

 
 
  
 
 
 


免責聲明!

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



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