c#中的WinForm窗体应用程序

创建好项目后,启动项目路由根据Program.cs里面的Main函数来决定启动的是哪一个窗体。

一、窗体的常用属性

1.Name:窗体名,最好不用随便更改,代码会用到。
2.Text:文本标题,这个可以更改,相当于窗体名,不过是文本描述会显示出来的。
3.Icon:窗体图标,只能用ico格式的图片。ShowIcon:True 或 False,是否显示图标。
4.BackColor:背景颜色,Backgroundimage:背景图片,会覆盖背景色。BackgroundimageLayout:调整图片布局。
5.MinimizeBox:最小化按钮,MaximizeBox:最大化按钮;HelpButton:但?号的帮助按钮,使用帮助按钮必须禁用大小化按钮。否则会被大小化按钮覆盖。
6.StartPosition:窗体启动时的位置,5个属性【CenterScreen:屏幕中央,CenterParent:在父窗体中居中,Manual:由Location属性坐标决定】,常用就前面两个,后面三个用不到。
7.WindowState:窗体初始化大小,3个属性【Normal:常规显示,Minimized:最小化显示,Maximized:最大化显示】
8.FormBorderStyle:整体边框样式,7个属性【None:无边框,FixedSingle:固定的单行边框,Fixed3D:固定的三维样式边框,FixedDialog:固定的对话框样式的粗边框,Sizable:可调整大小的边框,FixedToolWindow:不可调整大小的工具窗口边框,SizableToolWindow:可调整大小的工具窗口边框】
Load:窗体的加载事件,也可以鼠标双击设计时的窗体进来会自动生成代码。

private void Form1_Load(object sender, EventArgs e)
{
    this.BackColor = Color.Green;//窗体背景色设置为绿色。
    this.Text = "修改窗体标题";//this关键字表示当前窗体
}

Click:窗体单击事件

private void Form1_Click(object sender, EventArgs e)
{
    this.BackColor = Color.Red;//改背景色为红色。
}

MouseMove:鼠标移动事件

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    this.Text = e.X + " : " + e.Y;
}

MouseLeave:鼠标立刻事件

private void Form1_MouseLeave(object sender, EventArgs e)
{
    this.BackColor = Color.Blue;//鼠标离开背景变蓝色。
}

 

二、常用控件
1.Button:按钮;but的前缀命名规则,用Text来设置按钮文字,Click单击事件,Enabled属性来决定按钮是否可用状态。
2.Label:文字标签;lbl命名规则,AutoSize:true内容决定大小,false手动设置大小。BorderStyle:标签的边框。
3.TextBox:文本框;text可以设置默认值,接收值也是text属性。MaxLength=6,限制长度。ReadOnly:只读。PasswordChar:密码。Multiline:变为多行文本框。WordWrap:自动换行。ScrollBars:滚动条【None:常规没有滚动条,Horizontal:水平滚动条,需要把自动换行关闭,Vertical:垂直滚动条,Both:垂直和水平滚动条】
4.MessageBox:消息框,常用于按钮的弹窗,提示,和登录等等。

复制代码
private void button1_Click(object sender, EventArgs e)//按钮的点击事件
{
    MessageBox.Show("内容", "标题", MessageBoxButtons.YesNoCancel);//参数三表示按钮数量
    MessageBox.Show("内容", "标题", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Error);//参数4内容提示图标。如黄色感叹号。
    DialogResult dr = MessageBox.Show("提示内容");//用变量来接收点击的按钮
    if (dr == DialogResult.OK)//按钮OK:确认,Yes:是,No:否,Cancel:取消
    {
        this.BackColor = Color.Red;//当前窗体背景变为红色
    }
}
复制代码

 5.ListBox:列表框,只有items列表选项,没有text内容属性

复制代码
private void listBox1_Click(object sender, EventArgs e)
{//列表框的单击事件
    MessageBox.Show(listBox1.SelectedItem.ToString());//得到列表框,选项内容
    MessageBox.Show(listBox1.SelectedIndex.ToString());//得到选项索引,如下表0123...
}
private void button1_Click(object sender, EventArgs e)
{//添加按钮
    listBox1.Items.Add(textBox1.Text.ToString());//把文本框的内容添加到列表框选项
    textBox1.Text = ""; //清空文本框
}
private void button2_Click(object sender, EventArgs e)
{//删除按钮
 //listBox1.Items.Remove(listBox1.SelectedItem.ToString());//根据内容删除,正常需要if判断是否空值
    listBox1.Items.RemoveAt(listBox1.SelectedIndex);//根据索引来删除。
}
private void Form1_Load(object sender, EventArgs e)
{//窗体的加载事件
    string str = "";
    for (int i = 0; i < listBox1.Items.Count; i++)//Count可得到列表框所有个数
    {
        str += listBox1.Items[i].ToString();//(遍历)通过下标获取内容
    }
    textBox1.Text = str;//把内容赋值给文本框。
}
复制代码

