C#程序设计(二)-----Windows窗体及标签控件

来源:互联网 发布:视频压缩算法工程师 编辑:程序博客网 时间:2024/06/05 13:34

Windows窗体及标签控件

一般来说,一个完整的Windows应用程序的设计过程是:在项目中添加Windows窗体,向窗体加入用户操作的控件,分别设置窗体和控件的属性,在事件处理程序编程,在程序中调用各个对象的方法。

一、Windows窗体

窗体可以理解为一个窗口或一个应用程序的界面。当创建一个Windows应用程序项目时,系统自动为项目提供一个窗体,若应用程序需要增加窗体时,需要使用菜单:项目->添加Windows窗体->Windows窗体->打开,即可向项目中增加一个窗体。

窗体类的命名空间在System.Windows.Forms

 

二、窗体的属性和事件

窗体有许多属性可以用来对窗体进行设置,以便使窗体符合程序的需要。以下仅列出最常用的几个:

属性名

作用

Name

标识窗体对象的名字,程序中用来指明是哪个窗体

Text

显示在窗体标题条上的文字

StartPosition

窗体显示在屏幕上的初始位置,

BackColor

设置背景颜色

ForeColor

设置前景颜色

BackgroundImage

设置背景图片

MaximizeBox

设置窗体是否需要最大化按钮

MinimizeBox

设置窗体是否需要最小化按钮

ControlBox

设置窗体是否需要关闭按钮

窗体有许多事件可以利用,程序中可以对需要利用的事件编写事件处理程序,当该事件发生时,事件处理程序被调用,以实现预定的功能。以下仅列出最常用的几个事件:

事件名

含义

Load

窗体载入时发生

Activated

窗体被激活时发生

Click

鼠标左键在窗体内单击时发生

DoubleClick

鼠标左键在窗体内双击时发生

KeyDown

键按下时发生

KeyUp

键弹起时发生

KeyPress

按键时发生

MouseMove

在窗体内移动鼠标时发生

三、Label控件

Label控件称为标签,主要用来显示静态文字,这些文字用作指示性说明,或者是这些文字不允许用户修改。

Label控件最常用的属性如下:

属性名

作用

Name

标识标签对象的名字,程序中用来指明是哪个标签

Text

标签显示出来的文字

Font

标签的字体和大小

ForeColor

文字的颜色

Location

标签在窗体中的位置

Size

标签的大小

Visible

标签的可见性,为true时可见,false时不可见

标签也有许多事件,不过很少为标签的事件写程序。固此不多介绍。

四、Timer控件

Timer控件称计时器,其作用是用来计时,当程序中每隔一段时间就要做某一件事时,就使用它来控制。

计时器是在后台运行的控件,程序运行时总是不可见的,这类控件在设计状态时显示在窗体下部的架子上。

Timer控件的常用属性有3个:

属性名

作用

Name

标识计时器对象的名字,程序中用来指明是哪个计时器

Interval

设定时间间隔,单位为毫秒

Enabled

设置可用性,true时可用,false时不可用

Timer控件的事件只有一个Tick,它每当指定的时间间隔时发生。这个事件的事件处理程序总是要写的,否则使用这个控件就失去了意义。

五、应用举例(时钟)

这里有一个实例,在一个窗体中动态显示当前的日期和时间。

        System.DateTime rq=DateTime.Now;

            int y=rq.Year;

            int m=rq.Month;

            int d=rq.Day;

            label1.Text=y.ToString();

            label3.Text=m.ToString();

            label5.Text=d.ToString();

            label7.Text=rq.TimeOfDay.ToString().Substring(0,8);

 

命令按钮和文本框控件

一、Button控件

Button控件称为命令按钮,主要用来启动一个命令(程序功能)。

Button控件有很多属性与标签是相同的,例如NameTextFontBackColor ForeColor等,在程序中最常用的利用的属性是Enabled,为true时控件可用,为false时控件不可用(灰色显示)。

标签也有许多事件,常常只使用click,鼠标左键单击时发生,用来启动一项程序功能。

二、TextBox控件

TextBox控件称为文本框,主要用来接受用户的输入。

