如何使用c#

时间:2017-10-01 19:41:23

标签: c# winforms

我在form1中创建listview,我需要在其他类

中使用它

但如果我向form1添加加载函数,该函数可以正常工作

Form1中:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Command_Procesures.LoadAll();
    }

Command_Procesures:

    public class Command_Procesures

{
    public static void LoadAll()
    {
        List<database> users = database.GetUsers();

        Form1 ff = new Form1();

        ff.listView1.Items.Clear();

        foreach (database u in users)
        {

            ListViewItem item = new ListViewItem(new String[] { u.Id.ToString(), u.Username, u.Password });
            item.Tag = u;

            ff.listView1.Items.Add(item);

        }
    }


}

1 个答案:

答案 0 :(得分:0)

这不起作用的原因是因为您正在创建表单的 new 实例,将数据设置为那个实例,然后从不显示该表单。相反,您需要在已有的表单实例上设置数据。

在最简单的情况下,基于您现在拥有的结构,您将传递对它的引用:

public static void LoadAll(ListView listView)
{
    List<database> users = database.GetUsers();

    listView.Items.Clear();

    foreach (database u in users)
    {

        ListViewItem item = new ListViewItem(new String[] { u.Id.ToString(), u.Username, u.Password });
        item.Tag = u;

        listView.Items.Add(item);

    }
}

然后在调用方法时提供该引用:

Command_Procesures.LoadAll(this.listView1);

可以被认为这不是最好的做法,尽管这些事情总是值得商榷的。通常,您只需要UI对象(在本例中为表单)来访问UI元素。其他类将用于与支持数据和服务交互并将其返回到UI,但只有UI应该与自身交互并依赖于自身。

基本上,通过向您的其他类引入Windows窗体依赖项,该类现在只能由 用于Windows窗体项目。因此,该类应该只是Windows窗体项目中的辅助类,如果是一个单独的类。