6.ComboBox:组合框(列表和文本框的组合),既有items列表选项和text内容属性。DropDownStyle:控制组合框外观,默认DropDown可写可选,DropDownList只能选不可写,Simple分离展示。代码使用跟文本框和列表框一样用。
7.RadioButton:单选按钮(如男和女的选项),Checked表示是否默认选中状态。通常配合GroupBox分组框或Panel面板来分组,一个容器里表示为一组
8.CheckBox:复选框(多选按钮),Checked也有默认选中。
9.NumericUpDown:计数器,Value值(初始值)。Increment递增值,每次加几。Minimum最小值,Maximum最大值。
10.PictureBox:图片框,Image图片路径值。SizeMode调整图片显示效果是否填满。
11.GroupBox:分组框,text分组的标题,可以为空,有边框线,可见的
12.Panel:面板,和分组一样的功能,只是他隐藏式的没有边框线,显示出来肉眼看不见。
13.TabControl:选项卡。类似表格里面的每一张表,也是用做分组,TabPage添加选项卡页面。
14.Timer:计时器,Interval=1000表示1秒钟执行,Tick事件表示启动后执行的代码。Enabled是否启动计时器。如果用代码启动计时器放按钮点击事件里:timer1.Start();启动,timer1.Stop();停止计时器。
15.imageList:图片列表(集合),配合图片框显示。

复制代码
private void Form1_Load(object sender, EventArgs e)
{
    pictureBox1.Image = imageList1.Images[0];//图片框的图片从列表框拿。
}
int index = 0;//记录图片下标
private void button1_Click(object sender, EventArgs e)
{
    pictureBox1.Image = imageList1.Images[index];
    index++;
    if (index >= imageList1.Images.Count)
    {
        MessageBox.Show("已经是最后一张图片了");
        index = imageList1.Images.Count - 1;//停留在最后一张的下标。
    }
}
复制代码

16.MenuStrip:菜单。用得最多的就是他的单击事件Click。
17.ToolStrip:工具栏,带图标。鼠标右键DisplayStyle属性改显示图片和文字,ToolTipText鼠标指上去的提示信息。text:文字,image:图片。
18.StatusStrip:状态栏,左下角。通过text来显示提示内容。
19.ContextMenuStrip:鼠标右键菜单。需要窗体属性ContextMenuStrip值改为右键菜单名称一样才能显示。也可以用这种方式屏蔽右键选项按钮。

二、打开新窗体

这里用菜单选项的点击事件

private void 手动ToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Show();//非模式化窗体:打开了还可以操作上个窗体。
    form2.ShowDialog();//模式化:不可操作上一个窗体,除非关闭当前窗体
}

窗体父子关系,也是窗体嵌套。需要将父窗体IsMdiContainer属性设置为true,表示窗体为MDI容器。

Form2 f2 = new Form2();
f2.MdiParent = this;//建立窗体的父子关系:子窗体的父窗体=当前窗体
f2.Show();//只能是show方法,不能用其他方法来显示窗体。

单文档模型:每次只能打开一个文件,简称SDI,如:记事本。
多文档模型:每次可以打开多个文件,简称MDI,如:窗体的父子关系。

三、DataGridView控件数据绑定

属性Columns集合做修改数据显示效果。名称只需要填页脚文本即可,对应的列,需要绑定名称一样。

代码

复制代码
namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<student> list = new List<student>();
            list.Add(new student(1, "张三", "", 17));
            list.Add(new student(2, "李四", "", 18));
            list.Add(new student(3, "王五", "", 19));

            dataGridView1.DataSource= list;//把数据源绑定到控件。
        }
    }

    public class student//用来存储数据的实体类
    {
        public student(int _id, string _name, string _sex, int _age) 
        {
            this.id = _id;
            this.name = _name;
            this.sex = _sex;
            this.age = _age;
        }
        public int id { get; set; }
        public string name { get; set; }
        public string sex { get; set; }
        public int age { get; set; }
    }
}
复制代码

 

四、ListView列表试图

显示类型有大图标,小图标,列表,详细详细等样式,类似于上面图片计算机的又窗口。绑定数据如下面代码。

