ListView没有添加有效的字符串

时间:2016-07-07 18:41:11

标签: c# winforms listview

我正在使用ListView为我的自定义服务器创建一个控制台终端。

它会写入从同一个类Main给出的任何字符串,但拒绝来自另一个Misc的字符串。

Heres a gif of the following code in action

gif的第一部分来自myFunction()。正如您所看到的,消息框显示str中的stringToConsole()包含字符串(“报告1”和“报告2”),但不会添加它。

gif的第二部分来自Execute_Click事件。正如您所看到的,消息框再次显示str中的stringToConsole()包含字符串(无论我输入什么内容), 添加

以下代码位于类Misc

以下代码的字符串无法添加。

public static string myFunction()
    {
        Main myClass = new Main();
        myClass.stringToConsole("report 1", "ConsoleList");

        Thread.Sleep(2000); // emulate work

        myClass.stringToConsole("report 2", "ConsoleList");
        return "string";
    }

以下代码位于表单类Main内。

private void startupProcedure()
    {
        label1.Text = Misc.myFunction();
    }

这会将字符串添加到ListView(控制台列表)

 public void stringToConsole(string str, string destination)
    {
        if (destination == "ConsoleList")
        {
            // to check if str has a value
            MessageBox.Show(str); // string does have a value
            ConsoleList.Items.Add(str); // refuse to use str from myFunction()
        }
    }

可以添加以下代码的字符串。

private void Execute_Click(object sender, EventArgs e)
    {
        executeCommandLine(CommandLine.Text, "ConsoleList");
        CommandLine.Clear();
    }

public void executeCommandLine(string commandLine, string destination)
    {
        stringToConsole(commandLine, destination); // this shows in Listview
    }

1 个答案:

答案 0 :(得分:2)

几个小时前就提出了一个非常类似的问题。你有一个非常非常基本的问题:

Main myClass = new Main();

您正在实例化一个新的Main表单,但是,您永远不会在函数的范围之外显示它或使用它,因此,您不会修改要修改的Main实例。

一种简单的方法是将Main实例传递给函数:

public static string myFunction(Main formInstance)
{
    formInstance.stringToConsole("report 1", "ConsoleList");

    Thread.Sleep(2000); // emulate work

    formInstance.stringToConsole("report 2", "ConsoleList");
    return "string";
}

private void startupProcedure()
{
    label1.Text = Misc.myFunction(this);
}