应用程序实例——用户信息管理
下面用我们学过的知识创建一个应用程序实例,演示MDI窗体的用法,此窗体包括菜单,工具栏和状态栏。用户选择“创建用户”菜单中“创建学员账户”菜单项,或者单击工具栏上的“创建”按钮后,将显示“frmNewUser”窗体。使用“菜单管理”命令可动态添加上下文菜单,状态栏显示日期和当前窗体名称,选择“退出系统”菜单可退出系统。
创建步骤如下:
1、创建一个名为“UserManage”的Windows应用程序。
2、将Form1改为frmUserManage,作为主窗体,将其“IsMdiContainer”属性值设置为true,这个窗体成为子窗体的窗器。
3、将菜单栏(MenuStrip)、工具栏(ToolStrip)、和状态栏(StatusStrip)控件拖到窗体上,建成界面。
4、将以下代码添加到frmUserManage的Load事件中。
private void frmUserManage_Load(object sender, EventArgs e)
{
this.toolStripStatusLabel1.Text = DateTime.Now.ToString();
}
以上代码实现窗体载入时,在状态栏的Label标签中显示当前时间。
5、在项目上右击,打开关联菜单,选择“添加新项”—“Windows窗体”命令,打开“添加新项”对话框,修改名称为“frmNewUser”,单击“确定”按钮。窗体界面如下:
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();
}
以上代码实现选择“创建学生用户”菜单时,打开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 将窗体状态栏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.然后添加.
双击...写事件...
OK,搞定
C#windows服务程序中的Timer控件的使用的相关操作就向你介绍到这里,希望对你了解C#windows服务程序中的Timer控件的使用有所帮助。
|
Windows Forms高级界面组件-Timer控件实例
要求显示计算机运行的时间长度和应用程序运行的时间长度,界面如图
代码如下: 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。
2、在窗体中添加ToolStrip控件,可以看到窗体的下方显示有“toolStrip”控件。
3、添加标准工具栏,单击“toolStrip1”工具栏右上角黑色按钮,打开“ToolStrip”任务栏,单击“插入标准项”选项,即可在工具栏中插入标准工具栏按钮。
4、单击工具栏上的提示按钮中黑色三角,打开下拉列表框,在其中单击“Button”按钮,可在工具栏中添加一个按钮。修改“Text”属性为“B”,“DisplayStyle”属性设置为“Text”。 5、执行上边的相同步骤,在工具栏中添加一个按钮,将其“Text”属性设置为“I”,并将“Font”属性中的“Italic”属性值设置为true,“I”以斜体的方式显示。 6、单击工具栏上的提示按钮中黑色三角,打开下拉列表框,在其中单击“SplitButton”按钮,可添加带下拉选项的按钮。将“DisplayStyle”属性设置为“Text”,“Text”属性值设置为“U”,并将“Font”属性中的“Underline”属性值设置为true,“U”以下划线的方式显示。在打开的菜单项中输入“下划线”,“双下划线”等。
7、继续上面的操作,在工具栏上添加“ToolStripComBox”控件,编辑其“Items”属性,在项目集合编辑器中输入“黑体”,“宋体”,“楷体”,“仿宋”等 8、编译并执行程序。结果如图
说明:为工具栏中的工具添加功能的方法和菜单基本相同,在设计窗体中双击“工具”按钮,即可打开按钮的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”,运行程序,在窗体上右击鼠标,即可弹出快捷菜单,效果如图
注意:快捷菜单是与某个控件相关联的,创建了快捷菜单后,一定要设置相关联控件的ContextMenu属性为该快捷菜单,否则是不会起作用的。
上面是使用窗体设计器设计快捷菜单方法,编写代码可在程序运行中实现。代码如下: 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方法,即可设定窗口的排列方式。
|
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对话框会一直弹下去 }
|