复制代码
namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<student> list = new List<student>();
            list.Add(new student(1, "文档(C:)", "本地磁盘", 256));
            list.Add(new student(2, "软件(D:", "本地磁盘", 100));
            list.Add(new student(3, "娱乐(E:", "移动U盘", 32));

            foreach (var dr in list)
            {
                ListViewItem item = new ListViewItem(dr.name.ToString());//获取数据
                if (dr.sex == "本地磁盘")
                {
                    item.ImageIndex = 0;//图片集合的第一张图片
                }
                else 
                {
                    item.ImageIndex = 1;//第二张图片
                }
                this.listView1.Items.Add(item);//把数据添加到ListView控件中
            }
        }
    }

    public class student
    {
        public student(int _id, string _name, string _sex, int _age) 
        {
            this.id = _id;
            this.name = _name;
            this.sex = _sex;
            this.age = _age;
        }
        public int id { get; set; }
        public string name { get; set; }
        public string sex { get; set; }
        public int age { get; set; }
    }
}
复制代码

这里还绑定了图片需要用到imageList1表示小图标,imageList2来表示大图标,在绑定时需要将ListView控件属性的LargelmageList绑定指定大图标集合,SmallImageList绑定小图标。默认view大图标显示。
绑定鼠标右键菜单contextMenuStrip1需要修改ListView属性ContextMenuStrip绑定对应的菜单名


复制代码
private void 大图标ToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.listView1.View = View.LargeIcon;
}
private void 小图标ToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.listView1.View = View.SmallIcon;
}
private void 列表ToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.listView1.View = View.List;
}
private void 详细详细ToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.listView1.Items.Clear();//清空所有数据。Items所有项的集合。添加项用Items.Add(一行数据)。
    this.listView1.Columns.Clear();//清空所有列。添加列用Columns.Add()

    this.listView1.View = View.Details;//重新绑定数据,以详细详细的方式展示

    this.listView1.Columns.Add("磁盘名称", 200);//添加显示的列
    this.listView1.Columns.Add("磁盘类型", 200);//构造方法指定宽度200
    this.listView1.Columns.Add("磁盘大小", 200);

    List<student> list = new List<student>();//数据源
    list.Add(new student(1, "文档(C:)", "本地磁盘", 256));
    list.Add(new student(2, "软件(D:", "本地磁盘", 100));
    list.Add(new student(3, "娱乐(E:", "移动U盘", 32));

    foreach (var dr in list)
    {
        ListViewItem item = new ListViewItem(dr.name.ToString());//获取第一列数据
                                                                 //添加子项
        item.Tag = dr.id;//绑定一个隐藏值用来获取ID,方便删除,注意在初始化试图时也要添加隐藏值,不然大小图标找不到id
        item.SubItems.Add(dr.sex.ToString());//表示磁盘类型,第二列数据
        item.SubItems.Add(dr.age.ToString());//表示磁盘大小,第三列数据
        if (dr.sex == "本地磁盘")
        {
            item.ImageIndex = 0;//图片集合的第一张图片
        }
        else
        {
            item.ImageIndex = 1;//第二张图片
        }
        this.listView1.Items.Add(item);//把数据添加到ListView控件中
    }
    //在详细详细里有两个属性:1.FullRowSelect可以选中一整行,2.GridLines显示网格。
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
    string str = this.listView1.SelectedItems[0].Text;//text获取的是名称,SelectedItems获取选中的一个项。
    MessageBox.Show(str);//弹窗检测

    int did = Convert.ToInt32(this.listView1.SelectedItems[0].Tag);//获取隐藏的id值
    MessageBox.Show(did.ToString());//删除成功需要刷新数据,清空数据,重新绑定数据。
}
复制代码

五.TreeView树状视图

 
常用属性:
1.CheckBoxes:指是否在节点旁边显示多选框。
2.Nodes:获取TreeView控件的所有节点集合;可以增加或删除节点。
3.SelectedNode:获取或设置当前树试图选中的节点。
4.ShowLines:指示是否在同级节点之间以及父子节点之间显示连线。
5.ShowPlusminus:指示是否在父节点旁边显示加/减按钮。
6.ShowNodeToolTips:指示当鼠标指针悬浮在TreeNode上时显示的工具提示。
TreeNode类:表示一个节点,只要实例化一次就是一个节点

