Windows基础控件

控件概述:

学习可视化编程技术,最重要的是学习控件的使用。

在Visual Studio集成开发环境中,提供了大量控件。

控件均为类,从工具箱拖拽到窗体则实例化出一个控件对象。

常用控件分类:

控件分类说明
文本类控件用于在控件上显示文本,如TextBox、Label 、
选择类控件用于提供界面让用户进行选择
分组控件用于对窗体中的控件进行分组,如GroupBox、Panel等
菜单用于为系统制作功能菜单,如菜单栏、右键菜单
工具栏用于提供主菜单中常用的相关工具
状态栏用于显示程序的相关信息,如当前用户、当前时间等

控件的基本操作:

添加控件:从工具箱中单击某控件并将其拖拽到窗体合适位置

删除控件:选择控件,右键→删除或按下“Delete”键

对齐控件:选择控件,格式菜单→对齐

锁定控件:选择控件,右键→锁定控件

一、文本类控件

AutoSize: 设置为true 自动尺寸,大小被文本撑开,设置为false,可以手动拖拽设置大小

BackColor:设置背景颜色

Font:设置字体样式和字体大小

ForeColor:字体颜色

TextAlign:设置文本对齐方式

标签控件 (Label) :

主要用于在窗体上显示用户不能编辑的文本。

通过Text属性,可以设置或读取标签的文本。

通过Visible属性,可以显示或隐藏标签。

文本框控件(TextBox):

Text属性用于设置或获取用户输入的文本。

ReadOnly属性,指定文本框是否允许编辑。

Multiline属性,设置为true,表示可以多行输入,可以调整大小

创建密码文本框:

(1)UseSystemPasswordChar属性设置为True。

(2)PasswordChar属性设置为“*”。

按钮控件(Button):

按钮控件允许用户通过单击来执行操作,单击按钮,触发Click事件。。

Text属性用于设置按钮上的显示文本。

BackColor属性用于设置按钮背景的颜色

BackgroundImage属性设置按钮图像。

BackgroundImageLayout属性用于指定按钮图像的布局方式。

二、菜单栏

菜单概述:

通常用于显示程序的各项功能,以方便用户选择执行。

菜单是组织大量选项最常用的方式。

菜单通常分为下拉式菜单和弹出式菜单:

下拉式菜单(MenuStrip):

通常出现在应用程序的顶部。

主要由菜单栏、主菜单、子菜单和快捷键组成。

快捷键格式:设置ShortcutKeys属性。

弹出式菜单(ContextMenuScript):

弹出式菜单,也称为右键快捷菜单。

点击右键时弹出,其位置由鼠标点击的位置决定。

其结构与下拉式菜单基本相同。

需要将弹出是菜单与什么控件关联,则设置该控件的"ContextMenuStrip"属性为菜单名字,如果直接与窗体关联,则直接设置窗体的"ContextMenuStrip"属性为菜单名字。

响应菜单命令:

无论是下拉菜单还是弹出式菜单,通常使用菜单项的单击事件来响应菜单命令。

实现思路与按钮的单击事件类似。

例如点击某个菜单需要打开一个新的窗体,示例代码如下:

private void MToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form frm = new Form();
    putoutForm.Show();
}

三、工具栏(ToolStrip)

为用户提供了应用程序中常用菜单命令的快速访问方式。

通常位于菜单栏的下方,由许多命令按钮组成,每个按钮上都有一个代表功能的小图标。

工具栏相应菜单命令和菜单栏类似。

四、状态栏(StatusStrip)

状态栏通常用于显示应用程序的系统信息。

如操作员信息、软件版本号、当前日期和欢迎信息等。

状态栏通常位于应用程序的窗口底部。

例如需要在状态栏显示欢迎信息以及当前时间,可以:

(1)选择显示项的类型,显示文本一般使用“StatusLabel”。

(2)在窗体的加载事件中编写如下代码:

private void Form1_Load(object sender, EventArgs e)
{
    this.toolStripStatusLabel1.Text = string.Format("当前系统日期:{0},欢迎使用商品库存管理系统", DateTime.Now.ToShortDateString());
}

五、分组控件

分组控件作为一个容器,可以对窗体中的控件进行分组。

GroupBox:

作为一个容器,可以拖放其他控件到其中,起到分组的作用,可以通过Text属性设置左上角的文本。

Panel:

作为一个容器,可以拖放其他控件到其中,起到分组的作用,当内部的控件超出panel区域的时候可以通过 AutoScroll=true , AutoSize=false 两个属性出现滚动条。

GroupBox和Panel还可以将多个单选框进行分组,从而实现多个多选一的功能,而不是一个多选一的功能,关于此功能会在选择类控件中进行详细讲解。

