C#如何将其他表单的值传入另一表单并添加到带列ListView中
C# 跨窗体传值后写入带列ListView实现方案
前置配置(Form2端)
首先确保Form2的ListView控件完成基础配置:
- 将ListView的
View属性设置为Details,才能显示多列布局 - 按需求添加对应列,比如需要展示姓名、年龄、手机号,就添加3个对应列,设置好列宽
核心实现逻辑
带列ListView的每一行对应一个ListViewItem对象,第一列的值作为ListViewItem的构造参数传入,后续列的值按顺序添加到SubItems集合中即可。
推荐通过Form2暴露公开方法的方式接收数据,避免直接跨窗体操作控件带来的权限问题和逻辑混乱。
示例代码
Form2 后台代码
public partial class Form2 : Form { public Form2() { InitializeComponent(); // 若未在设计器配置ListView,可取消下方注释代码完成初始化 // listView1.View = View.Details; // listView1.Columns.Add("姓名", 100); // 第二个参数为列宽,单位像素 // listView1.Columns.Add("年龄", 60); // listView1.Columns.Add("联系电话", 150); } // 自定义带参构造函数:适合每次传值都打开新Form2的场景 public Form2(string name, string age, string phone) : this() { AddDataToListView(name, age, phone); } // 公开方法:接收外部传入的数据,写入ListView public void AddDataToListView(string name, string age, string phone) { // 构造第一列数据 ListViewItem listItem = new ListViewItem(name); // 按列顺序添加后续列数据 listItem.SubItems.Add(age); listItem.SubItems.Add(phone); // 将行数据添加到ListView控件 listView1.Items.Add(listItem); } }
Form1 后台代码
假设Form1有3个输入框txtName、txtAge、txtPhone,和一个触发传值的按钮:
public partial class Form1 : Form { // 全局持有Form2实例:适合同一个Form2多次追加数据的场景 private Form2 _form2Instance; public Form1() { InitializeComponent(); } private void btnSubmitToForm2_Click(object sender, EventArgs e) { // 场景1:同一个Form2多次追加数据 if (_form2Instance == null || _form2Instance.IsDisposed) { _form2Instance = new Form2(); _form2Instance.Show(); } _form2Instance.AddDataToListView(txtName.Text, txtAge.Text, txtPhone.Text); // 场景2:每次传值打开新的Form2,注释场景1代码,取消下方注释即可 // Form2 newForm2 = new Form2(txtName.Text, txtAge.Text, txtPhone.Text); // newForm2.Show(); // 可选:传值完成清空输入框 txtName.Clear(); txtAge.Clear(); txtPhone.Clear(); } }
注意:SubItems的添加顺序必须和ListView的列顺序完全一致,否则会出现数据错列的问题
内容的提问来源于stack exchange,提问作者Jackson
相关产品推荐
相关产品推荐