复制代码
namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<int> uid = new List<int>() { 101, 102, 103 };//表示3个班级
            List<student> us = new List<student>() { new student(101, "程一") };
            us.Add(new student(102, "小二"));
            us.Add(new student(103, "张三"));
            us.Add(new student(101, "李四"));
            us.Add(new student(102, "王五"));
            us.Add(new student(103, "赵六"));

            TreeNode treeNode = new TreeNode("学生信息");//1.创建根节点
            foreach (var dr in uid)//2.创建班级,子节点
            {
                TreeNode classNode = new TreeNode(dr.ToString());//3.班级节点
                foreach (var stu in us)
                {
                    if (dr.ToString() == stu.id.ToString()) //如果是相同班级才绑定。
                    {
                        TreeNode stuNode = new TreeNode(stu.name.ToString());//4.学生节点
                        stuNode.Tag = stu.id;//设置一个Tag隐藏值,用于删除。
                        classNode.Nodes.Add(stuNode);//把学生节点添加到班级节点上。
                    }
                }
                treeNode.Nodes.Add(classNode);//把班级子节点添加到根节点上。
            }
            this.treeView1.Nodes.Add(treeNode);//最后把根节点添加到控件上,就是把树种在土里。
        }

        private void button1_Click(object sender, EventArgs e)//删除按钮
        {
            if (this.treeView1.SelectedNode.Level != 2)//如果选中的不是的2个节点
            {
                MessageBox.Show("只能删除学生信息", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;//退出
            }
            MessageBox.Show(this.treeView1.SelectedNode.Tag.ToString());//取值:Tag隐藏值,如果是Text就是显示值。
            this.treeView1.Nodes.Clear(); //删除成功后需要清空节点,然后重新绑定数据。
        }
    }

    public class student//用来存储数据的实体类
    {
        public student(int _id, string _name)
        {
            this.id = _id;
            this.name = _name;
        }
        public int id { get; set; }
        public string name { get; set; }
    }
}
复制代码

 六、常用控件

1.SplitContainer:由两个面板组成控件,可以分开控制Panel1或者Panel2

this.splitContainer1.Panel1.BackColor = Color.Pink:
this.splitContainerl.Panel2.BackColor = Color.Yellow;

2.TableLlayoutPanel:由表格形式呈现的
3.WebBrowser:可以模仿IE浏览器的功能进行Web访问(相当于浏览器)常用的方法有【Refresh:刷新;GoBack:后退;GoForward:前进;Navigate:定位到指定的URL】

this.webBrowserl. Navigate (this.txtAddress. Text);//路径文本框填的网站

常用事件有【Navigated:加载中处理事件;Document Comp l eted:页面加载完成处理事件;NewWindow:新的窗口中打开页面】

4.RichTextBox:用于设置字体样式;显示、输入和操作格式文本,是一个可编辑控件,又乐为富文本控件

复制代码
private void btnFont_Click(object sender, EventArgs e)
{
    FontDialog f = new FontDialog();
    f.ShowDialog();//显示字体属性
    this.richTextBox1.SelectionFont = f.Font;//修改控件里的字体
}
private void btnColor_Click(object sender, EventArgs e)
{
    ColorDialog c = new ColorDialog();
    c.ShowDialog();//显示字体颜色属性
    this.richTextBox1.SelectionColor = c.Color;//修改控件字体颜色
}
复制代码

5.MaskedTextBox:设置掩码进行格式控制;如:时间日期格式等等。
6.Notifylcon:在任务栏中显示图标【this.Visible = false;//隐藏;true;//显示;Application.Exit();//退出】

//this.Hide();//隐藏窗体的方法,显示窗体的方法this.Show();
this.Visible = false;//隐藏,这里用属性隐藏。
this.Visible = true;//显示,图标是否显示也可以控制这个属性
WindowState = FormWindowState.Normal;//安装用来的方式显示。
//Application.Exit();//退出

7.Process:调用外部应用程序

this.process1.StartInfo.FileName="水晶连连看.exe";//设置要调用的应用程序(完整路径也可以)
this.process1. Start();//启动

8.ErrorProvider:数据验证
常用方法:SetError:设置指定控件的错误描述;语法:public void SetError(Control control,string value);(参数1:控件;参数2:错误消息)
属性事件Validating:验证数据时触发的事件;Enter //进入控件时发生,GotFocus //在控件接收焦点时发生;Leave /输入焦点离开控件时发生;Validated //数据效验完成后发生;LostFocus //失去焦点时发生;

复制代码
private void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (this.textBox1.Text.Trim() == "")
    {
        this.errorProvider1.SetError(this.textBox1, "姓名不能为空");
    }
    else
    {
        this.errorProvider1.SetError(this.textBox1, "");
    }
}
复制代码

 

posted @   Akai_啊凯  阅读(847)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示