C# WindowForm界面初探,窗体访问,绑定数据源,重载构造函数

今日份主要内容

C# WindowForm界面初探

  1. Winform项目模板,目录解析
  2. 窗体对象
  3. 控件对象
  4. 界面设计基础

1.控件

控件的本质是,控件是构建用户界面(User Interface)的基础,通过控件组合设计出符合需求的界面效果。

相当于html的标签。

基本要求:

  • 界面效果,布局
  • 交互(事件,委托)

2.学习控件的技巧

公共的属性:修改界面效果

事件:修改行为

Winform控件官方文档:按功能列出控件 - Windows Forms .NET Framework | Microsoft Learn

Winform官方简单的案例:使用 C# 创建 Windows 窗体应用 - Visual Studio (Windows) | Microsoft Learn

第一个控件,窗体Form:提供一个界面容器,Form继承于基类System.Windows.Forms.Form

public partial class Form1 : Form{

}

fn+f7打开窗体的业务逻辑代码进行查看或编写,fn+f4打开控件的属性进行简单的调整。可以双击控件,就能查看代码。

反编译查看Form,using Drawing; //系统设计好的,也可以自定义绘制GDI+。

三个重要的位置:FormXXX.cs,设计器(搭建界面),控件的属性窗口。

  • 想操作一个控件,前提是先选中一个控件。
  • 两个窗体之间传递数据:通过构造函数。
  • 窗体事件:FormLoad,FormClosed,Click
  • 数据绑定:把数据源绑定到一个控件 binding 上,数据源和控件之间建立联系。
  • alt+enter +enter引入命名空间

代码演示

Program.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _1.窗体
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            // 窗体启用样式
            Application.EnableVisualStyles(); 
            Application.SetCompatibleTextRenderingDefault(false);

        // 应用程序启动一个主窗体(第一个窗体)
        Application.Run(new Form1());
    	}
	}
}

Form1.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _1.窗体
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Console.WriteLine("hello world1111");
            Debug.WriteLine("hello world22222");
        }

        private void btnStudentList_Click(object sender, EventArgs e)
        {
            // 编写一段代码,打开新窗体
            // 1.实例化一个窗体对象, this当前窗体的实例,通过另外一个窗体的构造函数,把当前窗体的实例传递过去。
            StudentForm studentForm = new StudentForm(this,"学生列表");
            studentForm.Show();  // 打开一个窗体
            //this.Close();// 关闭当前窗体
            this.Hide(); // 隐藏窗体
            //studentForm.ShowDialog();  // 以对话框的形式打开窗体。
        }
    }
}

StudentForm.cs


using _1.窗体.Data;
using _1.窗体.Model;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _1.窗体
{
    public partial class StudentForm : Form
    {
        private Form mainForm = null;

	    // 窗体的构造函数,默认是无参的构造函数,改成有参构造函数,方便接收传递的数据。
 	    // 参数form1类型是窗体Form,用来存储传递过来的this。初始化当前窗体时,可以把form1窗体的实例传递过来。
        public StudentForm(Form form1, string text)
        {
            InitializeComponent();

            mainForm = form1;
            this.Text = text;

            Debug.WriteLine("构造函数执行");
        }

        private void StudentForm_Load(object sender, EventArgs e)
        {
            Debug.WriteLine("窗体的Load事件构造函数执行");

            // 倒推
            BindDataGridView();
        }

        // 2. 把数据源students和datagridview控件绑定一起。
        private void BindDataGridView()
        {
            // 先把上次绑定的数据源清除,
            dataGridView1.DataSource = null;
            // 再重新绑定,这样可以解决列表中数据已变化,但网格没有刷新的问题。
            dataGridView1.DataSource = StudentData.Students;//StudentData作为数据源,是一个类,Students是这个类里面的列表。而列表里数据的类型则是由另一个Student类定义的,Student是一个实体类。实体类:实体本质对现实的描述,映射ORM(Object Relation Mapping) POCO,这里不做展示。
        }

        // FormClosed
        private void StudentForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            mainForm.Show();//这个需要自行绑定事件,才会有效果。
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            AddStudentForm form = new AddStudentForm();
            // 窗体对话框会返回一个结果,是个枚举值,常用的结果:OK,Cancel
            // AddStudentForm窗体返回的结果。
            DialogResult dialogResult = form.ShowDialog();
            if (dialogResult == DialogResult.OK)
            {
                // 重新绑定数据源
                BindDataGridView();
            }
        }
    }
}

小tip

关于C#里的sln文件和csporj文件的区别:初学C#,总结一下.sln和.csproj的区别 - ProZkb - 博客园 (cnblogs.com)

posted @ 2024-08-15 21:57  海域  阅读(45)  评论(0编辑  收藏  举报