我有一个ListView,它显示多行ListViewItems。用户可以通过单击编辑按钮来编辑行,该按钮打开另一个表单,显示所选行及其中的数据。 我遇到的问题是,当我按下更新按钮时,我似乎无法更新父窗体上的ListViewItem。我正在使用的代码不断抛出异常消息“ToDoList.exe中发生了'System.NullReferenceException'类型的未处理异常”。我尝试过不同的方法来更新所选项目,但似乎无法获得正常工作的代码。
这是我在显示所选行的表单上使用的代码,button1是应该更新listView的“Update Row”按钮。
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = (Form1)this.Owner;
int i = 0;
ListViewItem item = form1.listView1.SelectedItems[i];
textBox1.Text = item.SubItems[0].Text;
richTextBox1.Text = item.SubItems[1].Text;
comboBox1.Text = item.SubItems[2].Text;
dateTimePicker1.Text = item.SubItems[3].Text;
this.Close();
}
答案 0 :(得分:0)
要使表单由另一个表单拥有,请为其所有者属性分配对将成为所有者的表单的引用。
https://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner%28v=vs.110%29.aspx
您需要先设置所有者属性
答案 1 :(得分:0)
最后成功解决了这个问题。我的代码有两个问题。一个是关于我打开子Form3的方式,而不是将Form1称为类,另一个是我用来编辑行无法正常运行的代码。
将其更改为此并找到了解决方案;
Form1代码 - 使用所选行中的数据打开Form3的方法,最初使用代码:
private void button2_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count == 0) return;
Form3 form3 = new Form3();
int i = 0;
ListViewItem item = listView1.SelectedItems[i];
string title = item.SubItems[0].Text;
string description = item.SubItems[1].Text;
string priority = item.SubItems[2].Text;
string datedue = item.SubItems[3].Text;
form3.textBox1.Text = title.ToString();
form3.richTextBox1.Text = description.ToString();
form3.comboBox1.Text = priority.ToString();
form3.dateTimePicker1.Text = datedue.ToString();
form3.Show();
}
但改为:
private void button2_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count == 0) return;
using (Form3 form3 = new Form3())
{
int i = 0;
ListViewItem item = listView1.SelectedItems[i];
string title = item.SubItems[0].Text;
string description = item.SubItems[1].Text;
string priority = item.SubItems[2].Text;
string datedue = item.SubItems[3].Text;
form3.textBox1.Text = title.ToString();
form3.richTextBox1.Text = description.ToString();
form3.comboBox1.Text = priority.ToString();
form3.dateTimePicker1.Text = datedue.ToString();
form3.ShowDialog(this);
}
}
最后将Form3中的代码更改为:
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = (Form1)this.Owner;
int i = 0;
ListViewItem item = form1.listView1.SelectedItems[i];
item.SubItems[0].Text = textBox1.Text;
item.SubItems[1].Text = richTextBox1.Text;
item.SubItems[2].Text = comboBox1.Text;
item.SubItems[3].Text = dateTimePicker1.Text;
this.Close();
}