TextBox控件有很多属性与前述控件是相同的,例如NameTextFontBackColor ForeColorLocationSize等,除此之外还有一些属性也是常用的:

属性名

作用

Enabled

控件是否可用

Visible

控件是否可见

Multiline

是否可以多行显示或输入

ReadOnly

是否只读

PasswordChar

输入口令时的掩盖字符

TextBox控件有很多事件可以使用,常常利用键盘和鼠标事件来判断用户的操作,以便程序作出正确的反映。

事件名

含义

DoubleClick

双击控件时发生

Enter

控件成为活动控件时发生

KeyDown

首次按下某键时发生

KeyUp

键弹起时发生

KeyPress

完成按键时发生

MouseMove

在控件内移动鼠标时发生

MouseDown

按下鼠标按钮时发生

MouseEnter

鼠标进入控件可见部分时发生

MouseLeave

鼠标离开控件可见部分时发生

MouseHover

鼠标在控件内停留一段时间后发生

TextBox控件有很多方法可以调用来实现特定的功能,常用的方法有:

方法名

功能

Clear

从文本框中清除所有文本

Copy

将文本框中选定的内容复制到剪贴板中

Cut

将文本框中选定的内容剪切到剪贴板中

Focus

将输入焦点于置文本框内

Paste

用剪贴板中的内容替换文本框中当前选定的内容

Select

选定文本框的一部分文字

SelectAll

选定文本框的全部文字

Undo

撤消在文本框中的上一次编辑操作

 

列表框和组合框

一、ListBox控件

ListBox控件称为列表框,主要用来供用户在列表中选择某些项。

ListBox控件的常用属性如下:

属性名

作用

DataSource

该控件获取列表项的数据源,例如某个数据表的某列或某个数组

Items

列表框中的各项

SelectIndex

列表框中选定项的索引号,从0开始,未选中任何项时为-1

SelectItem

列表框中的选定项

Text

列表框中选定项的文本

ListBox控件的常用事件如下:

事件名

含义

DoubleClick

双击控件时发生

Enter

控件成为活动控件时发生

SelectIndexChange

列表框中选择项的索引号变化时发生

ListBox控件的常用方法如下:

方法名

功能

ClearSelected

撤消对列表框中所有选择项的选择

SetSelected

设置或撤消对列表框中选择项的选择

对于ListBox控件的属性Items,它还带有一些十分有用的属性和方法。

ListBox控件的Items的常用方法如下:

方法名

功能

Add

Items添加列表项

RemoveAt

Items移除指定索引号的某项

Insert

Items插入列表项到指定索引处

Clear

Items移除所有列表项

Items有一个属性Count指明它有几项。

二、ComboBox控件

ComboBox控件称为组合框,它是文本框和列表框的组合,既可以接受用户的输入,也可以接受用户的选择。

组合框的属性、方法和事件与列表框是基本相同的。

菜单设计

菜单是组织应用程序功能的一种方法,Windows应用程序界面通常会通过菜单来使用程序的功能。

C#菜单分主菜单和弹出菜单(上下文菜单)两种。菜单可以由程序代码生成,也可以使用菜单控件直接编辑而成,后者使用简单快捷,是常用的菜单设计方式。

一、MainMenu控件

MainMenu控件称为主菜单,程序运行后主菜单显示在窗体的标题条下,供用户选择应用程序的功能。主菜单通常还有下一级的下拉菜单,每一个下拉菜单实际上是一个功能组。

1、编辑主菜单

MainMenu控件拖入应用程序窗体,可以看到应用程序窗体下部增加了一个控件mainMenu1,此时应将窗体Form1的属性Menu设置为mainMenu1,否则程序运行时主菜单不可见。

选中mainMenu1,就可以在菜单编辑器上编辑菜单,只需在“请在此处输入”的空白处一级一级地输入,就可以完成主菜单的编辑。

编辑菜单项时,在Text属性中带有“(&字母)”项称为字母助记符,例如“文件(&F)”和“打开(&O),它的作用是通过助记符选中对应的菜单项。操作时,如果是窗体水平菜单条上的菜单项,按下Alt加助记符将选中该菜单,例如按Alt+F可选择“文件”菜单项;若菜单项是在下拉菜单上,则要在弹出下拉菜单后,直接按助记字母即可,例如在“文件”菜单组被下拉后,直接按O键可选中“打开”菜单项。