TabControl:

提供一个选项卡式页面以有效地组织和访问已分组对象。

TabPages属性中的Text用于设置选项卡的名称

SplitContaine:

提供用可移动拆分条分隔的两个面板。

TableLayoutPanel:

表示一个面板,它可以在一个由行和列组成的网格中对其内容进行动态布局

FlowLayoutPanel:

表示一个沿水平或垂直方向动态排放其内容的面板。

FlowDirection 设置子控件的排列方式

Dock和Anchor属性

Anchor:锚定,将控件固定于某个位置。

默认Anchor属性设置为Top, Left。

  • 设置控件的Anchor属性为Top

    当窗口大小改变时,该控件锚定与窗口的上方,即与父窗口的上边距Top保持不变。

  • 设置控件的Anchor属性为Bottom, Right

    控件Anchor属性设置为锚定什么位置,就表示控件和其父窗口该位置的距离保持不变。

Dock:停靠,将控件停靠在一侧或中央。

默认Dock属性设置为None。共有上(Top)、下(Bottom)、左(Left)、右(Right)、中(Fill)、无(None)6个选项。

停靠于左右两侧时,可以调整控件宽度;停靠于上下两侧时,可以调整控件高度。

注意:当设置Dock属性时,Anchor属性无效。

六、选择类控件

在开发Windows应用程序时,通常需要提供界面让用户进行选择,此时需要使用选择类控件。

文本项和图形项(图标)列表(ListBox )

显示一个文本项和图形项(图标)列表。

下拉组合框控件(ComboBox):

下拉组合框控件用于为用户提供选择列表,用户可以选择列表中的某一项或输入文本值。

向ComboBox中添加选择项,有两种方式:

(1)设计器中通过界面添加选择项,找到Items属性设置选择项。

(2)通过代码添加选择项

//窗体的Load事件
private void Form1_Load(object sender, EventArgs e)
{
    //窗体加载时,向ComboBox中添加选择项
    this.cb_type.Items.Add("日用百货");
    this.cb_type.Items.Add("服装鞋袜");
    this.cb_type.Items.Add("数码产品");
    this.cb_type.Items.Add("母婴用品");
}

DropDownStyle属性:

用于设置ComboBox的下拉样式,ComboBox支持三种下拉样式:

属性值说明
SimpleComboBox列表部分总是可见
DropDown(默认值)用户可以编辑控件的文本框部分,单击箭头才显示列表
DropDownList用户不可以编辑控件的文本框部分,只能点击箭头选择一项

响应选项值更改事件:

例如实现如下效果,当combobox中的值发生改变时,在右边的Label中显示改变之后的值。

实现步骤如下:

(1)在设计器中双击下拉组合框控件,添加SelectedIndexChange事件。

(2)向窗体中添加一个标签控件Label,用于显示选中的商品类别。

(3)在SelectedIndexChange事件处理函数中编写代码。

(4)为了防止选项的文本被随意编辑,将ComboBox的DropDownStyle属性设置为DropDownList。

private void cb_type_SelectedIndexChanged(object sender, EventArgs e)
{
      //获取选中的商品类别
      string selectedType = this.cb_type.Text;
      //显示到Label中
      this.lbl_type.Text = selectedType;
}

复选框控件(CheckBox):

用于为用户提供多项选择,Text属性用于指定控件右侧文本,Checked属性可以控制其选中状态,选中状态发生变化时,将触发CheckedChanged事件。

例如我要实现如下效果,当点击"添加"按钮的时候,弹出一个对话框,显示我选择的所有促销时段:

实现步骤如下:

(1)向窗体中添加四个CheckBox控件

(2)按界面要求,分别设置Text属性值

(3)为“添加”按钮添加Click单击事件,在事件处理函数中编写代码

//方案一:一个一个判断
private void button3_Click(object sender, EventArgs e)
{
    string promotionTime = ""; 
    if (this.checkBox1.Checked)
    promotionTime += this.checkBox1.Text + ",";
    if (this.checkBox2.Checked)
    promotionTime += this.checkBox2.Text + ",";
    if (this.checkBox3.Checked)
    promotionTime += this.checkBox3.Text + ",";
    if (this.checkBox4.Checked)
    promotionTime += this.checkBox4.Text + ",";
    //弹出对话框,显示最终的促销时段
    MessageBox.Show("促销时段:" + promotionTime);
}
//方案二:将checkbox放入panel,循环遍历panel中的控件进行判断
private void button3_Click(object sender, EventArgs e)
{
    foreach (CheckBox item in panel1.Controls)
    {
        string promotionTime = ""; 
        if(item.Checked == true)
            promotionTime += item.Text + ",";
    }
    MessageBox.Show("促销时段:" + promotionTime);
}
​

