一、窗体切换

1. 核心属性 / 方法

方法 / 属性作用 & 效果
Show()打开非模态窗体(新窗体打开后,原窗体仍可操作)
ShowDialog()打开模态窗体(新窗体关闭前,原窗体不可操作,返回DialogResult表示操作结果)
Hide()隐藏当前窗体(不释放资源,可通过Show()重新显示)
Close()关闭当前窗体(默认释放资源,若为主窗体则程序退出)
DialogResult模态窗体的返回结果(如DialogResult.OK/Cancel,用于判断用户操作)

2. 事件

  • FormClosed:窗体关闭后触发(资源已释放)。
  • FormClosing:窗体关闭过程中触发(可通过e.Cancel = true取消关闭)。

3. 示例(模态窗体传值)

// 主窗体打开模态窗体
private void btnOpenModal_Click(object sender, EventArgs e)
{
    ModalForm modalForm = new ModalForm();
    if (modalForm.ShowDialog() == DialogResult.OK)
    {
        // 获取模态窗体的返回值
        labelResult.Text = modalForm.InputText;
    }
}

// 模态窗体(设置返回值)
public class ModalForm : Form
{
    public string InputText { get; set; }

    private void btnConfirm_Click(object sender, EventArgs e)
    {
        InputText = txtInput.Text;
        this.DialogResult = DialogResult.OK; // 设置返回结果
        this.Close();
    }
}

二、窗体传值

1. 构造函数传值(最常用)

  • 效果:创建新窗体时直接传递数据,确保数据在窗体初始化时已就绪。
  • 示例
    // 主窗体构造函数
    public MainForm(string account, int userId)
    {
        InitializeComponent();
        lblAccount.Text = account;
        lblUserId.Text = userId.ToString();
    }
    
    // 登录窗体调用
    new MainForm("admin", 1001).Show();
    

2. 公共属性 / 方法传值

  • 效果:灵活控制传值时机(可在窗体显示后再赋值)。
  • 示例
    // 主窗体公共属性
    public class MainForm : Form
    {
        public string UserAccount { get; set; }
    
        private void MainForm_Load(object sender, EventArgs e)
        {
            // 窗体加载时使用属性值
            lblAccount.Text = UserAccount;
        }
    }
    
    // 登录窗体赋值
    MainForm mainForm = new MainForm();
    mainForm.UserAccount = "admin";
    mainForm.Show();
    

3. 委托 / 事件传值(反向传值)

  • 效果:子窗体向父窗体传递数据(如子窗体关闭时回传结果)。
  • 示例
    // 子窗体定义委托
    public delegate void ValueReturnHandler(string value);
    public event ValueReturnHandler OnValueReturn;
    
    // 子窗体触发事件
    private void btnClose_Click(object sender, EventArgs e)
    {
        OnValueReturn?.Invoke(txtInput.Text); // 回传数据
        this.Close();
    }
    
    // 父窗体订阅事件
    private void btnOpenChild_Click(object sender, EventArgs e)
    {
        ChildForm childForm = new ChildForm();
        childForm.OnValueReturn += (value) => 
        {
            lblResult.Text = value; // 接收子窗体回传的数据
        };
        childForm.Show();
    }
    

三、RadioButton(单选按钮)

1. 核心属性

属性名作用 & 效果
Text设置按钮显示的文本(如 “男”)。
Checked布尔值,true表示选中,false表示未选中(默认false)。
GroupName同一容器内,GroupName相同的 RadioButton 为一组(组内互斥)。
AutoCheck布尔值,true表示点击时自动切换选中状态(默认true)。

2. 事件

  • CheckedChanged:选中状态改变时触发(如从 “未选中”→“选中”)。
    private void radioButtonMale_CheckedChanged(object sender, EventArgs e)
    {
        if (radioButtonMale.Checked)
        {
            MessageBox.Show("选中了“男”");
        }
    }
    

3. 效果示例

  • 同一GroupName的 RadioButton,点击其中一个,其他会自动取消选中。

四、CheckBox(复选框)

1. 核心属性

属性名作用 & 效果
Text设置复选框显示的文本(如 “篮球”)。
Checked布尔值,true表示选中,false表示未选中(默认false)。
ThreeState布尔值,true支持三态(Checked/Unchecked/Indeterminate),默认false
CheckState选中状态(CheckState.Checked/Unchecked/Indeterminate,三态时可用)。

2. 事件

  • CheckedChanged:选中状态改变时触发(如从 “未选中”→“选中”)。
    private void checkBoxBasketball_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBoxBasketball.Checked)
        {
            listBoxHobby.Items.Add("篮球");
        }
        else
        {
            listBoxHobby.Items.Remove("篮球");
        }
    }
    

3. 效果示例

  • 三态模式下,复选框会显示 “半选中” 状态(通常用于父选项表示子选项部分选中)。

五、ListBox(列表框)

1. 核心属性