菜单名后的“”表示启动该菜单功能后,会弹出一个对话框供用户作进一步的输入或选择,以便让程序明白用户要指定的操作目标。

MenuItem.Shortcut属性用来指定菜单功能的快捷键,即用快捷键代替菜单操作。例如指定“新建”菜单项的Shortcut属性为CtrlN后,在任何时刻按下Ctrl+N键都可以启动“新建”功能。

文件菜单组各菜单项的属性设置:

MenuItem.Name属性

MenuItem.Text属性

MenuItem.Shortcut属性

mainMenuItemNew

新建(&N)

CtrlN

mainMenuItemOpen

打开(&O)

CtrlO

mainMenuItemSave

保存(&S)

CtrlS

menuItem1

-

None

mainMenuItemExit

退出(&X)

None

编辑菜单组各菜单项的属性设置:

MenuItem.Name属性

MenuItem.Text属性

MenuItem.Shortcut属性

mainMenuItemUndo

撤消(&U)

CtrlZ

menuItem2

-

None

mainMenuItemCut

剪切(&T)

CtrlX

mainMenuItemCopy

复制(&C)

CtrlC

mainMenuItemPaste

粘贴(&P)

CtrlV

mainMenuItemDelete

删除(&L)

Del

menuItem3

-

None

mainMenuItemAll

全选(&A)

CtrlA

格式菜单组各菜单项的属性设置:

MenuItem.Name属性

MenuItem.Text属性

MenuItem.Shortcut属性

mainMenuItemFont

字体(&F)

None

mainMenuItemColor

颜色(&C)

None

主菜单编辑时的状态如下图:

2、编写菜单处理程序

要为某菜单项编写处理程序,只要为该项的Click事件处理程序写入代码即可。

二、ContextMenu控件

ContextMenu控件称为上下文菜单或弹出菜单,使用时通常是在某目标上单击右键,立即弹出上下文菜单,单击某菜单项即可实现对应的功能。

1、编辑上下文菜单

ContextMenu控件拖入应用程序窗体,可以看到应用程序窗体下部增加了一个控件ContextMenu1。单击这个控件,在原先主菜单的位置出现上下文菜单,其编辑方法同主菜单。

上下文菜单组各菜单项的属性设置:

MenuItem.Name属性

MenuItem.Text属性

contextMenuItemUndo

撤消(&U)

menuItem2

-

contextMenuItemCut

剪切(&T)

contextMenuItemCopy

复制(&C)

contextMenuItemPaste

粘贴(&P)

contextnMenuItemDelete

删除(&L)

 

2、上下文菜单的弹出

上下文菜单的弹出,通常是利用操作目标的右键单击事件。例如下段程序就是在窗体上击右键时便弹出上下文菜单contextMenu1

private void textBoxEdit_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

        
{

            
if(e.Button.ToString()=="Right")

            
{   Point p=new Point(e.X,e.Y);

                contextMenu1.Show(
this,p);

            }


    }


1、  上下文菜单的事件处理程序

菜单处理程序:

    
private void mainMenuItemExit_Click(object sender, System.EventArgs e)

        
{

            
this.Close();

        }


    
private void mainMenuItemUndo_Click(object sender, System.EventArgs e)

        


            
if(textBoxEdit.CanUndo==true)

            
{

                
//调用TextBox.Undo()方法,撤消上一次操作

                textBoxEdit.Undo();

                
//清除缓冲区中有关撤消操作的信息

                textBoxEdit.ClearUndo();

            }


        }


    
private void mainMenuItemCut_Click(object sender, System.EventArgs e)

        
{

            
if(textBoxEdit.SelectedText!="")

            
{

                
//调用TextBox.Cut()方法,剪切选中的文本

                textBoxEdit.Cut();

            }


        }


    
private void mainMenuItemCopy_Click(object sender, System.EventArgs e)

        
{

            
if(textBoxEdit.SelectionLength>0)

            
{

                
//调用TextBox.Copy()方法,复制选中的文本

                textBoxEdit.Copy();

            }


        }


    