单选框控件(RadioButton)

用于为用户提供唯一选择,Text属性用于指定按钮右侧文本,Checked属性用于控制其选中状态,当选中状态发生更改时,将触发CheckedChanged事件。

例如我要实现如下效果,当用户点击"添加"按钮的时候,弹出对话框展示用户选择的促销方案:

实现步骤如下:

(1)向窗体中添加5个RadioButton控件。

(2)分别设置Text属性描述促销方案的名称。

(3)窗体加载时默认选中第一种促销方案,在窗体的Load事件中,设置Checked属性为true。

private void Form1_Load(object sender, EventArgs e)
{
    //窗体加载时,默认选择第一种促销方案
    this.radioButton1.Checked = true;
}

(4)为“添加”按钮添加Click单击事件,在事件处理函数中编写代码

--方案一:每个单选框去判断
private void btAdd_Click(object sender, EventArgs e)
{
    if(this.radioButton1.Checked== true)
        MessageBox.Show("促销方案:" + this.radioButton1.Text);
    if (this.radioButton2.Checked == true)
        MessageBox.Show("促销方案:" + this.radioButton2.Text);
    if (this.radioButton3.Checked == true)
        MessageBox.Show("促销方案:" + this.radioButton3.Text);
    if (this.radioButton4.Checked == true)
        MessageBox.Show("促销方案:" + this.radioButton4.Text);
    if (this.radioButton5.Checked == true)
        MessageBox.Show("促销方案:" + this.radioButton5.Text);
}
--方案二:将所有单选框放入panel中,循环panel中的控件进行判断
private void btAdd_Click(object sender, EventArgs e)
{
    foreach (RadioButton item in this.panel2.Controls)
    {
        if (item.Checked == true)
        {
            MessageBox.Show("促销方案:" + item.Text);
            break;
        }
    }
}

单选按钮分组问题:

如上图的设计,原本的逻辑是性别二选一,学历三选一,但是实际效果会变成5个单选框5选1。

为了解决此问题,可以分别将性别的两个单选框和学历的三个单选框分别用GroupBox或Panel包含起来进行单选框的分组,实现,原本的用户希望的逻辑。

七、图片框PictureBox控件

用于在窗体的指定位置显示图片,其为不可编辑的控件,无法获得焦点。

图片框PictureBox的常用属性:

属性说明
Imgae用于设置显示在图片框控件上的图像
ImageLocation用于设置显示在图片框控件上的图像的路径
SizeMode用于设置图像位置和控件大小

其中SizeMode属性包含5个属性值:

属性值说明
Normal图像被置于PictureBox的左上角。如果图像比包含它的PictureBox大,则该图像将被裁剪掉。
StretchImagePictureBox中的图像被拉伸或收缩,以适应PictureBox的大小。
AutoSize调整PictureBox的大小,使其等于所包含的图像大小。
CenterImage如果PictureBox比图像大,则图像将居中显示。如果PictureBox比图像小,则图像将居中显示并裁剪掉超出的部分。
Zoom图像大小按其原有的长宽比例被等比例放大或缩小。

使用PictureBox显示图片步骤:

(1)从工具箱拖拽PictureBox控件到窗体内

(2)点击PictureBox右上角小三角,弹出快捷菜单

(3)指定PictureBox需要显示的图像和大小模式

使用PictureBox显示图像需要注意的地方:

(1)PictureBox控件的图像可以设置Image属性,也可以设置ImageLocation属性。

(2)区别在于Image属性是图像对象类型,而ImageLocation属性是图像路径,是文本类型。

(3)右上角小三角“选择图像”,指定的是Image属性。

八、图片集ImageList控件

思考:PictureBox控件中只能存储一张图片,如果需要对多张图片进行展示,如何存储多张图片?

我们可以使用图片集ImageList控件,用于存储多个图像资源,是一个图像集,通过索引访问图像集中的图片。

ImageList控件的常用属性:

属性说明
Images存储在控件中的图像集合
ImageSize图像集中图像的大小,最大值为256*256
ColorDepth图像集中图像的颜色深度

注意:

(1)图像资源存储于Images属性中,它是一个图片集合。

(2)图片集中的图像可通过其索引值或其键值进行访问。

(3)所有图像都将以相同大小显示,由ImageSize属性设置。

案例: 使用ImageList控件制作图片查看器

实现步骤:

(1)向ImageList控件中添加图像。

【1】向窗体中添加图像集ImageList控件。

【2】在设计器中, 点击其右上角的小三角,弹出快捷菜单。

【3】选择需要添加的图片,并设置图片的大小和颜色深度。