属性名作用 & 效果
Items列表项集合,可通过Add()/AddRange()/Remove()增删项。
SelectionMode选择模式:- None:不可选- One:单选(默认)- MultiSimple:多选(点击切换)- MultiExtended:多选(按住 Ctrl/Shift 选择)
SelectedItem当前选中的单个项(SelectionMode=One时可用)。
SelectedItems当前选中的多个项(集合,MultiSimple/MultiExtended时可用)。
SelectedIndex当前选中项的索引(-1 表示无选中)。

2. 事件

  • SelectedIndexChanged:选中项改变时触发(如从第 1 项切换到第 2 项)。
    private void listBoxCity_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBoxCity.SelectedItem != null)
        {
            lblSelected.Text = $"选中城市:{listBoxCity.SelectedItem}";
        }
    }
    

3. 效果示例

  • MultiExtended模式下,按住 Ctrl 可选择不连续项,按住 Shift 可选择连续项。

六、ComboBox(下拉组合框)

1. 核心属性

属性名作用 & 效果
Items下拉项集合,用法同 ListBox。
DropDownStyle下拉样式:- DropDown:可输入 + 下拉选择(默认)- DropDownList:仅下拉选择- Simple:始终展开(类似 ListBox)
SelectedItem当前选中项(DropDownList模式下可用)。
Text输入框文本(DropDown模式下,可输入自定义内容)。
DropDownHeight下拉列表的高度(默认自适应)。

2. 事件

  • SelectedIndexChanged:选中项改变时触发。
  • TextChanged:输入框文本改变时触发(DropDown模式下可用)。
    private void comboBoxEdu_SelectedIndexChanged(object sender, EventArgs e)
    {
        lblEdu.Text = $"选中学历:{comboBoxEdu.SelectedItem}";
    }
    

3. 效果示例

  • DropDown模式下,用户可输入不在Items中的内容;DropDownList模式下只能选择Items中的项。

七、ImageList(图像列表)

1. 核心属性

属性名作用 & 效果
Images图像集合,通过属性面板添加图片(支持jpg/png/bmp)。
ImageSize图像的统一尺寸(如16×16/32×32),添加的图片会自动缩放到该尺寸。
ColorDepth图像颜色深度(如Depth32Bit,影响图片质量)。

2. 配合其他控件使用(示例:ListBox)

// 1. 拖入ImageList,添加2张图片(索引0:文件图标,索引1:文件夹图标)
// 2. 设置ListBox的ImageList属性为该ImageList
// 3. 给ListBox项设置图标
private void Form_Load(object sender, EventArgs e)
{
    listBoxFiles.Items.Add("文档.txt");
    listBoxFiles.Items.Add("图片文件夹");
    // 设置第1项图标(索引0)
    listBoxFiles.SetItemImage(0, 0);
    // 设置第2项图标(索引1)
    listBoxFiles.SetItemImage(1, 1);
}

3. 效果示例

  • ListBox 项左侧会显示对应的图标,所有图标尺寸统一。

八、PictureBox(图片框)

1. 核心属性

属性名作用 & 效果
Image显示的图片(可通过Image.FromFile(path)加载本地图片,或Image.FromStream(stream)加载网络图片)。
SizeMode图片显示模式:- Normal:默认(图片超出控件则裁剪)- StretchImage:拉伸适应控件(可能变形)- AutoSize:控件自适应图片尺寸- CenterImage:图片居中显示- Zoom:按比例缩放适应控件(不变形)
BorderStyle边框样式(None/FixedSingle/Fixed3D)。
WaitOnLoad布尔值,true表示加载图片时阻塞 UI(默认false,异步加载)。

2. 事件

  • Click:点击图片时触发(可实现 “点击放大图片” 等功能)。
    private void pictureBox1_Click(object sender, EventArgs e)
    {
        // 打开图片查看窗体
        ImageForm imageForm = new ImageForm();
        imageForm.pictureBox.Image = pictureBox1.Image;
        imageForm.ShowDialog();
    }
    

3. 效果示例

  • Zoom模式下,图片会按比例缩放,不会变形;StretchImage模式下可能拉伸变形。

九、NumericUpDown(数字上下控件)

1. 核心属性

属性名作用 & 效果
Value当前数值(decimal类型,默认 0)。
Minimum最小值(默认 0)。
Maximum最大值(默认 100)。
Increment每次点击上下箭头的步长(默认 1)。
DecimalPlaces小数位数(默认 0,即整数)。
ThousandsSeparator是否显示千位分隔符(默认false)。

2. 事件

  • ValueChanged:数值改变时触发(如点击箭头或直接输入)。
    private void numericUpDownAge_ValueChanged(object sender, EventArgs e)
    {
        lblAge.Text = $"年龄:{numericUpDownAge.Value}";
    }
    

3. 效果示例

  • 点击上下箭头,数值会按Increment步长增减;直接输入非数字内容会自动过滤。

更多推荐