private void mainMenuItemPaste_Click(object sender, System.EventArgs e)

        
{

    
if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)==true)

            
{   

                    textBoxEdit.Paste();

            }


        }


    
private void mainMenuItemDelete_Click(object sender, System.EventArgs e)

        
{   

            
int start=textBoxEdit.SelectionStart;

            
int count=textBoxEdit.SelectionLength;

            textBoxEdit.Text
=textBoxEdit.Text.Remove(start,count);

            textBoxEdit.SelectionStart
=start;                   

        }


    
private void mainMenuItemAll_Click(object sender, System.EventArgs e)

        
{

            textBoxEdit.SelectAll();

        }


private void textBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

        
{

            
if(e.Button.ToString()=="Right")

            
{   

    
if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))

            contextMenuItemPaste.Enabled
=true;

        
else

                contextMenuItemPaste.Enabled
=false;

                
if(textBoxEdit.SelectionLength>0)

                
{

                    contextMenuItemCut.Enabled
=true;

                    contextMenuItemCopy.Enabled
=true;

                    contextMenuItemDelete.Enabled
=true;

                }


                
else

                
{

                    contextMenuItemCut.Enabled
=false;

                    contextMenuItemCopy.Enabled
=false;

                    contextMenuItemDelete.Enabled
=false;

                }


                
if(textBoxEdit.CanUndo==true)

                    contextMenuItemUndo.Enabled
=true;

                
else

                    contextMenuItemUndo.Enabled
=false;

                Point pt
=new Point(e.X,e.Y);

                contextMenu1.Show(textBoxEdit,pt);

            }


        }


    
private void contextMenuItemUndo_Click(object sender, System.EventArgs e)

        
{

            mainMenuItemUndo_Click(
null,null);

        }


private void contextMenuItemCut_Click(object sender, System.EventArgs e)

        
{

            mainMenuItemCut_Click(
null,null);

        }


private void contextMenuItemCopy_Click(object sender, System.EventArgs e)

        
{

            mainMenuItemCopy_Click(
null,null);

        }


private void contextMenuItemPaste_Click(object sender, System.EventArgs e)

        
{

            mainMenuItemPaste_Click(
null,null);

        }


private void contextMenuItemDelete_Click(object sender, System.EventArgs e)

        
{

            mainMenuItemDelete_Click(
null,null);

            

    }


 

一、          动态控制菜单

动态控制菜单指的是根据应用程序运行时的不同状态以不同形式来显示菜单。

1.   不同状态时窗体上显示不同的主菜单

要显示不同的主菜单,只要为窗体设计多个主菜单,根据应用程序的当前状态决定显示哪个主菜单。为了实现这一点,需要在程序中将当前的主菜单名赋给窗体的Menu属性。也可以只设计一个主菜单,当需要改变主菜单的某些项时,在程序中动态修改这个主菜单的这些项即可。

2.   某菜单项不满足使用条件时应以灰色显示

要以深色或灰色显示某个菜单项,需要将这个菜单项的Enabled属性设置为truefalse,这当然需要依据当前是否符合使用该项功能的前提而定。

为了动态控制“编辑”菜单组中各菜单项的显示状态,可利用mainMenuItemEditPopup事件,即在该下拉菜单弹出时决定那些项以深色显示,那些项以灰色显示。

private void mainMenuItemEdit_Popup(object sender, System.EventArgs e)

        
{

if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))

                mainMenuItemPaste.Enabled
=true;

            
else

                mainMenuItemPaste.Enabled
=false;

            
if(textBoxEdit.SelectionLength>0)

            
{

                mainMenuItemCut.Enabled
=true;

                mainMenuItemCopy.Enabled
=true;

                mainMenuItemDelete.Enabled
=true;

            }


            
else

            
{

                mainMenuItemCut.Enabled
=false;

                mainMenuItemCopy.Enabled
=false;

                mainMenuItemDelete.Enabled
=false;

            }


            
//根据文本框中是否可执行撤消操作

            
//决定mainMenuItemUndo是否可用

            
if(textBoxEdit.CanUndo==true)

                mainMenuItemUndo.Enabled
=true;

            
else

                mainMenuItemUndo.Enabled
=false;

       }

 

原创粉丝点击