精华内容
下载资源
问答
  • 2021-02-25 16:51:07

    一、 Windows标准控件概述

    (一)Windows标准控件

    Windows系统提供的标准控件主要包括静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表所示。

    Windows标准控件的类型

    类别             MFC类                       控件类型
    静态控件     CStatic                       Static Text、Group Box
    按钮控件     CButton                      Button、Check Box、Radio Button
    编辑框控件 CEdit                          Edit Box
    组合框控件 CComboBox             Combo Box
    列表框控件 CListBox                    List Box

    控件操作的学习主要关注以下几个方面:

    1、控件的创建

    控件的创建分为静态创建动态创建两种方式。

    静态创建是指在对话框模板创建控件,并设置控件的属性,这样,在调用该对话框时,窗口系统会自动按预先的设置为对话框创建控件。程序员可以使用ClassWizard为该控件在对话框类中创建一个控件类的对象。

    动态创建是指在程序的运行中根据需要,定义一个控件类的对象,再通过窗口函数CreateWindow()或CreateWindowEx()创建控件、函数ShowWindow()显示控件,正如操作一个子窗口。

    2、控件的属性设置

    每个控件都有一个属性集,对于静态创建的控件,可以在对话框模板中,打开控件的属性对话框直接设置控件的初始属性。在程序设计过程中,可以通过控件类对象调用方法设置控件的属性。

    3、控件消息类别

    上表所列出的控件中,静态控件不发送消息,其他控件对于用户的操作都能发送消息,不同类的控件发送的消息类别是不相同的,可以使用ClassWizard为控件映射各种消息处理函数。

    4、控件对象的常用方法

    MFC控件类提供丰富的方法函数,帮助程序员操作控件对象。

    5、用户输入消息的获取和响应

    在前一章已经介绍了MFC支持应用程序与用户之间的通信的方法,为控件的显示值映射一个对话框类的成员变量,再通过对话框数据交换和校验机制在对话框打开和关闭的时候实现数据传递,在程序运行过程中,通过UpdateData()函数主动地控制数据在控件显示和成员变量之间交换。这是MFC应用程序获取用户输入消息的主要方法。

    同时MFC保留了Windows API函数,可直接通过控件ID操作控件,获取或设置控件的显示值。例如SetDlgItemText()和GetDIgItemText()函数可以用于设置或获取编辑框的显示文本串

    (二)控件的通用属性

    Windows标准控件的属性窗口通常由3个属性标签构成。

    1、General标签页

    General标签页中设置常规属性,通常包括:

    (1)ID

    程序通过控件ID来访问一个控件。所有的控件中,只有Static Box控件和GroupBox控件的ID是可以重复,一般使用默认设置IDC_STATIC。而其他类控件的ID在一个应用程序中应该是惟一的。

    (2)Visible

    设置对话框打开时控件是否可见。它的类型是布尔类型。默认为TRUE.即运行程序时显示控件。

    (3)Disabled

    设置当对话框在打开时该控件是否不可用,它的类型是布尔类型,默认为FALSE。

    (4)Group

    标记一组控件中的第一个控件。

    (5)Tap stop

    设置TAB键是否可以该控件上驻留,它的类型是布尔型,默认值为TRUE。

    (6) Help ID

    分配一个帮助ID给一个控件。这个帮助ID建立在资源ID基础上。它的类型是布尔型,默认为FALSE。

    2、Styles标签页

    可以通过Style标签页设置一些与控件风格有关的属性,不同的控件所设置的属性不相同,在本章的后续小节中将按不同的控件介绍。

    3、Extend Styles标签页

    Extent Styles标签页设置与控件显示风格有关的属性,通常包括:

    (1)Client edge

    围绕对话框建立一个有下凹风格的边框。它的类型是布尔型,默认值是FALSE.

    (2)Static edge

    围绕对话框建立一个边框。它的类型是布尔型,默认值是FALSE.

    (3)Modal frame

    该选项提供一个3D框架

    (4)Transparent

    使用这种风格的窗口在层叠状态下是透明的,它的类型是布尔型,默认值是FALSE.

    (5)Accept files

    这种风格的对话框可接受拖放文件操作。如果用户拖动一个文件到此对话框上,对话框将接收到一个WM_DROPFILES消息。该选项的类型是布尔型,默认值是FALSE.

    (6)Right aligned text

    指定在一个对话框中文本是右对齐的。它的类型是布尔型,默认值是FALSE.

    (7)Right-to-left reading order

    对话框的文本按从右到左的顺序编排,这是为了一些特殊语言的阅读方便而设置的(如阿拉伯语言)。它的类型是布尔型,默认值是FALSE.

    (三)常用控件窗口操作函数

    Windows应用程序对控件的操作实质上是对窗口的操作,对话框窗口中的控件被视为对话框窗口的子窗口,具有通用的窗口属性,所以控件的操作还可以通过一组窗口操作的函数来完成。常用的控件子窗口操作函数如下:

    1 、CreateWindow()或CreateWindowEx()

    在程序运行过程中,可以通过调用创建窗口的函数来动态地创建控件,创建窗口的函数是CreateWindow()或CreateWindowEx()。

    2、ShowWindow()

    使用函数ShowWindow()可以显示或隐藏控件。它的函数原型为:
    BOOL ShowWindow(int nCmdShow);
    参数nCmdShow表示窗口的显示特性,例如,取值SW_HIDE表示隐藏控件,取值SW_SHOW表示显示控件。

    3、EnableWindow()

    通过函数EnableWindow(可以激活控件或禁止控件接受用户输入。它的函数原型为
    BOOL EnableWindow(BOOL nEnable=true);
    参数nEnable决定控件的激活或禁止状态,当值为true时,允许控件接受用户输入,当其值为false时,不允许控件接受用户输入,其呈灰色显示。

    4、MoveWindow()

    通过函数MoveWindow()可以移动控件或改变控件的大小。函数的原型为
    BOOL MoveWindow(int x,int y,int nWidth,int nHeight,B00L bRepaint=TRUE);
    坐标x,y决定控件所在的位置,nWidth和nHeight决定控件的大小,bRepaint表明对话框窗口移动后,控件是否需要重画,以使其与对话框窗口的相对位置与大小保持不变。

    5、 DestroyWindow()

    通过该函数能够关闭一个控件,该函数的原型为
    void DestoyWindow();

    二、CStatic类控件的使用

    在程序中出现的文本根据作用的不同,可以分为两大类:静态文本和动态文本。静态文本在程序的执行中保持不变,主要用来表示控件的功能、下一步执行的操作等。动态文本在程序执行过程中是可以改变的,在Windows中可以通过编辑控件来实现。
    MFC中使用CStatic类来管理静态文本控件,包括StaticText控件和Group Box控件,StaticText控件通常用来标识一个控件,Group Box通常用来分割不同组别的控件
    一般情况下,静态控件不接受用户输入,也不发出消息。它的ID号默认为IDC_STATIC,只有CStatic类的控件的ID号是可以重复的。

    (一)Static Text控件

    用户能添加到对话框中的最简单控件是静态文本控件。静态文本控件不要求与对话框进行交互,需要显示的文本串只要在该控件属性对话框的General标签中的Caption属性中直接输入。
    对静态文本,可以在Styles标签页中设置文本的显示风格,属性设置的说明如下:
    1、Align text
    控制静态文本控件中文本的对齐方式。可能的取值有Right右对齐),Left〔左对齐),Center(居中),当No wrap选项选中时,这个选项设置为Left,它的默认值为Left。
    2 .Center vertically
    静态文本控件中文本在垂直方向上居中。它的类型是布尔型,默认值是FALSE.
    3. No prefix
    禁止文本中的“&”解释为它后面的字符有一个下划线,而直接将它作为文本的一部分进行显示。No prefix选项经常在显示包含“&”的文件名或字符串中用到。
    4. No wrap
    前提条件是文本必须是左对齐的。选中此选项时Tabs是可扩展的,但是不能保护单词的完整性。在行的末尾扩展处的部分将被剪切掉。它的类型是布尔型,默认值是FALSE。
    5. Simple
    此选项将禁用No wrap和Align text选项。在静态文本控件中的文本如果有此属性,就不保护单词的完整性,且不保证不被剪切。它的类型是布尔型,默认值是FALSE。
    6. Notify
    此选项表示当控件被选中或双击时,通知父窗口。此选项的类型是布尔型,默认值是FALSE。
    7. Sunken
    此选项表示围绕静态文本控件的文本,建立一个凹下的边框。它的类型是布尔型,默认值是FALSE。
    8. Border
    此选项表示围绕静态文本控件的文本,建立一个边框。它的类型是布尔型,默认值是FALSE。

    (二) Group Box控件

    Group Box的作用与Static Text类似,主要是用于标识控件的作用,它更多地用于成组控件的标识,例如,有一组单选按钮用于选择性别,一组复选框按钮用于表示兴趣爱好。
    Group Box的Styles标签页的属性设置更为简单,如下所示。

    1 .Horizontal alignment
    此选项用于设置Group Box中文本串显示的水平对齐位置,在下拉列表中提供了4个选项:Default, Right, Left, Center和默认选项Default,表示左对齐。
    2. Icon
    此选项表示使用图标作标识,代替文本串。
    3. Bitmap
    此选项表示使用位图作标识,代替文本串。
    4. Notify
    此选项表示当控件被选中或双击时,通知父窗口。此选项的类型是布尔型,默认值是FALSE。
    5. Flat
    此选项设置Group Box的线条显示风格。

    三、 CEdit类控件的使用

    编辑控件用于程序需要获取文本的时候,例如,在对话框内输入名字或数字时,由编辑控件获取此信息。编辑控件是用来存储用户输入的自由格式文本的窗口,分为单行编辑控件和多行编辑控件。单行编辑控件是用于输入单行文本的控件,多行文本编辑控件是用于输入多行文本的控件。在多行编辑控件中经常使用滚动条,从而能输入比显示区域更多的文本。事实上,Windows中的记事本(Notepad)应用程序就是一个带有控件菜单的编辑控件。
    每个编辑控件都提供了内置编辑能力,因此可以使用多行编辑控件来创建一个简单的文本编辑器。所有的编辑控件都支持特定的编辑功能,而不需要任何附加编程。在剪贴板中用到的粘贴命令在编辑控件中照常可以使用。

    编辑控件能够发送WM NOTIFY消息到对话框窗口,并告诉对话框窗口用户对编辑控件所做的操作,编辑控件能够处理的消息类别如下所示。
    消息类别                        发生事件
    EN_CHANGE              输入框中的文本串被修改
    EN_ERRSPACE         输入的文本串超过了输入框的显示范围
    EN_HSCROLL             按下水平滚动条
    EN_KILLFOCUS           输入框失去焦点,也就是焦点转移到其他对象
    EN_MAXTEXT             输入的文本串超过了设定的最大输入长度
    EN_SETFOCUS          输入框获取焦点
    EN_UPDATE                更新显示内容
    EN_VSCROLL             按下垂直滚动条
    注:EN:Edit Notify
    使用ClassWizard可以为一个编辑控件映射一个对话框的成员变量,通过对话框的数据交换机制,方便地获取用户输入的内容,或把应用程序的响应结果输出到编辑框。成员变量的数据类型可以设为CString, int, UINT, long, DWORD, float, double. BYTE, short,BOOL, COleDateTime, COleCurrency}方便程序员在不同应用情况下的数据处理。

    (一)属性设置

    通过Styles标签页的设置,可以得到不同类型的编辑框样式:多行编辑框、密码编辑框,只读编辑框,大小写转换编辑框、数字编辑框等等。
    1 .Align text
    控制编辑控件中的文本对齐方式。可能的取值有左对齐、居中和右对齐。
    2: Muttiline
    定义该编辑控件为多行文本编辑。通常情况下,该选项不被选中。
    3. Number
    限定用户输入的只能是数字。
    4. Horizontal scroll
    在多行编辑控件中提供一个水平滚动条。默认该选项不被选中。
    5. Auto HScroll
    当用户在编辑框的最右边输入字符时,文本自动进行滚动。该选项通常被选中。
    6. Vertical scroll
    在多行编辑控件中提供一个垂直滚动条。默认该选项不被选中。
    7. Auto VScroll
    在多行编辑控件中,当用户在最后一行按回车键时,文本自动向下滚动。默认该选项不被选中。
    8 .Password
    当用户在编辑控件中输入字符时,在编辑框中不显示输入的文本,而是相同个数的“*”字符。这一选项在多行编辑控件中不能使用。默认不被选中。
    9. No hide selection
    当编辑控件失去或重新获得焦点时,该项设置将改变文本的显示方式,使编辑框中选择的文本好像总是处于选中状态。默认该选项不被选中。
    10. OEM convert
    对用户输入内容进行从Windows字符集到OEM字符集的转化,这样可以使调用AnsiToOem时正常工作。默认不被选中。
    11.Want return
    应用于多行编辑控件。该选项允许在编辑控件中按Enter键换行,而不影响对话框的默认按钮。
    12. Border
    为控件创建边界,该选项默认被选中。
    13. Uppercase
    将所有的输入内容转化为大写字符,默认不被选中。

    14. Lowercase
    将所有的输入内容转化为小写字符,默认不被选中。
    15. Read-only
    禁止用户在编辑控件中输入或修改其内容,默认不被选中。与静态文本控件的扩展属性相比,编辑控件的扩展属性只增加了一项Left scroll bar,如果设置了垂直滚动条,这一项决定了滚动条在客户区的左边。它的类型是布尔型,默认情况下不选中。

    编程实例:Exam6_1编写一个用户登录的应用程序,应用程序维护着一张合法用户的用户名和密码的列表,至于合法用户才能通过登录程序.要求如下:

    (1)用户名输入后,转换为大写字母显示,最大长度不能超过10位。
    (2)密码以‘*’代替显示,密码只能是6位数字。
    (3)按“确定”按钮时,需要确认输入框不为空,且输入符合要求,否则返回输入框重新输入。
    (4)对合法用户显示欢迎对话框,对不合法用户显示警告对话框。

    相关参考函数代码:

    void CExam6_01Dlg::OnOK() 
    {
    	// TODO: Add extra validation here
    	UpdateData(true);
    	if(m_user.IsEmpty())
    	{
    		AfxMessageBox("用户名不能为空,请重新输入");
    		m_EditUser.SetFocus();
    	}
    	else if(m_pwd.IsEmpty())
    	{
    		AfxMessageBox("密码不能为空,请重新输入");
    		m_EditPwd.SetFocus();
    	}
    	else
    	{
    		int len=m_EditPwd.LineLength();
    		if(len!=6)
    		{
    			AfxMessageBox("密码必须为六位,请重新输入");
    			m_EditPwd.SetFocus();
    		}
    		else
    		{
    			for(int i=0;i<5;i++)
    				if((m_user==userlist[i][0])&&(m_pwd==userlist[i][1]))
    				{
    					MessageBox("You are welcome!");
    					break;
    				}
    				if(i==5)
    					MessageBox("Sorry,you are not permitted.");
    		}
    	}
    	CDialog::OnOK();
    }
     
     
    CExam6_01Dlg::CExam6_01Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CExam6_01Dlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CExam6_01Dlg)
    	m_user = _T("");
    	m_pwd = _T("");
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    	userlist[0][0]="MARY";
    	userlist[0][1]="123456";
    	userlist[1][0]="MARY";
    	userlist[1][1]="123456";
    	userlist[2][0]="MARY";
    	userlist[2][1]="123456";
    	userlist[3][0]="MARY";
    	userlist[3][1]="123456";
    	userlist[4][0]="MARY";
    	userlist[4][1]="123456";
    	userlist[5][0]="MARY";
    	userlist[5][1]="123456"; 
    }

    四、CButton类控件的使用

    (一)CButton类控件介绍

    按钮控件是Windows对话框中最常见的控件之一。按钮控件的类型比较丰富,其中主要有命令按钮、单选按钮、复选框按钮等。
    按钮控件能够处理的消息类别如下所示。

    消息类别                               发生事件
    BN_CLICKED                     单击按钮
    BN_DOUBLECLICKED      双击按钮
    BN_SETFOCUS                 按钮获取焦点
    BN_KILLFOCUS                 按钮失去焦点
    注:BN:Button Notify
    CButton类提供的常用访问方法:

    GetBitmap( )获得用SetBitmap()设置的位图的句柄
    GetButtonStyle()获得有关按钮控件的样式信息
    GetCheck( )获得按钮控件的选中状态
    GetCursor()获得通过SetCursor()设置的光标图像的句柄
    Gedcon()获得由Setlcon()设置的图标句柄
    GetState()获得按钮控件的选中、选择和聚焦状态
    Sefitmap( )指定按钮上显示的位图
    SetBunonStyle()设置按钮样式
    SetCheck()设置按钮控件的选中状态
    Setclrsor( )指定按钮控件上的光标图像
    SetIcon()指定按钮上显示的图标
    SetState()设置按钮控件的选择状态

    (二)命令按钮

    MFC应用程序的对话框模板默认为每一个对话框配置两个按钮—“确认”和“取消”按钮,ID固定为IDOK和IDCANCEL,并在对话框基类中定义了BN_CLICKED消息处理函数OnOK()和OnCancel(),用于完成关闭对话框时所需要的工作。这两个函数是虚函数,可以在应用程序的对话框类中重载这两个函数。
    程序员可以自由地修改默认按钮和添加新的命令按钮。通常命令按钮上都有标题以表明此按钮的作用,命令按钮的Caption属性用于设置命令按钮的标题。例如,标题“确认”表示接受用户的选择等。
    在Styles标签页中主要设置按钮的显示,默认为Default button风格,Owner draw提供了另一种按钮边框风格.Icon和Bitmap属性允许创建一个显示图标或位图的按钮,Multiline属性允许按钮上显示多行文本。Horizontal alignment和Vertical alignment属性设置标题在按钮上显示的水平及垂直方向的对齐方式。

    (三)单选按钮

    使用单选按钮(Radio Button),只能从一组选项中选择惟一一个选项在组中选择一个上次未选中的选项时,其他选项自动变成未选中状态。用户可以在应用程序中添加单选按钮,并通过设置不同的属性满足自己的需要。
    属性对同一组单选按钮的设置非常重要,每一个按钮的Caption属性用于设置单选按钮的显示文本。一组中的第一个控件要选中Group属性,表示一组控件的开始,同组的其他控件则不能设置Group属性,并且同一组控件的Tab Order要求是连续的。
    打开ClassWizard的Member Variables标签页,可以发现对一组单选按钮,列表中只出现第一个控件ID,这意味着只能在对话框类中设置一个值类型的成员变量。该变量的值是int型,表示所选中的单选按钮在组中的序号,序号从0开始。例如,如果选择第2个单选按钮,则返回值为1。同样,一组单选按钮只能在对话框类设置一个单选按钮对象,也就是说一个单选按钮对象控制一组单选按钮。
    MFC除了提供值类型成员变量操作单选按钮,还支持Win32 API函数通过控件ID直接操作单选按钮,CheckRadioButton()用于设置单选按钮的选中状态,函数原型为
    CDialog::CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nID_CheckButton);
    该函数包括3个参数,第一个参数是一组单选按钮中第一个按钮的ID,第二参数是一组单选按钮中最后一个按钮的ID,第三个参数是设置为选中的单选按钮的ID.函数IsDlgButtonChecked()用于检查一个按钮是否被选中,函数原型为
    CDialog::IsDlgButtonChecked(int nIDButton);
    该函数只包含一个参数,即所检查按钮的ID号,返回值为true或false.

    Radio按钮属性对话框的Style标签页:
    1 .Auto
    该项被选中时,控件状态将自动改变。该项通常被选中。
    2. Left text
    把控件的标题放在控件的左边。通常,控件的标题放在控件的右边。
    3. Push-like
    将控件设置成具有下压按钮的外观。则单击该按钮时,由原来的凸状态改变成下压状
    态。
    4. Multiline
    控件的标题可通过多行显示。若该项未被选中,则标题超过按钮的宽度时,自动截去
    后面部分
    5. Flat
    将控件左边的小圆圈显示为平放。默认为凹入。
    6. Icon
    将控件标题设置为图标。该项通常未选中。
    7. Bitmap
    将控件的标题用位图代替。Bitmap与Icon选项中,至多选中一个。该选项通常未选中。

    (四)复选按钮

    复选按钮与单选按钮一样,是Windows提供的另一种形式的按钮。使用复选按钮,可以从一组选项中选择一个选项或多个选项,各个选项之间的选中状态互不相关。

    使用ClassWizard可以为每一个复选框按钮在它所在的对话框类中添加一个值类型的成员变量用于传递数据,该变量的值是BOOL型,值为true时表示选中复选框,值为false时表示未选中复选框。

    MFC同样支持Win32 API函数对复选框控件的操作,函数CheckDlgButton()设置一个复选框的选中状态,函数原型为
    CDialog::CheckDlgButton(int nIDButton,UNIT nCheck);

    该函数包括二个参数,第一个参数是复选框按钮的ID,第二个参数设置按钮的选中状态,值为BST-CHECKED或1时表示选中,值为BST-UNCHECKED或0时表示按钮未选中。

    五、 CListBox类控件的使用

    (一) CListBox类控件介绍

    对于要从若干数据项中进行选择的场合,一个方便的方法是使用列表框。列表框是一个矩形窗口,在矩形窗口中包含一些列表字符串或其他的数据元素。列表框通常出现在对话框里,如用列表框选择文件名、目录等。列表框有一个预定义的键盘接口,用户可以用键盘上的箭头或PageUp及PageDown键在列表框中进行数据的选择,或通过适当的样式设置与Shift或Ctrl键组合使用。

    列表框包括两种样式—单选列表框和多选列表框。单选列表框只允许用户一次选择一个选项,而多选列表框则可以一次选择多个选项。列表框可以自带滚动条,数据项可按排序后的顺序显示,使用己排序的列表框时,用户很容易在大量选项中搜索并作出选择。

    列表框控件属性的Styles标签的具体属性设置如下:

    1.Selection
    设置列表框中选项的选中方式。有4个选项一Single,表示在给定的选项电至多有一个被选中:Multiple,表示可以有多个选项被选中,但忽略Shift键和Ctrl键;Extended,允许选择多个选项,在选择时,可以使用Shift和Ctrl键:None,不允许选择任何选项。
    2. Owner draw
    设置列表框将由列表框所有者来绘制,在大多数情况下,该选项设置为No.
    3. Sort
    设置列表框内容应按字母顺序排序,该选项通常被选中
    4. Multi-column
    创建一个多列列表框,该选项通常未选中。
    5. Use tapstops
    设置列表框中显示的文本选项可以包含标签页,该选项通常未选中。
    6. Want key input
    设置列表框有输入焦点,当按键时列表框所有者收到WM_VKEYTOITEM或WM_CHARTOITEM消息。该选项通常未选中。
    7. Disable no scroll
    即使不需要,也显示一个垂直滚动条。该选项通常未选中。
    CListBox类的通用方法用来获得和设置列表框数据的值和属性,所有的ClistBox控件都有这些方法,包括单选列表框、多选列表框和自绘列表框等。

    CListBox类通用方法包括:
    GetCount() 获得列表框中列表项数目
    Geforiwntafxtent( ) 获得列表框的水平滚动宽度(以像素为单位)
    GetItemData() 获得与某列表框项有关的32位值
    GetITermDataPtr() 获得指向列表框项的指针
    GetItemHeight( ) 获得列表框中项的高度
    GetItemRect() 获得列表框项边界矩形
    GetLocale() 获得列表框的位置标识(LCID)
    GetSel() 获得列表框项的选中状态
    GetText() 把列表框中字符串复制到缓冲区
    GetTextLen() 返回列表框字符串的长度(单位:字节)
    GetTopIndex() 获得列表框中第一个可见项的下标(由0开始)
    ItemFrompoint()确定和返回离某点最近的列表框项的下标
    SetColumnWidth()设置多列列表框的列宽度
    SetHotizontalExtent()设置列表框的水平滚动宽度(单位:像素)
    SetItemData()设置与一个列表框项有关的32位值
    SetDataPtr()设置一个列表框项的指针
    SetltemHeight()设置列表框中项的高度
    SetLocale( )设置列表框的位置标识(LCID )
    SetTabStops()设置列表框的制表位(Tab-Stop)位置
    SetTopIndex()设置列表框中第一个可见项的下标(由0开始)

    使用列表框之前,需要预先准各好列表框中的数据选择项,在对话框的运行过程中还允许对选择项执行增加和删除操作,CListBox类提供了操作字符串的一套方法,CListBox类用于操作列表框中字符串的方法如下:

    AddString( ) 在列表框中加入一个字符串
    DeleteString( ) 从列表框中删除一个字符串
    Dir() 从当前目录加文件名放入列表框
    FindString( ) 在列表框中搜索一个字符串
    FindSIringEacact() 在列表框中搜索第一个与指定字符串匹配的字符串
    InsertStting( ) 在列表框指定下标处插入一个字符串
    ResetContent() 清除列表框中的所有项
    SelectString() 在单选列表框中搜索并选择一个字符串

    CListBox类还声明了几个虚函数:

    CharToItem() 可以重载此方法来为自绘列表框(没有字符串)处理WM-CHAR消息
    CompareItem() 由MFC调用以得到排序后的自绘列表框中的新项的位置
    DeleteItem( ) 当用户从自绘列表框中删除一项时,MFC调用此方法
    DrawItem() 当确定自绘列表框项必须重绘时,MFC调用此方法
    MeasureItem( ) 创建自绘列表框时MFC调用此方法来决定列表框的维数
    VKeyToItem( ) 用户可重载此方法,来处理具有LBS_WANTKEYBOARDINPUT样式的列表框的WM_KEYDOWN消息

    与列表框相关的消息
    LBN_DBLCLK当双击某列表框选项时发送。
    LBN_ERRSPACE因为内存不够,一个操作不能执行时发送。
    LBN_KILLFOCUS当列表框失去输入焦点时发送。
    LBN_SELCANCEL当用户取消某列表框选择时发送。
    LBN_SELCHANGE当列表框中的选择状态改变时发送
    LBN_SETFOCUS当列表框得到输入焦点时发送。

    上面的消息都用LBN_作前缀(LBN:List Button Notify)。如果要发送这些消息,列表框必须在Properties对话框里选中Notify复选框。LBN_DBLCLK消息是最常用的消息,大多数用户希望双击列表框选项时执行某种默认的操作。例如,显示文件名列表时,希望双击某文件名可以打开该文件进行编辑。

    (二)单选列表框

    列表框的默认模式是单选项模式,在这种模式下,用户每次只能从列表框中选中一个选项。对列表框的操作围绕着选择项进行,包括选择项的装载、删除、设置选中状态及获得选中状态。
    列表框是按数组方式来组织选择项的,每一个选择项包含一个下标值和显示值。下标值从0开始:显示值是一个CString型的字符串。属性Sort的设置与对选择项的操作密切相关。
    CListBox类提供了两个函数装载选择项,即CListBox::AddString(LPCTSTR LpszItem)和CListBox::InsertString(int nlndex, LPCTSTR Lpszltem)。当选中Sort属性时,AddString按字符串排序顺序插入新的选择项,当未选中Sort属性时,AddString在选择项序列的最后插入一个新的选择项。InsertString操作不受Sort属性的影响,在指定下标位置插入新的选择项,其他选择项后移一位。

    当未选中Sort属性时,使用C1assWizard可在对话框类为列表框控件关联两种类型的值成员变量,CString类型的值成员变量表示选择项的显示值,int类型的值成员变量表示选择项的下标值。当选中Sort属性时,只能关联一个CString类型的值成员变量。所关联的值成员变量的数据类型不同,决定着在初始化时进行选中操作的方法也不同。

    当关联的是int型的值成员变量,可以使用CListBox::SetCurSel(int nSelect)来设置列表框的初始选中状态。如果关联的是CString型的值成员变量,就要使用CListBox::SelectString(intnStartAfter,LPCTSTR LpszItem)函数,从nStartAfter指定的下标位置起查找由LpszItem字符串指定的选择项,来设置列表框的初始选中状态。

    常用的操作还有:CListBox::DeleteString(int nIndex),删除指定下标的选择项,删除后其后的选择项向前移动一位;CListBox::GetCursel(),返回当前选中的选择项的下标值。

    (三)多选列表框

    多选列表框扩展了标准的单项选择列表框的能力,可以解决在一个列表框中选择多个选项带来的复杂性。

    对于多选列表框,同样可以关联CStting和int类型的值成员变量,但通过值成员变量传递回来的是最后一个选中的选项内容,要获得选中的多个选项,需要通过CListBox类提供的多选项操作方法。

    为多项选择列表框提供的CListBox类方法如下:

    GetAnchorlndex()获得多项选择列表框中当前定位项的下标
    GetCaretlndex()获得多项选择列表框中具有光标矩形的项的下标
    GetSelCount()获得多项选择列表框中当前所选的项的数目
    GetSelItems()将当前所有被选列表框项下标放入一整型数组缓冲区
    SelItemRange()切换多选择列表框项范围的选择状态
    SetAnchorIndex()在多项选择列表框中扩充选择设置开始(定位)项
    SetCaretlndex()在多项选择列表框中指定下标项设置光标矩形
    SetSel()在多项选择列表框中设置选项的选择状态

    六、 CComboBox类控件的使用

    组合框控件是把编辑框和列表框控件组合起来的一类控件。组合框使用户既能像使用编辑控件那样直接输入数据,也能像使用列表框那样从一些选项中选择某一选项来输入数据。
    当用户没有被限制必须选择列表框中选项时,组合框十分有用。组合框的列表框部分能用来显示最近的选择,同时给用户在编辑控件中输入新选择的自由。
    有如下三种类型的组合框控件:
    1.简单组合框(Simple)
    显示一个编辑控件和列表框。该列表框总是可见的。当列表框包含的选项太多,显示不下时,将使用一个滚动条在整个列表框中滚动。
    2.下拉式组合框(Dropdown)
    隐藏列表框,直到用户打开它。使用这种类型的组合框,在对话框中占用的空间比简
    单组合框要小得多。
    3.下拉式列表框(Drop List)
    与下拉式组合框相似,只有被用户打开时,才显示列表框。同时,编辑框只能显示选中的选项,而不允许用户输入。因此,用户只能从列表框中选择选项。

    (一)CComboBox类控件介绍

    MFC的CComboBox类封装了组合框。需要指出的是,虽然组合框是编辑框和列表框的组合,但是CComboBox类并不是Mit类和CListBox类的派生类,而是CWnd类的派生类。
    CComboBox类的成员函数较多。其中常用的函数可粗分为两类,分别针对编辑框组件和列表框组件。可以想象,这些函数与CEdit类和CListBox类的成员函数肯定有很多类似之处,但它们也会有一些不同的特点。如果我们能从“组合框是由编辑框和列表框组成”这一概念出发,就能够很快掌握CComboBox的主要成员函数。

    事实上,绝大部分CComboBox的成员函数都可以看成是Mit或CListBox成员函数的翻版。函数的功能、函数名、甚至函数的参数都是类似的。为了方便学习,下面列出的CComboBox类成员函数,采用了与对应的Mit或CListBox成员函数相比较的做法。在成员函数的列表中,分别列出了成员函数名、对应的Mit或CListBox成员函数,以及二者之间的不同之处。不同之处是指函数的功能、参数以及返回值的差别。
    针对编辑框组件的主要成员函数如表7-13所示。该表的前3个函数实际上是CWnd类的成员函数,可用来查询和设置编辑框组件。

    针对编辑框组件的CComboBox类成员函数:

    成员函数名对应的CEdit成员函数不同之处
    成员函数名                                          对应的CEdit成员函数                                                  不同之处
    CWnd::GetWindowText                      CWnd::GetWindowText                                                无
    CWnd::SetWindowText                      CWnd::SetWindowText                                                无
    CWnd::GetWindowTextLength          CWnd::GetWindowTextLength                                    无
    GetEditSel                                           GetSel                                                                           函数名不同
    SetEditSel                                           SetSel                                                                            函数名不同,且无bNoScroll参数
    Clear                                                    Clear                                                                              无
    Copy                                                    Copy                                                                               无
    Cut                                                       Cut                                                                                  无
    Paste                                                   Paste                                                                              无
    与CListBox的成员函数类似,针对列表框组件的CComboBox成员函数也可以分为3类。用于插入和删除列表项的成员函数、用于搜索、查询和设置列表框的成员函数,与列表项的选择有关的成员函数如下:

    另外,CComboBox的ShowDrouDown()成员函数专门负责显示或隐藏列表框组件,该函数的声明为
    void ShowDropDown(BOOL bShowIt=TRUE);

    成员函数名         对应的CListBox成员函数         区别:

    AddString            AddStting            无
    InsertString            InsertStting            无
    DeleteString            DeleteString            无
    ResetContent             ResetContent            无
    Dir            Dir            无
    GetCount             GetCount            无
    FindString             FindString            无
    GetLBText             GetText            仅函数名不同
    GetLBTextLen            GetTextLen            仅函数名不同
    GetItemData            GetltemData            无
    SetItemData             SetItemData            无
    GetTopIndex             GetTopIndex            无
    SetToplndex             SetTopIndex            无

    与列表项的选择有关的CComboBox成员函数

    成员函数名            对应的CListBox成员函数            区别 
    GetCurSel            GetCurSel            无
    SetCurSel            SetCurSe1            新选中的列表项的内容会被复制到编辑框组件中
    SelectStting            SelectString            新选中的列表项的内容会被复制到编辑框组件中

    如果参数bShowlt的值为TRUE那么将显示列表框组件,否则将其隐藏。该函数对简单组合框没有作用。

    由于组合框中包含了编辑框和列表框,因此它有大量的属性。大多数编辑框和列表框
    样式有可用于组合框的相似属性,下面两个属性是组合框特有的。
    1 .Enter listbox items
    用于创建对话框时默认显示的列表项。在每次进入后按Ctrl+Enter键。
    2. Type
    用于指定组合框类。用户可以在Simple, Dropdown和Drop List之间选择。Dropdown是默认的选择。Simple类型是一个文本框与列表框相组合的风格,DropDown类型允许用户输入,DropList类型不允许用户输入。所以选择DropDown类型时,可以在对话框类中连接CString类型的值成员变量,选择DropList类型时,可以在对话框类中连接int型的值成员变量,对于两者的操作与列表框的操作完全相同。

    七、 CScroIIBar类控件的使用

    (一) CScrollBar类控件介绍

    滚动条是一种交互式的、高度可视化的控件,它对用户的输入有几种不同的响应。滚动条中包括一个滑块,这个滑块能够沿滚动条移动;在滚动条的两端还各有一组按钮。

    滚动条控件与属于窗口的滚动条是不一样的,属于窗口的滚动条由该窗口创建、管理和释放,而滚动条控件由用户创建、管理和释放。滚动条在窗口中可以设置为水平或垂直,单击滚动条两端的箭头按钮时,滚动条移动的距离称为滑块的滚动单位,滚动单位可以根据程序的需要进行设置。

    滚动条控件是Windows窗口操作中常用的工具。滚动条控件最直接的功能是当应用程序显示的内容超过窗口的范围时,用户可通过拖动滚动条遍历整个窗口内容。滚动条在功能上分为垂直与水平滚动条,分别实现窗口内容的纵向和横向滚动。

    此外,滚动条控件还可作为调节音量、颜色的工具。在应用程序开发中常见到类似的滚动条使用方法。

    滚动条类的主要方法及其含义如下所示:

    EnableScrollBar( )使滚动条的一个或两个箭头有效或无效
    GetScrollInfo( )获得滚动条的消息
    GetScrollLimit()获得滚动条的范围
    GetScrollPos()获得滚动条当前的位置
    GetscrollRange()获得制定滚动条的当前最大和最小滚动位置
    SetScmBlnfo()设置滚动条的消息
    SetSCrolIPOS()设置滚动块当前的位置
    SetScrollRange( )设置制定滚动条的最大和最小滚动位置
    ShowScrollBar()显示或隐藏滚动条
    滚动条可发出的消息如下:
    SB_ BOTTOM/ SB_ RIGHT滚动到底端(右端)
    SB_ TOP/SB_ LEFT滚动到顶端(左端)
    SB_ LINEDOWN/ SB_LINERIGHT向下(向右)滚动一行(列)
    SB_LINEUP/SB_ LINELEFC向上(向左)滚动一行(列)
    SB_ PAGEDOWN/SB_PAGERIGHT向下(向右)滚动一页
    SB_PAGEUP/SB_ PAGELEF向上〔向左)滚动一页
    SB_THUMBPOSITION滚动到指定位置
    SB THUMBTRACK 滚动框被拖动。用该消息可跟踪对滚动框的拖动
    SB_ENDSCROLL 滚动结束

    注:SB:Scroll Bar

    更多相关内容
  • 十四、windows窗体高级控件

    千次阅读 2022-02-14 23:17:30
    PictureBox控件 PictureBox控件可以显示来自位图、图标或者原文件,以及来自增强的元文件、Jpeg或GIF文件的图形。如果控件不足以显示整幅图像,则捡钱图像以适应控件的大小 using System; using System....

    1 PictureBox控件

    • PictureBox控件可以显示来自位图、图标或者原文件,以及来自增强的元文件、Jpeg或GIF文件的图形。如果控件不足以显示整幅图像,则捡钱图像以适应控件的大小
      在这里插入图片描述
      在这里插入图片描述
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace _1_PictureBox
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                label3.Visible = false;
                label4.Visible = false;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioNomal_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.Normal;
                label3.Visible = true;
                label4.Visible = false;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioStretchImage_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                label3.Visible = false;
                label4.Visible = true;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioAutoSize_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                label3.Visible = false;
                label4.Visible = false;
                label5.Visible = true;
                label6.Visible = false;
                label7.Visible = false;
            }
    
            private void radioCenterImage_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
                label3.Visible = false;
                label4.Visible = false;
                label5.Visible = false;
                label6.Visible = true;
                label7.Visible = false;
            }
    
            private void radioBZoom_CheckedChanged(object sender, EventArgs e)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                label3.Visible = false;
                label4.Visible = false ;
                label5.Visible = false;
                label6.Visible = false;
                label7.Visible = true ;
            }
        }
    }
    
    

    在这里插入图片描述

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace _1_PictureBox
    {
        public partial class showPicture : Form
        {
            public showPicture()
            {
                InitializeComponent();
            }
    
    
            public int i = 0; //图片索引参数
            public string[] path = Directory.GetFiles(@"C:\Users\Admin\Desktop\Images\");  //Directory需要引入命名空间using System.IO
            private void 图片查看器_Load(object sender, EventArgs e)
            {
                //设定图片如何在PictureBox中显示
                pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                //设定PicturBox默认显示图片
                pictureBox1.Image = Image.FromFile(path[i]);
                
                //获取指定文件夹下所有文件的全路径
               
                //下面循环仅仅是验证获取的路径都是什么文件路径,与此示例功能无关
                //foreach (string  onePicturePath in path)
                //{
                //    MessageBox.Show(onePicturePath); //是路径下所有的文件,不仅仅是图片文件
                //    //Console.WriteLine(onePicturePath); //不能空控制台输出
                //}
    
            }
            private void button1_Click(object sender, EventArgs e)
            {
                i--;
                if (i < 0) i = path.Length - 1; //翻到第一张后此时i变为负数,将i重新赋值为“总长度-1”即最后一张索引值,从而达到训话浏览
                pictureBox1.Image = Image.FromFile(path[i]);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                i++;
                if (i > path.Length - 1) i = 0;//i大于总长度减一,即翻到最后一张后又点击了一次下一张,此时翻到第一张
                pictureBox1.Image = Image.FromFile(path[i]);
            }
        }
    }
    
    

    2 ImageList控件

    • ImageList,又叫存储图像控件,用来存储图像的组合,但它不能显示图像,要显示它存储的图像需要借用第二个控件
    • 第二个控件是包含ImageList属性的控件(例如:ListView或TreeView),这个属性一般和ImageIndex属性一起使用。ImageList属性设置为ImageList组件的一个实例,ImageIndex属性设置为ImageList中对应图像的索引
    • ImageList控件两个常用属性
      • ImageSize用来设置图像的大小,Width属性和Height属性,用来设置图像的宽和高,其默认值都为16,取值范围1~256之间。
      • ColorDepth,用来设置颜色深度,取值为4位~32位。
    • ImageList一个方法
      • Draw:用于绘制指定的图像(可以理解为显示图像)
        在这里插入图片描述
        add()和addstrip()的区别 :AddStrip图像条方法的宽度必须为整数(是ImageList.size的整数倍),否则会发生异常

    在这里插入图片描述

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace _3_ImageList控件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button3_Click_1(object sender, EventArgs e)
            {
                //声明一个图像变量
                Image image1 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\1.png");
    
                
    
                //imageList控件添加元素的方法
                //方法1,添加单个元素
                imageList1.Images.Add(image1);
    
                //创建了一个窗口句柄(Handle) H wnd(windows)
                Graphics mygph = Graphics.FromHwnd(this.Handle);
                //Draw有三种方法
                //第一种 (graphics对象,左上角点坐标,索引值)
                imageList1.Draw(mygph, new Point(50, 50), 0);  //第一个参数是句柄,第二个参数是图片显示起始位置(图片左上角的位置,用于定位图片),第三个参数是图片索引值,即ImageList中的图片索引
                //第二种:(graphics对象,水平坐标,垂直坐标,索引值)
                //第三种:(graphics对象,水平坐标,垂直坐标,图像宽度,图像高度,索引值)
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //imageList控件添加元素的方法
                //方法2  一次添加多个元素
                Image image2 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\2.png");
                Image image3 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\3.png");
                Image image4 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\4.png");
                Image[] images = { image2, image3, image4 };
                imageList1.Images.AddRange(images);
    
                //方法3  AddStrip
                Image image5 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\5.png");
                Image image6 = Image.FromFile(@"C:\Users\Admin\Desktop\Images\6.png");
                imageList1.Images.AddStrip(image5);
                imageList1.Images.AddStrip(image6);
    
    
                //创建了一个窗口句柄(Handle) H wnd(windows)
                Graphics mygph = Graphics.FromHwnd(this.Handle);
    
                for (int i = 0; i < imageList1.Images.Count; i++)
                {
                    imageList1.Draw(mygph, new Point(50, 50), i);
                    //因为显示速度太快,给线程添加一个休眠时间;
                    System.Threading.Thread.Sleep(1000);
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                //删除imageList对象的方法
                //removeAt(索引值)
                imageList1.Images.RemoveAt(5);
                imageList1.Images.RemoveAt(4);
                imageList1.Images.RemoveAt(3);
    
            }
        }
    }
    

    3 ListView控件

    • ListView控件是Windows列表视图控件,该控件显示可用五种不同视图之一显示的向集合
      • LargeIcon:在想文本胖显示大图标,如果控件足够大,则显示在多列中
      • SmallIcon:除显示小图标外,其他方面与大图标视图模式相同
      • List:显示小图标,单总是显示在单列中。
      • Details:在多列中显示向。
      • Tile:每个向都显示一位一个完整大小的图标,在他的右边带向标签和子项信息(仅支持XP/SERVER2003)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    using System;
    using System.Windows.Forms;
    
    namespace _5_ListView
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                String[,] myCountry = { { "China", "中国", "北京" }, { "Korea", "韩国", "首尔" }, { "Canada", "加拿大", "渥太华" }, { "American", "美国", "纽约" }, { "Jpan", "日本", "东京" }, { "SingPore", "新加坡", "新加坡" }, { "UK", "英国", "伦敦" }, { "Vietnam", "越南", "河内" }, };
                for (int i=0; i < myCountry.Length/3; i++)    //length获取数组的长度,是指最小元素的数量。例如上面数组共24个元素。
                {
                   
                    ListViewItem mylvi = listView1.Items.Add(i.ToString());   //可以理解为添加了一个对象名称,或者行名称
                    mylvi.ImageIndex = i;
                    mylvi.SubItems.Add(myCountry[i,0]);
                    mylvi.SubItems.Add(myCountry[i,1]);
                    mylvi.SubItems.Add(myCountry[i,2]);
    
                }
    
            }
    
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedItem.ToString() == "LargeIcon") listView1.View = View.LargeIcon;
                if (comboBox1.SelectedItem.ToString() == "SmallIcon") listView1.View = View.SmallIcon;
                if (comboBox1.SelectedItem.ToString() == "Details") listView1.View = View.Details;
                if (comboBox1.SelectedItem.ToString() == "List") listView1.View = View.List;
                if (comboBox1.SelectedItem.ToString() == "Tile") listView1.View = View.Tile;
    
            }
        }
    }
    
    

    在这里插入图片描述

    4、TreeView控件

    • Tree View控件可以为用户显示节点层次结构,就想在Windows资源管理器功能的左创个中显示文件和文件夹一样。树视图中的各个节点可能包含其他节点。称为子节点。用户可以按照展开或折叠的方式显示父节点或包含子节点的节点。通过将树是的CheckBoxes属性设置为True,还可以在节点旁边显示带有复选框的树视图。
    • 添加和算出树节点
    • Tree View控件以层侧结构的方式显示节点,Nodes属性包含舒适图中的顶级节点列表,它是TreeNode对象集合。
    • 添加节点:先创建TreeNode对象,然后通过Nodes的Add方法创建的TreeNode对象添加为TreeView节点;
    • 删除节点,可用Nodes属性的Remove方法或RemoveAt方法
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace TreeView
    {
        public partial class Form1 : Form
        {
            public string[] nodeName = new string[100];
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();    //实例化一个树节点对象
                if (textBox1.Text.Trim() != "")
                {
                    mytn.Text = textBox1.Text.Trim();  //给节点对象赋值
                    treeView1.Nodes.Add(mytn);         //将节点添加到TreeView控件中
                }
                else
                {
                    MessageBox.Show("请先添加节点的名称");
                }
                
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();    //实例化一个树节点对象
                if (textBox1.Text.Trim() != "")
                {
                    mytn.Text = textBox1.Text.Trim();  //给节点对象赋值
                    treeView1.SelectedNode.Nodes.Add(mytn);
                }
                else
                {
                    MessageBox.Show("请先添加节点的名称");
                }
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();
                mytn = treeView1.SelectedNode;
                if (mytn.Nodes.Count > 0)
                {
                    DialogResult myDR = MessageBox.Show("该节点下有子节点不允许删除,请先删除子节点");
                }
                else
                {
                    mytn.Remove();
                }
               
    
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                TreeNode mytn = new TreeNode();
                mytn = treeView1.SelectedNode;
                if (textBox1.Text.Trim() != "")
                {
                    if(((System.Collections.IList)nodeName).Contains(textBox1.Text) != true) mytn.Text = textBox1.Text.Trim();
                    else MessageBox.Show("已经存在\""+textBox1.Text+"\"的节点不能重复添加","错误提示");
                }
                else
                {
                    MessageBox.Show("请先添加节点的名称");
                }
            }
    
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //TreeNode mytn = new TreeNode();
                //mytn = treeView1.SelectedNode;
                //MessageBox.Show(mytn.Text);
               
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                int i = 0;
                foreach (TreeNode mynode in treeView1.Nodes)
                {
                    nodeName[i] = mynode.Text;
                    i++;
                }
                       
            }
        }
    }
    
    

    5、DateTimePicker控件使用户可以从日期

    • DateTimePicker控件使用户可以从日期或时间列表中选择打个项。在用来日期时,显示为两部分,即一个下拉列表和一个类似于MonthCalendar控件的网格。
    • 显示时间
      - DateTimePicker控件默认是显示日期,显示时间时,必须将ShowUpDown属性设置为true,将Format属性设置为Time。
      -
      在这里插入图片描述
      在这里插入图片描述
    • 自动以格式显示日期
      - 想要DateTimePicker控件以自定义格式显示日期,就的湘江Format属性设置为Custom,然后将CustomFormat属性设置为一个格式字符串
      在这里插入图片描述

    在这里插入图片描述

    • DateTimepicker控件中当选定的日期和事件有Value属性确定。默认情况下,此空间的Value属性设置为当前日期。如果在代码中更改了此空间的Value属性,则此空间在窗体上自动更新一反应新设置。Value属性将DateTime结构作为它的值返回,有若干个DateTime结构的属性返回关于显示日期的特定信息。这些属性只用用于返回值,而不能用来设置值。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    using System;
    using System.Windows.Forms;
    
    namespace _8_DateTimePicker控件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
            {
                string tg = "甲乙丙丁午己庚辛壬癸";
                string dz = "子丑寅卯辰巳午未申申酉戌亥";
                string sx = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
                int year = dateTimePicker1.Value.Year;
                label1.Text = "您选择的年为:农历" + tg[(year - 4) % 10] + dz[(year - 4) % 12] + "年,生肖是" + sx[(year - 4) % 12] + "年";
    
            }
        }
    }
    
    

    6、MonthCalendar控件

    • MonthCalendar控件是用来查看和设置日期信息。它是一个可视化网络图形界面,网格内包含月份的编号日期,这些日期排列在周一~周日下方的七个列表中。用户可以单击月份标题任何一侧的箭头按钮来选择不同的月份。该控件还有一个更强的功能。就是可以选择日期范围。

    • 以粗体显示特定日期

    • MonthCalendar控件以粗体显示特殊的日期或重要出现的日子,用此控件显示特殊日期的属性有三个:
      - BoldedDates属性包含单个日期,(仅设置单个日期以粗体显示,上/下一个月以及上一年/下一年的日期都不影响)
      - AnnuallyBoldeDates属性包含每年以粗体显示的日期;(设置每年的同一日期粗体显示)
      - MonthlyBoleedDates属性包含每月以粗体显示的日期;(设置每月的同一日期粗体显示)
      - 这三个属性中的每一个都包含有一个DateTime对象数组。若要从这些列表中添加或移除日期,必须添加或移除DateTime对象。

    • 显示多个月份
      - MonthCalendar控件可显示多个月份,最多可同时显示十二个月。默认情况下,控件只显示一个月,用户可通过CalendarDimensions属性来设置要显示的月份个数,它有两个属性width属性和height属性,分别用来设置列数和行数。在设置或更改月历尺寸时,控件的大小也会随之改变:因此应确保窗体上有足够的空间共新尺寸用。

    • 选择日期范围

      • MaxDate属性和MinDate属性:这两个属性分别用来设置选择的最大日期和最小日期
      • 注意:如果代码中设置日期范围,则MaxDate属性和MinDate属性的值都为DateTime对象。
    • 更改外观(在win7及以后的系统中已经被放弃)
      起作用的前提是按照下图所示进行设置设置,
      在这里插入图片描述

    在这里插入图片描述

    ErrorProvide控件

    • ErrorProvider控件可以对窗体或控件上的用户输入进行验证。当验证用户在窗体中输入或显示的数据集的内部错误时,一般要用该控件。
    • ErrorProvide控件的主要属性是DataSource(与数据库相关)、ContainerControl和Icon。将ErrorProvider控件与数据绑定控件结合使用时,必须要将containerControl属性设置为相应的容器(通常是Windows窗体),以便于该组件可以在窗体上显示错误图标。
    • Icon属性可以设置为自定义错误图标而不是默认图标。
    • 设置DataSource属性后,ErrorProvider控件可为数据集显示错误信息
    • ErrorProvider控件的主要方法时SetError方法,该方法可以指定错误信息字符串和错误图标应出现的位置。其使用格式为:Errorprovider变量名.SetError(需要在哪个控件旁边显示信息(textBox1),显示错误的信息的字符串(您输入的数据不正确))
      在这里插入图片描述
    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace _12_ErrorProvider控件
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
               
            }
    
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (textBox1.Text.Length < 8 || textBox1.Text.Length > 10)
                {
                    errorProvider1.SetError(textBox1, "用户名必须为8~12位");
                    errorProvider1.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\error.ico");
                }
                else
                {
                    errorProvider1.SetError(textBox1, "通过验证");
                    errorProvider1.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\true.ico");
    
                }
            }
    
            private void textBox3_TextChanged(object sender, EventArgs e)
            {
                if (textBox3.Text != textBox2.Text)
                {
                    errorProvider2.SetError(textBox3, "两次输入的密码不一致");
                    errorProvider2.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\error.ico");
                }
                else
                {
                    errorProvider2.SetError(textBox3, "通过验证");
                    errorProvider2.SetError(textBox2, "通过验证");
                    errorProvider2.Icon = new Icon(@"E:\C#\project\Windows窗体高级控件\ico\true.ico");
                }
    
            }
        }
    }
    
    

    HelpProvide控件

    • HelpProvide控件用于将html帮助文件(.btm文件或chm文件)与windows应用程序相关联。用户可通过多种方式提供帮助:
      - HelpNamespace属性将帮助文件与HelpProvider组件相关联;关联后需要设置窗体的HelpProvidershowHelp才可以在按下F1键后弹出帮助文件。
      在这里插入图片描述

    在这里插入图片描述
    - 通过调用SetHelpNavigator并提供指定控件的HelpNavigator枚举值来指定提供的帮助类型:
    在这里插入图片描述

    	 - 通过调用setHelpKeyWord方法为帮助提供关键字或主题
    

    在这里插入图片描述

    注:网页可以用 Web DreamWeaver编辑器编辑网页帮助文档,chm可以用Easy chm进行编辑.

    在这里插入图片描述

    ProgressBar控件

    • ProgressBar控件通过在水平条中显示响应数据的矩形来只是操作的进度。操作完成时,进度栏被填满。进度栏通常用于帮助用户了解等待一项长时间的操作(例句,加载大文件)完成所需的事件
    • ProgressBar控件主要属性有value、setp、minimum和maximum。Minimum和Maximum属性设置进度栏可以显示的最大值和最小值;Value属性标识操作过程中已完成的进度:Step属性用于指定Value属性定增的值。
    • 除直接设置Value属性修改ProgressBar控件显示的值外,还可以使用Increment方法来指定Value属性递增的值。
    • 其格式为:ProgressBar对象.Inrement(进度值)
    • ProgressBar一个重要的方法时PerformStep方法,主要用于递增该值Stem属性指定Value属性递增值
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace ProgressBar
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //progressBar1.Value = 1000;
                //progressBar1.Increment(1500);
    
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                progressBar1.PerformStep();
            }
        }
    }
    
    

    实例:
    在这里插入图片描述

    using System;
    using System.Windows.Forms;
    
    namespace ProgressBar
    {
        public partial class Form1 : Form
        {
            //日志输出方法
            public void outlog(string str)
            {
                textBox2.AppendText(DateTime.Now.ToString() + str + "\r\n");
            }
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                btnSet.Enabled = true;
                btnStart.Enabled = false;
                btnPause.Enabled = false;
                btnStop.Enabled = false;
    
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                progressBar1.PerformStep();
            }
    
            private void btnSet_Click(object sender, EventArgs e)
            {
                try
                {
                    if (tbSettime.Text.Trim() != "")
                    {
                        progressBar1.Minimum = 0;
                        progressBar1.Maximum = Convert.ToInt32(tbSettime.Text);
                        progressBar1.Step = -1;
                        progressBar1.Value = progressBar1.Maximum;
                        btnSet.Enabled = false;
                        btnStart.Enabled = true;
                        textBox2.AppendText("========================================================\r\n");
                        outlog("时间正确设置,请点击开始键继续。。。");
    
                    }
                    else
                    {
                        MessageBox.Show("请输入正确的秒数,必须为正整数");
                    }
                }
                catch (Exception)
                {
    
                    MessageBox.Show("请输入正确的秒数,必须为正整数");
                }
            }
    
            private void btnStart_Click(object sender, EventArgs e)
            {
                btnStart.Enabled = false;
                btnPause.Enabled = true;
                btnStop.Enabled = true;
                timer1.Enabled = true;
                timer1.Interval = 1000;
                timer1.Start();
            }
    
            private void timer1_Tick_1(object sender, EventArgs e)
            {
                if (progressBar1.Value > progressBar1.Minimum)
                {
                    progressBar1.PerformStep();
                    outlog("进度条工作正在进行,已经完成了" + Convert.ToInt32(((1 - Convert.ToDouble(progressBar1.Value) / Convert.ToDouble(progressBar1.Maximum)) * 100)).ToString() + "%");
                    //(最大值-当前值)/最大值=进度百分比
                    // 1-当前值/最大值=进度百分比
                }
                else
                {
                    outlog("进度已经完成");
                    timer1.Stop();
                    btnSet.Enabled = true;
                    btnStart.Enabled = false;
                    btnPause.Enabled = false;
                    btnStop.Enabled = false;
                }
            }
    
            private void btnPause_Click(object sender, EventArgs e)
            {
                if (timer1.Enabled == true)
                {
                    outlog("进度已经被暂停");
                    btnPause.Text = "继续";
                    timer1.Stop();
                }
                else
                {
                    outlog("进度条继续工作");
                    btnPause.Text = "暂停";
                    timer1.Start();
                }
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                outlog("进度条停止工作\r\n===================");
                timer1.Enabled = false;
                progressBar1.Value = 0;
                btnPause.Enabled = false;
                btnSet.Enabled = true;
                btnStart.Enabled = false;
                btnStop.Enabled = false;
                btnPause.Text = "暂停";
            }
        }
    }
    
    

    任务实施

    在这里插入图片描述
    在这里插入图片描述

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace 任务实施
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnAdd_Click(object sender, EventArgs e)
            {
                ListViewItem myLVI = lv1.Items.Add((lv1.Items.Count + 1).ToString());
                myLVI.SubItems.Add(tbName.Text);
                myLVI.SubItems.Add(cbGender.Text);
                myLVI.SubItems.Add(TbTel.Text);
                myLVI.SubItems.Add(tbDepartment.Text);
                myLVI.SubItems.Add(DTPJOinTime.Value.ToString("yyyy年MM月dd日"));
                tbName.Clear();
                cbGender.Text = "";
                TbTel.Clear();
                tbDepartment.Clear();
                DTPJOinTime.Value = DTPJOinTime.MaxDate;
                tbName.Focus();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //设置时间最大值为当前日期,并将最大值复制给value
                DTPJOinTime.MaxDate = DateTime.Now;
                DTPJOinTime.Value = DTPJOinTime.MaxDate;
                progressBar1.Maximum = 5;
                progressBar1.Minimum = 0;
                progressBar1.Step = 1;
                pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
                pictureBox1.Image = Image.FromFile(@"E:\C#\project\Windows窗体高级控件\任务实施\banner\雪上行者.PNG");
            }
    
            private void btnModi_Click(object sender, EventArgs e)
            {
                //修改选定内容,首先判断是否有选定的内容,选定的项目数量大于0代表有被选中
                if (lv1.SelectedItems.Count > 0)
                {
                    lv1.SelectedItems[0].SubItems[1].Text = tbName.Text;
                    lv1.SelectedItems[0].SubItems[2].Text = cbGender.Text;
                    lv1.SelectedItems[0].SubItems[3].Text = TbTel.Text;
                    lv1.SelectedItems[0].SubItems[4].Text = tbDepartment.Text;
                    lv1.SelectedItems[0].SubItems[5].Text = DTPJOinTime.Value.ToString("yyyy年MM月dd日");
                    tbName.Clear();
                    cbGender.Text = "";
                    TbTel.Clear();
                    tbDepartment.Clear();
                    DTPJOinTime.Value = DTPJOinTime.MaxDate;
                    tbName.Focus();
    
    
    
                }
            }
    
            private void btndel_Click(object sender, EventArgs e)
            {
                //删除所选定的项目
                lv1.SelectedItems[0].Remove();
            }
    
            private void btnClear_Click(object sender, EventArgs e)
            {
                //清除ListView中所有内容
                lv1.Items.Clear();
            }
            //声明图片存放的路径,并声明一个随机变量,以便随机显示图片
            string[] path = System.IO.Directory.GetFiles(@"E:\C#\project\Windows窗体高级控件\任务实施\banner");
            Random r = new Random();
            private void timer1_Tick(object sender, EventArgs e)
            {
                int num = 0;
                if (tbName.Text.Trim() != "") num++;
                if (cbGender.Text != "") num++;
                if (TbTel.Text.Trim() != "") num++;
                if (tbDepartment.Text.Trim() != "") num++;
                if (DTPJOinTime.Value != DTPJOinTime.MaxDate) num++;
                progressBar1.Value = num;
                //随机显示图片
                pictureBox1.Image = Image.FromFile(path[r.Next(0,path.Length)]);
            }
    
            private void btnCheck_Click(object sender, EventArgs e)
            {
                lv1.ForeColor = Color.Black;
                //在ListView中查询文本
                ListViewItem checkItem = lv1.FindItemWithText(tbCheck.Text);
                //判定是否查询到
                if (checkItem != null)
                {
                    this.lv1.TopItem = checkItem;
                    checkItem.ForeColor = Color.Red;
                }
                else
                {
                    MessageBox.Show(tbCheck.Text+"不存在");
                }
            }
    
        }
    }
    
    
    展开全文
  • windows控件

    2013-04-25 13:41:36
    该文档描述了在windows开发中常用到的控件的描述,包括,按钮,编辑框,列表框,单选框,组合框等等控件的详细描述,以及使用方法,该文档一共63页,通过举一翻三的方法,掌握windows中的控件的使用方法。
  • 设计了Windows基本控件的使用,本程序使用C语言写的,主要是为了帮助大家理解这些控件的原理,同时为哪些想要学习C语言界面编程的人提供一些提示。MFC、C#的编程者也可以查看。里面的控件介绍包括TREEVIEW、Tab ...
  • Windows应用程序常用控件1 控件概述1.1 控件的分类及作用1.2 控件的命名规范1.2 控件的相关操作2.1 添加控件2.2 对齐控件2.3 锁定控件2.4 删除控件3 文本类控件3.1 标签控件(Label控件)3.2 按钮控件(button控件)...

    1 控件概述

    窗口是由控件有机构成的,所以熟悉控件是进行合理、有效的程序开发的重要前提。Windows应用程序中的控件分为常用控件和高级控件。

    1.1 控件的分类及作用

    常用控件可以分为文本类控件、选择类控件、分组控件、菜单控件、工具栏控件以及状态栏控件。Windows应用程序控件的基类是位于System.Windows.Form命名空间的Control类。Control类定义了控件类的共同属性、方法和事件,其他控件类都直接或间接的派生自这个基类。
    常用控件的作用

    控件分类作用
    文本类控件文本类控件可以在控件上显示文本
    选择类控件主要为用户提供选择的项目
    分组控件使用分组控件可以将窗体中的其他控件进行分组处理
    菜单控件为系统制作功能菜单,将应用程序命令分组,使他们更容易访问
    工具栏控件提供了主菜单中常用的相关工具
    状态栏控件用于显示 窗体上的对象的相关信息,或者可以显示应用程序的信息

    1.2 控件的命名规范

    控件的命名规范

    控件名称开头缩写
    TextBoxtxt
    Buttonbtn
    ComboBoxcbox
    Labellab
    DataGridViewdgv
    LitBoxlb
    Timertmr
    CheckBoxchb
    LinkLabelllbl
    RichTextBoxrtbox
    CheckedListBoxclbox
    RadioButtonrbtn
    NumbericUpDownnudown
    Pamelpl
    GroupBoxgbox
    TabControltcl
    ErrorProviderepro
    ImageListilist
    HelpProviderhpro
    ListViewlv
    TreeViewtv
    PictureBoxpbox
    NotifyIconnicon
    DateTimePickerdtpicker
    MonthCalendarmcalen
    ToolTipttip

    1.2 控件的相关操作

    对控件的相关操作包括添加控件、对齐控件、锁定控件和删除控件等。

    2.1 添加控件

    对控件的操作,可以通过“在窗体上绘制控件”、“将控件拖拽到窗体上”和“以编程方式向窗体添加空间”这3中方式添加空间。

    1. 在窗体上绘制控件

    在工具箱中单击要添加到窗体的控件,然后在该窗体上单击希望控件左上角所处的位置,然后拖动到希望控件右下角所处位置,控件即按指定的位置和大小添加到窗体中。

    1. 将控件拖拽到窗体上

    在工具箱中单击所需控件并将其拖拽到窗体单行的指定位置。

    1. 以编程方式向窗体添加空间

    使用new关键字实例化要添加控件所在的类,然后将实例化的控件添加到窗体中。

    实例:

    //通过Button按钮的Click时间添加一个TextBox控件
    private void button_Click(object sender.System.EventArgs e)
    {
    	TextBox myText = new TextBox();
    	myText.Location = new Point(25,25);
    	this.Controls.Add(myText);
    }
    

    2.2 对齐控件

    选定一组控件,这些控件需要对齐。在执行对齐之前,首先选定主导控件(首先被选定的控件就是主导控件)。控件组的最终位置取决于主导控件的位置,再选择菜单栏中的“格式”/“对齐”命令,然后选择对齐方式。

    对齐方式实现效果
    左对齐将选定控件沿它们的左边对齐
    居中对齐将选定控件沿它们的中心点水平对齐
    右对齐将选定控件沿它们的右边对齐
    顶端对齐将选的控件沿它们的顶边对齐
    中间对齐将选的控件沿它们的中心点垂直对齐
    底部对齐将选定的件沿它们的底边对齐

    2.3 锁定控件

    在控件的“属性”窗口中,单击Locked属性并选择true即可锁定控件。此外,还可以右击控件,在弹出的快捷菜单中选择“锁定控件”命令。如果要锁定窗体上所有的控件,可以在选择菜单栏中的“格式”/“锁定控件”命令。
    完成窗体设置后。为了避免误操作而改变窗体控件的位置,可以用控件锁定的方法对控件进行定位。

    2.4 删除控件

    删除控件的方法非常简单,可以在控件上单击鼠标右键选择删除命令、或者选中控件按下Delete按键。

    3 文本类控件

    文本类控件主要包括标签控件(Label控件)、按钮控件(Button控件)、文本框控件(TextBox控件)和有格式文本控件(Rich TextBook控件)。

    3.1 标签控件(Label控件)

    标签控件(Label控件)主要用于显示用户不能编辑的文本,标识窗体上的对象。也可以通过编写代码来设置要显示的文本信息。如果要添加一个标签控件,系统会自动创建标签控件的一个对象。

    1. 设置标签文本

    ① 通过标签控件的属性面板设置
    直接在标签控件的属性面板中设置Text属性的值
    ② 通过代码设置
    label1.Text = “你好~”;

    1. 显示/隐藏控件

    ① 通过标签控件的属性面板设置
    直接在标签控件的属性面板中设置Visible属性的值,属性的值为True则显示控件,为False则隐藏控件。
    ② 通过代码设置
    label1.Visible = true;

    3.2 按钮控件(button控件)

    按钮控件(button控件)允许用户通过单击来执行操作。按钮控件(button控件)既可以显示文本,也可以显示图像。

    1. 响应按钮的单击事件

    单击按钮控件时将引发Click事件,执行Click事件中的代码。

    1. 将按钮设置为窗体的“接受”按钮

    通过设置窗体的AcceptButton属性,可以设置窗体的“接受”按钮。如果设置了此按钮,则用户每次按下Enter键都相当于单击该按钮。

    实例:

    private void Form1_Load(object sender,EventArgs e)
    {
    	this.AcceptButton = button1;
    }
    private void button1_Click(object sender,EventArgs e)
    {
    	MessageBox.Show("引发了接受按钮");
    }
    
    1. 将按钮设置为窗体的“取消”按钮
      通过设置窗体的CancelButton属性,可以设置窗体的“取消”按钮。如果设置该属性,则用户每次按下Esc键都相当于单击了该按钮。

    实例:

    private void Form1_Load(object sender,EventArgs e)
    {
    	this.CanecelButton = button1;
    }
    private void button1_Click(object sender,EventArgs e)
    {
    	MessageBox.Show("单击了取消按钮");
    }
    

    说明:
    如果想实现鼠标移入和移出按钮时,改变按钮的样式或字体样式,可以用OnMouseEnter(在鼠标指针进入控件时发生)和OnMouseLeave(在鼠标离开控件的可见部分时发生)时间来实现。

    3.3 文本框控件(TextBox控件)

    文本框控件(TextBox控件)用于获取用户输入的数据或者显示文本。文本框控件通常用于可编辑文件,也可以使其成为只读控件。文本框可以显示多个行,对文本换行使其符合控件的大小。

    1. 创建只读文本框

    ① 通过标签控件的属性面板设置
    直接在标签控件的属性面板中设置ReadOnly的属性,true为可编辑,false为不可编辑。
    ② 通过代码设置
    textBox1.ReadOnly= “true”;

    1. 创建密码文本框

    ① 通过标签控件的属性面板设置
    直接在标签控件的属性面板中设置PasswordChar的属性或UseSystemPasswordChar。
    UseSystemPasswordChar属性:是否为密码框文本,True则为密码框文本且字符默认显示为“*”。
    PasswordChar属性:使用属性值代替文本框内明文的符号。

    ② 通过代码设置
    textBox1.PasswordChar= “*”;
    textBox1.UseSystemPasswordChar= true;

    说明:
    在TextBox控件中可以通过BorderStyle属性获取或设置文本框边框类型,其值为None(无边框)、FixedSingle(单行边框)、Fixed3D(三维边框)。

    1. 创建多行文本框

    ① 通过标签控件的属性面板设置
    直接在标签控件的属性面板中设置Multiline的属性,true为可允许多行输入。
    ② 通过代码设置
    textBox1.Multiline= “true”;

    1. 突出显示文本框中的文本

    SelectionStart属性设置选择的起始位置(如果起始位置在回车符和换行符之间,选择长度将自动加1。该属性值不能为负数)
    SelectionLength属性设置选择文本的长度
    ① 通过代码设置
    textBox1.SelectionStart = 5;
    textBox1.SelectionLength = 5;

    1. 响应文本框的文本更改时间

    当文本框中的文件发生更改时,将会引发文本框的TextChanged时间。

    3.4 有格式文本控件(Rich TextBox控件)

    有格式文本控件(Rich TextBox控件)用于显示、输入和操作带有格式的文本。RichTextBox控件除了执行TextBox控件的所有功能之外,还可以显示字体、颜色和链接,从文本加载文本和嵌入的图像,撤销和重复编辑操作以及查找指定的字符。

    1. 在Rich TextBox控件中显示滚动条

    通过RichTextBox控件的Multiline属性,可以控制控件中是否显示滚动条。滚动条分为水平滚动条和垂直滚动条,通过ScrollBars属性可以设置如何显示滚动条。

    ScrollBars属性的属性值及说明

    属性值说明
    Both只有当文本超过控件的宽度和长度时,才显示水平滚动条或垂直滚动条,或俩个滚动条都显示
    None从不显示任何滚动
    Horizontal只有当文本超过控件的宽度时,才显示水平滚动条。必须将WordWrap属性设置为false,才会出现这种情况。
    Vertical只有当文本超过控件的高度时,才显示垂直滚动条
    ForcedHorizontal当WordWrap属性设置为false时,显示水平滚动条。在文本未超过控件的宽度时,该滚动条显示为浅灰色。
    ForcedVertical始终显示垂直滚动条。在文本未超过控件的长度时,该滚动条显示为浅灰色。
    ForcedBoth始终显示垂直滚动。当WordWrap属性设置为false时,显示水平滚动条。在文本未超过控件的宽度或长度时,俩个滚动条均显示为浅灰色。

    注意:
    当WordWrap(指示多行文本框控件在必要时是否自动换行到下一行的开始)属性为true时,则不论ScrollBars属性的值是什么,都不会显示水平滚动条。

    1. 在Rich TextBox控件中设置字体属性

    通过SelectionFont属性设置Rich TextBox控件中字体的字体系列、大小和字样。通过SelectColor属性设置字体的颜色。
    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        richTextBox1.Multiline = true;  //实现多行显示
        richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //只显示垂直滚动条
        richTextBox1.SelectionFont = new Font("楷体", 12, FontStyle.Bold);  //楷体 大小12 粗体
        richTextBox1.SelectionColor = System.Drawing.Color.Blue;  // 蓝色
    }
    

    效果:
    在这里插入图片描述

    1. 将Rich TextBox控件显示为超链接样式

    Rich TextBox控件可以将Web链接显示为彩色或下划线形式。可以编写代码,在单击链接时打开浏览器窗口,该窗口中显示的连接中本文指定的网站。通过Text属性,设置控件中含有超链接的文本。然后在控件的LinkClicked事件中编写事件处理程序,将所需的文本发送到浏览器。
    注意:
    在Rich TextBox控件的文本中设置超链接是,必须用“http://”开头,且http的前面不能有数字和字母,只能是空格或汉字,否则将无法实现超链接操作。
    实例:

     private void Form1_Load(object sender, EventArgs e)
     {
         richTextBox1.Multiline = true;  //实现多行显示
         richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //只显示垂直滚动条
         richTextBox1.Text = "欢迎登陆 https://blog.csdn.net/qq_41525263?spm=1000.2115.3001.5343 ShiMingSoft ";
     }
     private void richTextBox1_LinkClcked(object sender, LinkClickedEventArgs e)
     {
         System.Diagnostics.Process.Start(e.LinkText);
     }
    

    效果:
    在这里插入图片描述

    1. 在RichTextBox控件中设置段落格式
      RichTextBox控件具有多个用于设置所显示的文本格式的选项。可以通过设置SelectionBullet属性将选定的段落设置为项目符号列表的格式。也可以通过SelectionIndent和SelectHangingIndent属性设置段落向对于控件的左右边缘进行缩进。
      实例:
    private void Form1_Load(object sender, EventArgs e)
    {
        richTextBox1.Multiline = true;  //实现多行显示
        richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //只显示垂直滚动条
        richTextBox1.SelectionIndent = 8;//控件中数据的左边缘与控件左边缘距离为8
        richTextBox1.SelectionRightIndent = 12;//控件中数据的右边缘与控件右边缘距离为12
    }
    

    效果 :
    在这里插入图片描述
    实例:

     private void Form2_Load(object sender, EventArgs e)
    {
        richTextBox1.Multiline = true;  //实现多行显示
        richTextBox1.ScrollBars = RichTextBoxScrollBars.Vertical; //只显示垂直滚动条
        richTextBox1.SelectionBullet = true;  //使控件中的内容以项目符号列表的格式排列
    }
    

    效果 :

    在这里插入图片描述

    4 选择类控件

    选择类控件主要包括下拉组合框控件(ComboBox控件)、复选框控件(CheckBox控件)、单选按钮控件(RadioButton控件)、数值选择控件(NumbericUpDown控件)和列表控件(ListBox控件)。

    4.1 下拉组合框控件(ComboBox)

    下拉组合框控件用于在下拉组合框中线束数据。下拉组合框控件主要由俩部分组成:第一部分是一个允许用户输入列表项的文本框;第二部分是一个列表框,他显示一个选项列表,用户可以从中选择一项。
    说明:
    ComboBox显示与一个ListBox组合的文本框编辑字段,使用户可以从列表中选择项,也可以输入新文本。

    1. 创建只可以选择的下拉框

    通过设置控件的DropDownStyle属性,可以将ComboBox控件设置为可以选择的下拉框。DropDownStyle属性有三个属性值,这三个属性值对应不同的样式。

    Simple:使ComboBox控件的列表部分总是可见的。
    DropDown:DropDownStyle属性的默认值,使用户可以编辑ComboBox控件的文本框部分,只有单击右侧的箭头才能显示列表部分。
    DropDownList:用户不能编辑ComboBox控件的文本框部分,呈现下拉框样式。
    实例:

    //设置DropDownStyle属性
    comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
    comboBox1.Items.Add("内一科");
    comboBox1.Items.Add("内二科");
    comboBox1.Items.Add("骨科");
    comboBox1.Items.Add("儿科");
    

    效果:
    在这里插入图片描述

    1. 选中下拉组合框中可编辑部分的所有文本

    通过控件的SelectAll方法,可以选择ComboBox控件的可编辑部分的所有文本。在使用SelectAll方法之前,要将控件的DropDownStyle属性设置为DropDown,这样才能在文本框部分对选择项进行编辑。

    语法 :

    public void SelectAll()
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //将控件的DropDownStyle属性设置为DropDown,选择下拉列表中的某项,然后单击算则按钮调用控件的SelectAll方法。当再次查看下拉列表时,可以看到编辑文本框中的内容已经被选中
        comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
        comboBox1.Items.Add("内一科");
        comboBox1.Items.Add("内二科");
        comboBox1.Items.Add("骨科");
        comboBox1.Items.Add("儿科");
    }
    private void button1_Click(object sender, EventArgs e)
    {
        comboBox1.SelectAll();
    }
    

    效果:
    在这里插入图片描述

    1. 响应下拉组合框的选项值更改时间

    当下拉列表的选项发生改变时,将会引发控件SelectedValueChanged事件。当SelectedValue属性更改时才会触发SelectedValueChanged事件。
    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //下拉列表的选择发生改变时,触发SelectedIndexChanged事件更改label的值
        comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
        comboBox1.Items.Add("内一科");
        comboBox1.Items.Add("内二科");
        comboBox1.Items.Add("骨科");
        comboBox1.Items.Add("儿科");
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        label1.Text = comboBox1.Text;
    }
    

    效果:
    在这里插入图片描述

    4.2 复选框控件(CheckBox控件)

    复选框控件(CheckBox控件)用来表示是否选取了某个选项条件。常用于为用户提供具有是否或真假的选项。

    1. 判断复选框是否选中

    通过在控件的Click时间中判断控件的CheckState属性,来判断复选框是否被选中。CheckState属性的返回值时Checked或Unchecked,返回值Checked表示控件在选中状态,而返回值Unchecked表示控件已经取消选中状态。

    说明:
    CheckBox控件指示某个特定条件是处于打开状态还是处于关闭状态。它常用于为用户提供是否或真假选项。可以成组使用复选框控件以显示多重选项,用户可以从中选择一项或多项。

    例:

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        //在控件的Click事件中判断手否被选中,如果是弹出相应提示
        if (checkBox1.CheckState == CheckState.Checked)
        {
            MessageBox.Show("checkBox控件被选中");
        }
        else
        {
            MessageBox.Show("checkBox控件选择被取消");
        }
    }
    

    效果:
    在这里插入图片描述
    在这里插入图片描述

    1. 响应复选框的选中状态更改事件

    当控件的选中状态发生改变时,将会引发控件的CheckStateChanged事件

    实例:

    private void checkBox1_CheckStateChanged(object sender, EventArgs e)
    {
        MessageBox.Show("checkBox控件选择状态发生改变");
    }
    

    效果:在这里插入图片描述

    4.3 单选按钮控件(RadioButton)

    单选按钮控件(RadioButton)为用户提供俩个或多个互斥选项组成的选项集。当用户选中某单选按钮时,同一组中的其他单选按钮不能同时选中。

    说明:单选按钮必须在同一组中才能实现单选效果。

    1. 判断单选按钮是否选中

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //通过俩个RadioButton控件的Click事件,判断控件是否为选中状态
        radioButton1.Checked = false;
        radioButton2.Checked = false;
    }
    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        if (radioButton1.Checked == true)
        {
            MessageBox.Show("radioButton1控件被选中");
         }
    }
    private void radioButton2_CheckedChanged(object sender, EventArgs e)
    {
        if (radioButton2.Checked == true)
        {
            MessageBox.Show("radioButton2控件被选中");
        }
    }
    

    效果:
    在这里插入图片描述
    在这里插入图片描述

    1. 响应单选按钮选中状态更改事件

    当控件的选中状态发生改变时,会引发控件的CheckedChanged事件。

    实例:

      private void Form1_Load(object sender, EventArgs e)
      {
          radioButton1.Checked = false;
      }
      private void radioButton1_CheckedChanged(object sender, EventArgs e)
      {
          MessageBox.Show("radioButton1控件选中状态被更改");
      }
      private void button1_Click(object sender, EventArgs e)
      {
          radioButton1.Checked = true;
      }
    
      private void button2_Click(object sender, EventArgs e)
      {
          radioButton1.Checked = false;
      }
    

    效果:
    在这里插入图片描述

    在这里插入图片描述

    4.4 数值选择控件(NumericUpDown控件)

    数值选择控件(NumericUpDown控件)是一个显示和输入数值的控件。该控件提供一对上下箭头,用户可以单击上下箭头选择数值,也可直接输入。该控件的Maximum属性可以设置数值的最大值,如果输入的数值大于这个属性的值,则自动把数值改为设置的最大值。该控件的Minimum属性可以设置数值的最小值,如果输入的数值小于这个属性的值,则自动把数值改为设置的最小值。

    1. 获取NumericUpDown控件中显示的数值

    通过控件的Value属性,可以获取NumericUpDown控件中显示的数值。
    语法:

    public decimal Value{ get; set ;}
    --属性值:NumericUpDown控件的数值
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        numericUpDown1.Maximum = 10;
        numericUpDown1.Minimum = 1;
    }
    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        label1.Text = "当前控件中显示的数值:" + numericUpDown1.Value;
    }
    

    效果:
    在这里插入图片描述

    说明:

    当UserEdit属性(指示用户是否已输入值)设置为true,则在验证或更新该值之前,将调用ParseEditText方法(将数字显示框中的文本转换为数值)。然后,验证该值是否为Mininum和Maximum俩值之间,并调用UpdateEditText方法(以适当的格式显示数字显示框中当前的值)。

    2.设置NumericUpDown控件中数值的显示方法

    NumericUpDown控件的DecimalPlaces属性用于确定在小数点后显示几位数,默认值为0。ThousandsSeparator属性用于确定是否每隔三个十进制数字就插入一个分隔符,默认情况下为false。如果将Hexadecimal属性设置为true,则该控件可以用十六进制(而不是十进制)显示值,默认情况下为false。

    说明:
    DecimalPlaces属性的值不能小于0,或大于99。否则会出现ArgumentOutOFRangeException异常(当参数超出调用方法所定义的允许取值范围时引发的异常)

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
    	//使控件中数值的小数点显示后俩位
        numericUpDown1.Maximum = 10;
        numericUpDown1.Minimum = 1;
        numericUpDown1.DecimalPlaces = 2;
    }
    

    效果:
    在这里插入图片描述

    4.5 列表控件(ListBox控件)

    列表控件(ListBox控件)用于显示一个列表,用户可以从中选择一项或多项。如果选项总数超出可显示的帧数,则控件会自动添加滚动条。

    1. 在ListBox控件中添加和移出项

    通过ListBox控件的Items属性的Add方法,可以向ListBox控件中添加项目。通过ListBox控件的Items属性的Remove方法,可以将ListBox控件中选中的项目移出。

    实例:

    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "")
        {
            MessageBox.Show("添加项目不能为空");
        }
        else
        {
            listBox1.Items.Add(textBox1.Text);
            textBox1.Text = "";
        }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        if (listBox1.SelectedItems.Count == 0)
        {
            MessageBox.Show("请选择要删除的项目");
        }
        else
        {
            listBox1.Items.Remove(listBox1.SelectedItem);
        }
    }
    

    效果:
    在这里插入图片描述

    1. 创建总显示滚动条的列表控件

    通过设置控件的HorizontalScrollbar属性和ScrollAlwaysVisible属性可以使控件总显示滚动条。如果将
    HorizontalScrollbar属性设置为true,则显示水平滚动条。如果将ScrollAlwaysVisible属性设置为true,则始终显示垂直滚动条。

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //HorizontalScrollbar属性为true,显示水平滚动条
        listBox1.HorizontalScrollbar = true;
        //ScrollAlwaysVisible属性为true,显示垂直滚动条
        listBox1.ScrollAlwaysVisible = true;
        button2.Visible = false;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "")
        {
            MessageBox.Show("添加项目不能为空");
        }
        else
        {
            listBox1.Items.Add(textBox1.Text);
            textBox1.Text = "";
        }
    }
    

    效果:
    在这里插入图片描述

    1. 在ListBox控件中选择多项

    通过设置SelectionMode属性的值可以实现在ListBox控件中选择多项。SelectionMode属性的值是SelectionMode枚举值之一,默认为SelectionMode.One。
    SelectionMode枚举成员及说明:

    枚举成员说明
    MultiExtended可以选择多项,并且用户可以使用Shift键、Ctrl键和箭头键来进行选择
    MultiSimple可以选择多项
    None无法选择项
    One只能选择一项

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //实现在控件中可以选择多项
        listBox1.SelectionMode = SelectionMode.MultiExtended;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "")
        {
            MessageBox.Show("添加项目不能为空");
        }
        else
        {
            listBox1.Items.Add(textBox1.Text);
            textBox1.Text = "";
        }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        label1.Text = "共选择了:" + listBox1.SelectedItems.Count + "项";
    }
    

    效果:
    在这里插入图片描述

    5 分组类控件

    分组类控件主要包括容器控件(panel控件)、分组框控件(GroupBox控件)和选项卡控件(TabControl控件)。

    5.1 容器控件(Panel控件)

    容器控件(Panel控件)用于为其他控件提供可识别的分组。容器控件可以使窗体的分类更详细,便于用户理解。

    容器控件就好像是商场的各个楼层,如1楼是化妆品层、二楼是男装层、三楼是女装层等。当然也可以在各层中继续划分,也就是可以在容器控件中嵌套放置多个容器控件。

    使用Panel控件的Show方法可以显示控件。
    语法:

    public void Show()
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        panel1.Visible = false;
        richTextBox1.Text = "姓名:张三\n性别:男";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "")
        {
            MessageBox.Show("请输出姓名");
            textBox1.Focus();  //使光标焦点处于文本框中
        }
        else
        {
            if (textBox1.Text == "张三")
            {
                panel1.Visible = true;
            }
            else
            {
                MessageBox.Show("查无此人");
                textBox1.Text = "";
            }
        }
    }
    

    效果:
    在这里插入图片描述
    在这里插入图片描述

    说明:如果将Panel控件的Enabled属性(设置控件是否可以对用户交互做出响应)设置为false,那么在该容器中的所有控件将设置为不可用状态。

    5.2 分组框控件(GroupBox控件)

    分组框控件(GroupBox控件)主要为其他控件提供分组,按照控件的分组来细分窗体的功能。其在所包含的控件集周围总是显示边框,并且可以显示标题,但是分组框没有滚动条。

    语法:

    public override string Text{ get; set; ];
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        groupBox1.Text = "条件";
    }
    

    效果:
    在这里插入图片描述

    5.3 选项卡控件(TabControl控件)

    选项卡控件(TabControl控件)可以添加多个选项卡,然后在选项卡上添加子控件。这样就可以把窗体设计成多页,时窗体的功能划分为多个部分。选项卡中可包含图片或其他控件。选项卡控件还可以用来创建用于设置一组相关属性的属性页。

    TabControl控件包含选项卡页,TabPage控件表示选项卡,TabControl控件的TabPages属性表示其中的所有TabPage控件的集合。TabPages集合中TabPage选项卡的顺序反映了TablControl控件中选项卡的顺序。

    1. 改变选项卡的显示样式

    通过使用TablControl控件和和组成控件上各选项卡的TabPage对象的属性,可以更改Windows窗体中选项卡的外观。通过设置这些属性,可以使用编程方式在选项卡上显示图像,以垂直方式而非水平方式显示选项卡,显示多行选项卡,以及启用或禁用选项卡。

    ①在选项卡的标签部位显示图像

    说明:
    为了使用户更容易了解选项卡的作用,可以在鼠标移入选项卡时,弹出一个提示信息,对当前选项卡的作用或操作步骤进行详细说明。其设置步骤如下:将tabPage属性中的ShoeToolTips属性设置为true,然后在tabPage属性的ToolTipText属性中输入相关的说明文字。

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //向窗体添加一个ImageList控件,然后将图像添加到ImageList控件的图像列表,然后添加到tabpage里面
        tabControl1.ImageList = imageList1;
        tabPage1.ImageIndex = 0;
        tabPage1.Text = "选项卡 1";
        tabPage2.ImageIndex = 1;
        tabPage2.Text = "选项卡 2";
    }
    

    效果:
    在这里插入图片描述

    ②将选项卡设置为按钮

    将TabControl控件的Appearance属性设置为Buttons或FlatButtons,即可将选项卡显示为按钮样式。如果设置为Buttons,则选项卡具有三维按钮的外观。如果设置为FlatButtons,则选项卡具有水平按钮的外观。

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        tabControl1.ImageList = imageList1;
        tabPage1.ImageIndex = 0;
        tabPage1.Text = "选项卡 1";
        tabPage2.ImageIndex = 1;
        tabPage2.Text = "选项卡 2";
        //将控件Appearance属性设置为buttons,使其具有三维按钮的外观
        tabControl1.Appearance = TabAppearance.Buttons;
    }
    

    效果:
    在这里插入图片描述

    1. 在选项卡中添加控件

    如果要在选项卡中添加控件,可以通过TabPage的Controls属性的Add方法实现。Add方法主要用于将指定的控件添加到控件集合中。

    语法:

    public virtual void Add(Control value)
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //通过Controls属性的Add方法向tabPage1中添加一个按钮控件
        tabControl1.ImageList = imageList1;
        tabPage1.ImageIndex = 0;
        tabPage1.Text = "选项卡 1";
        tabPage2.ImageIndex = 1;
        tabPage2.Text = "选项卡 2";
        Button btn1 = new Button();
        btn1.Text = "添加的按钮控件";
        tabPage1.Controls.Add(btn1);
    }
    

    效果:
    在这里插入图片描述

    注意:在设置TabControl控件中的控件位置时,是以TablControl控件为参照物的。

    1. 添加和移除选项卡

    ①以编程方式添加选项卡
    控件默认情况下,TabControl控件包含俩个TabPage控件,可以使用TabPages属性的Add方法添加新的选项卡。
    Add方法主要用于将TabPage添加到集合。

    说明:
    在TabPages集合中所添加的选项卡页的顺序,是选项卡在控件中出现的顺序。集合中的选项卡页的顺序反映了选项卡在控件中出现的顺序。

    语法:

    public void Add(tabPage value)
    --value:要添加的tabPage 
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //通过TabPages属性的Add方法向添加新的选项卡
        tabControl1.ImageList = imageList1;
        tabPage1.ImageIndex = 0;
        tabPage1.Text = "选项卡 1";
        tabPage2.ImageIndex = 1;
        tabPage2.Text = "选项卡 2";
        string Title = "新增选项卡 " + (tabControl1.TabCount +1).ToString() ;
        tabControl1.TabPages.Add(Title);
    }
    

    效果:
    在这里插入图片描述

    ②以编程方式移除选项卡

    如果要移除控件中的某个选项卡,可以使用TabPages属性的Remove方法。
    Remove方法的功能是从集合中移除TabPage。

    说明:在用TabPages属性的Remove(Value)方法删除选项卡时,如果参数value的值为空则触发异常。

    语法:

    public void Remove(tabPage value)
    --value:要移除的tabPage 
    

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //通过TabPages属性的Add方法向添加新的选项卡
        tabControl1.ImageList = imageList1;
        tabPage1.ImageIndex = 0;
        tabPage1.Text = "选项卡 1";
        tabPage2.ImageIndex = 1;
        tabPage2.Text = "选项卡 2";
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        string Title = "新增选项卡 " + (tabControl1.TabCount + 1).ToString();
        tabControl1.TabPages.Add(Title);
    
    }
    private void button2_Click(object sender, EventArgs e)
    {
        if (tabControl1.SelectedIndex ==0)
        {
            MessageBox.Show("请选择要删除的选项卡");
        }
        else
        {
            tabControl1.TabPages.Remove(tabControl1.SelectedTab);
    
        }
    }
    

    效果:
    在这里插入图片描述

    6 菜单、工具栏和状态栏控件

    菜单是窗体应用程序中主要的用户界面要素,工具栏为应用程序提供了操作系统的界面,状态栏显示系统的一些状态信息。

    6.1 菜单控件(MenuStrip控件)

    菜单控件(MenuStrip控件)是程序的主菜单。MenuStrip控件取代了先前版本的MainMenu控件。MenuStrip控件支持多文档界面、菜单合并、工具栏提示和溢出。可以通过添加访问键、快捷键、选中标记、图像和分隔条,来增强菜单的可用性和可读性。

    说明:
    ①在使用菜单栏的快捷键时,首先要选择主菜单,在弹出下拉列表后,才可以在键盘中单击子菜单所对应的快捷键。
    ②在设置菜单项时,也可以在MenuStrip控件中的Items属性所调用的“项集合编辑器”对话框中添加所需的菜单项。

    操作步骤:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    效果:
    在这里插入图片描述

    6.2 工具栏控件(ToolStrip控件)

    工具栏控件(ToolStrip控件)是.NET框架3.5增加的新控件,它替换了早期版本的ToolBar控件、ToopStrip及其关联的类,它可以创建具有Windows XP、Office、InternetExplorer或自定义的外观和行为的工具栏及其他用户界面元素。这些元素支持溢出及运行时重新排序。

    工具栏其实就相当于每个工人的工具箱,每个人都有自己常用的工具(每个人的常用工具各不相同),为了方便,将这些常用工具放入个人工具箱。

    菜单栏中对应控件与其作用:

    控件作用
    Button包含文本和图像中可以让用户选择的项
    Label包含文本和图像的项,不可以让用户选择,可以显示超链接
    SplitButton在Button的基础上增加了一个下拉菜单
    DropDownButton用于下拉菜单选择项
    Separator分隔符
    ComboBox显示一个ComboBox的项
    TextBox显示一个TextBox的项
    ProgressBar显示一个ProgressBar的项

    操作步骤:
    在这里插入图片描述

    效果:

    在这里插入图片描述

    6.3 状态栏控件(StatusStrip控件)

    状态栏控件(StatusStrip控件)通常用于窗体的最底部,用于显示窗体上的对象的相关信息,或者可以显示应用程序的信息。通常,StatusStrip控件由ToolStripStatusLabel对象组成,每个这样的对象都可以显示文本、图标或同时显示俩者。StatusStrip还可以包含ToolStripDropDownButton、ToolStripSplitButton和ToolStripProgressBar控件(ToolStripProgressBar控件只能以水平方向显示)。

    实例:

    private void Form1_Load(object sender, EventArgs e)
    {
        //在任务栏上显示当前系统日期
        this.toolStripStatusLabel1.Text = DateTime.Now.ToShortDateString();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        this.toolStripProgressBar1.Minimum = 0;      //进度条起始读书
        this.toolStripProgressBar1.Minimum = 5000;   //进度条最大值
        this.toolStripProgressBar1.Step = 2;         //进度条的增值
        for (int i = 0; i <= 4999; i++)
        {
            this.toolStripProgressBar1.PerformStep();
        }
    }
    

    效果:

    在这里插入图片描述

    展开全文
  • 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问...
  • 一、 控件(类) 1,常用的控件分类及作用: 2,控件的基本操作: 1)添加、删除控件; 2)对齐控件。...文本类控件包含:TextBox(文本框)、Label(标签)和Button(按钮)等 1, 标签控件(Label...

    一、 控件(类)
    1,常用的控件分类及作用:
    在这里插入图片描述
    2,控件的基本操作:
    1)添加、删除控件;
    2)对齐控件。
    注意:选择的第一个控件是主控键,其他的控件都与其对其。
    3,大部分控件都具有Anchor(锚定)和Dock(停靠)属性来方便布局
    1)Anchor
    2)Dock

    二、 文本类控件
    文本类控件包含:TextBox(文本框)、Label(标签)和Button(按钮)等
    1, 标签控件(Label)
    标签控件主要用于在窗体中显示用于不能编辑的文本,如控件前的描述信息等。
    1)标签文本:通过控件的Text属性,可以设置或读取标签控件的文本;
    2)显示/隐藏标签控件:通过设置控件的Visible属性,可以显示或隐藏标签控件
    2, 文本框控件(TextBox)
    文本控件用于获取用户输入的文本或显示文本
    1)创建只读文本框:设置文本框控件的ReadOnly属性;
    2)创建密码文本框:设置文本框的UseSystemPasswordChar属性;
    3)创建多行文本框:设置文本框的Multiline属性。
    3, 按钮控件(Button)
    按钮控件允许用于通过单击来执行操作,既可显示图像又可显示文本
    1)响应按钮的单击事件:

    private void button1_Click(object sender, EventArgs e){
         //在此处添加代码,单击按钮时会自动执行
         MessageBox.Show(“你单击了按钮,出发了Click事件”);
    }
    

    2)将按钮设置为窗体的“接受”按钮:
    设置窗体的“AcceptButton”属性;(键盘上的回车键)
    3)将按钮设置为窗体的“取消”按钮:
    与“接受”类似,设置窗体的“CancelButton”属性;(键盘上的Esc键)
    4)为按钮设置图像:
    设置按钮控件的“BackgroundImage”属性,可以为按钮设置图像,图像默认在按钮中平铺

    三、 菜单、工具栏和状态栏
    1、 菜单
    菜单通常分为:下拉式菜单、弹出式菜单两种
    1)下拉式菜单(MenuStrip)
    实现过程如下:
    a) 新建一个Window窗体;
    b) 从工具箱拖拽控件“MenuStrip”窗体中;
    c) 按菜单结构,直接输入主菜单、子菜单和快捷键;
    d) 运行程序,打开窗体即可
    2)弹出式菜单(ContextMenuStrip)【右键快捷菜单】
    实现步骤如下:
    a) 从工具箱拖拽控件“ContextMenuStrip”窗体中;
    b) 在窗体设计器中,键入菜单项文本;
    c) 将ContextMenuStrip控件与窗体进行关联,设置窗体“ContextMenuStrip“为拖入的右键菜单即可;
    d) 运行程序,打开窗体即可
    3) 响应菜单命令
    相应菜单命令通常使用菜单项的单击事件,其与按钮的单击事件类似
    实现步骤如下:
    a) 添加“商品出库“窗体;
    b) 在设计器中,双击菜单“出库管理”——》“商品出库”,添加菜单项的单击事件;
    c) 在事件处理函数中,编写如下代码,打开“商品出库”窗体

    private void 商品出库 MtoolStrip Menultem_Click(object sender, EventArgs e){
         StockOutForm so = new StockOut();
         so.Show();
    }
    

    注意:
    a)下拉式菜单中添加快捷键的格式是“菜单项文本(&快捷键字母)“,注意此处必须为英文括号;
    b)右键菜单必须与控件或窗体进行关联,设置控件或窗体的“ContextMenuStrip”属性为该右键菜单即可。
    2、 工具栏(ToolStrip)
    工具栏通常位于菜单栏的下方,由许多命令组成,如下所示
    在这里插入图片描述
    3、 状态栏
    状态栏通常位于应用程序的窗体底部

    四、 选择类控件
    常用的选择类控件包括:下拉组合控件(ComboBox)、复选框控件(CheckBox)和单选按钮控件(RadioButton)
    1,下拉组合框控件(ComboBox)
    下拉组合框控件用于为用户提供选择列表,用户可以选择列表中的某一项或在组合框中输入文本值
    1)添加选择项
    2)设置下拉样式(DropDownStyle)
    在这里插入图片描述
    3)相应选项值更改事件,步骤如下:
    a)在设计器中双击下拉组合框控件,添加SelectDIndexChange事件
    b)在窗体中添加一个标签控件Label并命名(Name)为“IblSelCategory”,用于显示选中的商品类别;
    c)在SelectedIndexChange事件处理函数中,代码如下

    private void cbCategory_SelectedIndexChange(Object sender, EventArgs e){
         //获取选中的商品类别
         string selectedCategory = cbCategory.Text;
         //现实到标签中
         lblSelCategory.Text = selectedCategory;
    }
    

    温馨提示:将下拉组合框的DropDownStyle属性设置为DropDownList,可以防止下拉组合框中的文本被随意编辑。
    2,复选框控件(CheckBox)
    通常用于为用户提供多项选择。
    3,单选按钮控件(RaidoButton)
    配合Panel控件一起使用,对单选按钮进行分组,这样可以在同一个窗体中同时选中两个单选按钮控件的效果

    五、总结

    1. 常用控件分类有哪些?
    常用控件
    2. 文本框控件有哪些常用设置?
    1)创建只读文本框。设置文本框控件的ReadOnly属性,如果ReadOnly属性为true,那么不能对文本框中的内容进行编辑;
    2)创建密码文本框。将文本框的“UseSystemPasswordChar”属性设置为“true”;除此之外也可以自定义现实的字符,如将文本框的“PasswordChar”属性设置为“*”;
    3)创建多行文本框。设置文本框的“Multiline"属性为”true“,即可创建多行文本框。
    3. 菜单时组织大量选项最常用的方式,菜单通常分为哪几种?它们的作用是什么?
    菜单通常分为下拉式菜单和弹出式菜单(右键快捷菜单)。

    展开全文
  • Windows窗体与控件

    万次阅读 2016-05-11 11:20:39
    学习下Window的窗体与控件,UI,我的IDE是VS2012,通过学习这些基本...Windows窗体窗体是应用程序的基本单元,是非常重要的。它实质上是一块白板,通过添加控件可以创建用户界面,并通过代码来操作数据,填充这个白板。
  • windows常用控件

    千次阅读 2018-04-06 17:01:25
    控件的分类和作用:控件分类作用文本类控件可以在控件上显示文本选择类控件主要为客户提供选择的项目分组控件可以将窗体中的控件进行分组处理菜单控件为系统制作功能菜单,将应用程序命令分组,使他们更容易进行查询...
  • 1、解压后包含3个文件:MSCOMM32.OCX, MSCOMM.SRG, MSCOMM32.DEP 2、将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹system32中,(C:\windows\system32); 如果是64位系统,将Mscomm32.ocx拷...
  • Visifire for Windows Phone 试用版 试用版 开发语言: .NET ... for Windows Phone 是用于 Silverlight 的一组数据可视化控件。可用于创建各种类型的高性能图表和仪表。这些控件可在移动设备上运行且外观整洁。
  • SynEdit是一种语法突出显示的编辑控件,不基于Windows通用控件。 SynEdit与Delphi和C ++ Builder兼容。 这是TurboPack SynEdit的仅源发行版。 它包括用于Delphi和C ++ Builder的设计时和运行时软件包,并支持Win32...
  • C# 皮肤控件

    2018-03-09 17:41:56
    控件拖到你的form上, 只需一行代码,即可实现整个form包括其所有控件的皮肤的更换, 总共有几十套皮肤供使用,非常方便。省去你设计开发软件皮肤系统的时间和精力
  • Windows 8 Apps的循环控件库。 链-圆形文字 滑块-用于时间选择器 圆弧-用于甜甜圈图 切片-饼图 圆盘-圆形填充 戒指-珠宝 该库还包含一些现成的示例。 安装 RadialControls可作为。 入门 在Visual Studio中,创建一...
  • MFC之使用 Windows 标准控件

    千次阅读 2019-05-12 16:41:11
    使用 Windows 标准控件 为了提高常用代码的复用性,VC 使用控件将常用的诸如用户输入、操作数据等功能封装起来。控件通常放在对话框或工具栏中,分为 3 种:Windows 标准控件、ActiveX 控件和 MFC 支持的其他控件...
  • VC++自定义的CTRL控件包括按钮CList等代码实例,这些控件中包括了一些带图像的动态按钮、带颜色的ListBox、以及一些自定义的菜单等,这些小控件对窗体美化来说比较有用,如果你是VC编程新手,这些例子是有必要学习...
  • 其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏...
  • 此存储库包含 Windows 10 中适用于 Runtime 8.1 和 Silverlight 8.X 的 SplitView 控件的移植 属性是相同的,因此如果将来您想将应用程序移植到 10,您只需删除 Universal.UI.Xaml.Controls 命名空间。 代码在 MIT/...
  • 本DLL/Res 库让你在Windows 控制台编程模式下,结合EGE 图形库,实现Windows 控件,以便动态改变各种运行时参数,方便各种数理模拟。压缩包还包括一个多体引力模拟例子,含详细的使用注解及vs2017 工程文件。 目前...
  • WinUI是一个用户界面层,其中包含用于构建Windows应用程序的现代控件和样式。 作为Windows中的本机UI层,它体现了,使每个Windows应用程序都具有客户期望的优美感觉。 WinUI 2是一个控件库,为Windows 提供了官方...
  • act_ive_gui_new :一个图形用户界面,在 Windows Media Player 版本 7 和 9 中使用 activex 控件。 此图形用户界面几乎提供了 Windows Media Player 的所有控件。 该程序是一个示例,用于展示如何使用 Activex ...
  • VB适用的Windows8扁平风格UI界面控件,下载后可看到目录中有很多素材文件,包括image文件,窗体大小是固定的,暂时不支持拖放变大、变小功能,使用方法:  1.将CTL文件和CTX文件复制到你的程序目录下。  2.打开...
  • 适用于Wisej和Windows窗体的MVVM MVVM FX项目以和WinForms为目标。 该项目着重于提供基于这些库的开发框架: 通用数据bindind和命令绑定库 绑定控件和组件 Caliburn.Micro MVVM框架已移植到Wisej和WinForms 框架...
  • 将所有文件复制到工程目录下,然后添加进工程即可!注意,在使用之前一定要包含头文件!
  • 3.3.3 Tab控件 各形参的定义如下 nItem标签的索引值基于0 ptabCtrlItem指向TCITEM结构的指针TCITEM结构定义如下 typedef struct tagTCITEM { UINT mask; #if_WIN32_IE>=0x0300) DWORD dwState; // 指明选项的当前...
  • windows窗口中控件的样式

    千次阅读 2019-07-05 15:03:34
    将组合框编辑控件中输入的文本从Windows字符集转换为OEM字符集,然后再转换回Windows字符集。当应用程序调用CharToOem函数将组合框中的Windows字符串转换为OEM字符时,这可确保正确的字符转换 。此样式对于包含...
  • API之控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 ...
  • 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问...
  • 本篇都是Windows窗体应用常用控件的介绍,通过效果图和相关属性事件总结,其实每个控件很多的属性都是差不多的,所有我们通过效果图基本上可以猜出这个控件有哪些属性方法了,当需要使用哪一个控件时,可以看一下...
  • 包含demo案例、Web3.0_控件开发包编程指南.pdf和nginx。 Web 控件 V3.0 基于 ActiveX 和 NPAPI 开发,接口封装于 javascript 脚本,以 javascript 接口形式提供用户 集成,支持网页上实现预览、回放、云台控制等功能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,742
精华内容 58,296
关键字:

windows的控件包括