【问题标题】:c# Add listView items from another form [closed]c#从另一个表单添加listView项目[关闭]
【发布时间】:2014-10-25 04:40:56
【问题描述】:

我正在尝试从另一个表单中添加列表视图中的项目,但我不知道该怎么做。我试过这个,但它给出了一个错误。

表格1

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

namespace Local_Host
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            _Form1 = this;
        }

        public static Form1 _Form1;

        public void AddItem(object value)
        {
            listView1.Items.Add(value);
        }
    }
}

Form2

    private void button1_Click(object sender, EventArgs e)
    {
        Form1._Form1.AddItem(textBox1.Text); //error

    }

【问题讨论】:

  • 究竟是什么错误?
  • @eddie_cat Form1 是类名,他正在调用 Form1 类的 _Form1 静态变量。最好等待什么不起作用的解释
  • 它有一些无效的参数
  • 可能你从来没有运行过form1的构造函数并得到一个NRE

标签: c#


【解决方案1】:

错误在函数中

 public void AddItem(object value)
 {
     listView1.Items.Add(value);
 }

您将一个对象传递给此函数并尝试将其添加到 ListViewItemCollection,但 ListViewItemCollection 中没有overload of the Add method 接受对象

改成

 public void AddItem(string value)
 {
     listView1.Items.Add(value);
 }

这将解决即时编译问题,但您将很难使用该静态变量。如果您的计划是将值从 form2 传递到 form1,最好保留创建的 form1 实例并使用它通过 AddItem 方法传递值,否则您将结束将该值添加到 Form1 的其他实例(后一个实例created 将接收新字符串)

【讨论】:

  • 是的,这可以解决眼前的问题,但是您最好计划另一种方法在表单之间传递值,因为该静态变量非常危险
【解决方案2】:

而是将文本框值传递给 Form1 构造函数,例如

Form2

private void button1_Click(object sender, EventArgs e)
{
    Form1 frm = new Form1(textBox1.Text);
    frm.show();
}

然后在 Form1 中将值添加到您的列表视图中

public partial class Form1 : Form
{
    public Form1(string listview_val)
    {
        InitializeComponent();

        this.listView1.Items.Add(listview_val);
    }
}

【讨论】:

  • 感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多