我正在使用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
}
答案 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);
}