(2)展示ImageList控件中的图像。

【1】按照截图效果,拖动控件,对图片浏览窗体进行布局。

【2】窗体加载时,显示第一张图片,并将“上一张”按钮置为不可用。

//图片浏览窗体Load事件处理函数
private void ImageListForm_Load(object sender, EventArgs e)
{
    //窗体加载后,默认显示第一张图片
    this.pic_animation.Image = this.imageList1.Images[0];
    //显示第一张图像,“上一张”按钮不可用
    this.btn_pre.Enabled = false;
}

【3】点击“上一张”、“下一张”按钮,实现图片切换效果。

private int currentIndex = 0;
private void btnPrev_Click(object sender, EventArgs e)
{    
      currentIndex--; //当前图片索引减一
      SetButtonEnable(); //设置按钮是否可用
      //将当前图像显示到图片框中
      this.pic_animation.Image = this.imageList1.Images[currentIndex];
}
private void btnNext_Click(object sender, EventArgs e)
{
     currentIndex++;        //当前图片索引加一
     SetButtonEnable();    //设置按钮是否可用
     //将当前图像显示到图片框中
     this.pic_animation.Image = this.imageList1.Images[currentIndex];
}

【4】编写判断“上一张”、“下一张”按钮是否可用的方法,提供给上一张,下一张按钮调用。

private void SetButtonEnable()
{
    this.btnPrev.Enabled = true;
    this.btnNext.Enabled = true;
    if(currentIndex == 0)
        this.btnPrev.Enabled = false;
    if (currentIndex == this.imageList1.Images.Count - 1)
        this.btnNext.Enabled = false;
}

九、计时器Timer控件

按用户定义的时间间隔引发事件的控件,程序每隔一定时间重复执行一个操作。

Timer控件的常用属性、方法和事件:

属性说明
Interval事件发生的间隔(频率),以毫秒为单位
Enable设置计时器是否启用,布尔类型
方法说明
Start()启动计时器
Stop()停止计时器
事件说明
Tick定时间隔到,自动引发的事件

案例:使用Timer控件制作电子时钟

实现步骤:

(1)向窗体内添加标签Label控件,用于显示当前时间,并且设置Label控件的字体大小、颜色、字体等属性。

(2)向窗体内添加计时器Timer控件,用于定时引发事件,指定间隔事件1秒:Interval属性设置为1000(单位:毫秒),添加Tick事件,在事件处理函数中更新当前时间。

//窗体加载的时候显示时间
private void TimerForm_Load(object sender, EventArgs e)
{
    this.lbl_clock.Text = DateTime.Now.ToString("yyyy年MM月dd日 hh:mm:ss");
}
//每隔一秒钟显示时间
private void timer1_Tick(object sender, EventArgs e)
{
    //获取系统当前时间,格式化后,显示到Label中
    this.lbl_clock.Text = DateTime.Now.ToString("yyyy年MM月dd日HH:mm:ss");
}

(3)窗体加载后启动定时器 方法1:设置Timer控件的Enable属性为true 方法2:在窗体Load事件中使用timer控件.Start()方法启动定时器

private void TimerForm_Load(object sender, EventArgs e)
{
    this.timer1.Start();
}

十、系统托盘NotifyIcon控件

软件启动后会在系统右下角创建一个小图标,称为系统托盘,当软件在后台运行时,可以通过系统托盘对软件进行相关操作。

NotifyIcon控件的常用属性:

属性说明
Icon将在系统栏中显示的图标,必须为ico格式文件
Text当鼠标悬停在图标上时,显示的文本
ContentMenuScript与系统托盘图标相关联的右键快捷菜单

案例:为之前的程序添加系统托盘

需求:

(1)程序运行后,在系统任务栏右下角启动托盘图标 。

(2)鼠标悬停在图标上时,显示软件名称。

(3)在系统托盘上点击右键,弹出右键快捷菜单,右键菜单包括“关于”和“退出”两个菜单项 ,点击"关于"弹出一个软件介绍的新窗体,点击"退出"退出整个应用程序。

实现步骤:

(1)向窗体中添加NotifyIcon控件,设置系统托盘的图标和文本。

(2)向图片浏览窗体中加入右键快捷菜单ContextMenuScript,并且添加菜单项"关于"和"退出"。

(3)设置NotifyIcon控件的ConTextMenuStrip属性,将右键快捷菜单与系统托盘关联。

(4)编写菜单相应代码:

 //“关于”菜单项单击事件处理函数
 private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)
 {
    FrmAbout frm = new FrmAbout();
    frm.show();
 }
 //“退出”菜单项单击事件处理函数
 private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
 {
    Application.Exit();
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值