常用控件2
组合选择框 (ComboBox)
System.Windows.Forms.ComboBox
是组合选择框,用于从下拉列表中选择一项。
事件:选项改变
如果用户修改了 ComboBox
中的选项,会触发 SelectedIndexChanged
事件。
comboBox.SelectedIndexChanged += new EventHandler(HandleSelectionChange);
private void HandleSelectionChange(object sender, EventArgs e)
{
ComboBox cb = sender as ComboBox;
// 处理选项改变,例如获取当前选中的文本
string selectedText = cb.SelectedItem.ToString();
}
添加一个选项
代码中可以使用 Items.Add
方法来添加一个选项到末尾。
添加多个选项
代码中可以使用 Items.AddRange
方法来添加多个选项到末尾。
清空选项
代码中可以使用 Items.Clear
方法来清空所有选项。
获取当前选项文本
代码中可以使用 SelectedItem
或 Text
属性来获取当前选中的选项的文本。
// 获取选中项对象,然后转换为字符串
string method = comboBox.SelectedItem.ToString();
// 或者直接获取文本框中显示的文本
string text = comboBox.Text;
设置当前选中项
可以通过 SelectedIndex
或 SelectedItem
属性来设置当前选中的项。
列表框 (ListBox)
System.Windows.Forms.ListBox
是列表控件,用于显示一个项目列表。
添加一个列表项
使用 Items.Add
方法添加一个列表项到末尾。
添加多个列表项
使用 Items.AddRange
方法添加多个列表项。
删除一个列表项
使用 Items.RemoveAt
方法删除指定索引的列表项。
清空列表项
使用 Items.Clear
方法删除所有列表项。
设置当前选中项
通过 SelectedIndex
或 SelectedItem
属性设置当前选中的项。
获取当前列表项文本
通过 SelectedItem
或 Text
属性获取。
遍历列表项
可以这样遍历列表里面的每个 item:
事件:选项选择改变
当用户选择的项发生改变时,会触发 SelectedIndexChanged
事件。
listBox.SelectedIndexChanged += new EventHandler(HandleSelectionChange);
private void HandleSelectionChange(object sender, EventArgs e)
{
if (listBox.SelectedItem != null)
{
string currentItemText = listBox.SelectedItem.ToString();
// 处理选择改变
}
}
列表项文本可编辑
WinForms 的 ListBox
不直接支持编辑列表项。要实现此功能,通常需要自定义控件或在需要编辑时动态地在列表项上覆盖一个 TextBox
控件,这是一个高级主题。
设置可拖拽排序和多选
- 多选:通过
SelectionMode
属性设置。
- 拖拽排序:需要手动实现
MouseDown
,DragEnter
,DragDrop
等事件,这也是一个高级主题。
表格 (DataGridView)
System.Windows.Forms.DataGridView
是功能强大的表格控件。
创建列和标题栏
可以在 Visual Studio 的设计器中通过“编辑列”对话框来设置,也可以在代码中动态创建。
// 添加一个名为 "Name" 的列,标题为 "名称"
dataGridView.Columns.Add("Name", "名称");
dataGridView.Columns.Add("Value", "值");
添加一行
Rows.Add
方法可以添加一行。
删除一行
Rows.RemoveAt
方法可以删除指定位置的一行。
设置单元格内容、对齐、属性
通过 Rows
和 Cells
集合的索引器来访问和修改单元格。
// 设置第1行、第1列单元格的内容
dataGridView.Rows[0].Cells[0].Value = "白月黑羽-江老师";
// 也可以这样访问
dataGridView[0, 0].Value = "白月黑羽-江老师"; // [columnIndex, rowIndex]
// 设置单元格为只读
dataGridView[0, 0].ReadOnly = true;
// 设置单元格文本居中对齐
dataGridView[0, 0].Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
获取单元格内容
同样通过索引器访问 Value
属性。
获取行数和列数
使用 RowCount
和 ColumnCount
属性。
获取当前选中行的索引
使用 CurrentCell
属性来定位当前单元格,然后获取其行索引。
int currentRowIndex = -1;
if (dataGridView.CurrentCell != null)
{
currentRowIndex = dataGridView.CurrentCell.RowIndex;
}
清除所有内容
Rows.Clear()
方法可以清除所有行,但这只在非数据绑定模式下有效。
设定列宽、宽度自动缩放
- 固定列宽
- 自动缩放:通过设置列的
AutoSizeMode
属性。
您需要高效学习,找工作? 点击咨询 报名实战班
点击查看学员就业情况
设置数据源
可以给 设置数据源,实现数据和表格控件的双向绑定
比如
public partial class Form1 : Form
{
// 定义 数据源字段
public List<Product> products;
public Form1()
{
InitializeComponent();
// 创建数据源 数据
products = new List<Product>()
{
new Product { 编号 = 101, 名称 = "笔记本电脑", 价格 = 7999.00m, 种类 = "电子产品" },
new Product { 编号 = 102, 名称 = "C#入门经典", 价格 = 89.50m, 种类 = "图书音像" },
new Product { 编号 = 103, 名称 = "智能台灯", 价格 = 299.00m, 种类 = "家居生活" },
new Product { 编号 = 104, 名称 = "运动T恤", 价格 = 129.00m, 种类 = "服装鞋帽" }
};
// 绑定到表格控件的数据源
dataGridView1.DataSource = products;
}
private void btnSave_Clicked(object sender, EventArgs e)
{
// products 内容放入字符串
string productsText = string.Join("\n", products);
// 写入文件 products.txt
File.WriteAllText("products.txt", productsText);
}
}
// 1. 定义实体类, 一定要放在表单定义的后面,
// 因为Visual Studio 设计器认为第一个类定义用来作为界面编辑的
public class Product
{
public int 编号 { get; set; }
public required string 名称 { get; set; }
public decimal 价格 { get; set; }
public required string 种类 { get; set; }
public override string ToString()
{
return $"编号: {编号}, 名称: {名称}, 价格: {价格}, 种类: {种类}";
}
}
事件:单元格内容改动
当用户修改了一个单元格的内容并结束编辑时,会触发 CellValueChanged
事件。
dataGridView.CellValueChanged += new DataGridViewCellEventHandler(HandleCellValueChanged);
private void HandleCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
// e.RowIndex 和 e.ColumnIndex 提供了被修改单元格的位置
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
string newValue = dataGridView[e.ColumnIndex, e.RowIndex].Value.ToString();
// 处理内容更改
}
}