如何更新字符串“_服务器名称”;来自第二种形式
本文关键字:二种 更新 何更新 字符串 服务器 | 更新日期: 2023-09-27 18:23:50
我是C#编程的新手,但我知道属性应该封装在类中。因此我使用了私人申报
private string _servername;
问题是我无法从第二个表单更新_servername
。我点击了ChangeName
按钮。出现了新的CCD_ 3。我点击了按钮NewName
。Form1中的方法已成功完成,方法_Server2
中的MessageBox向我显示_servername
的值应为"TEST"当我点击按钮CurrentServerName
时,_servername
的值仍然是"localhost"。你能告诉我为什么吗?如何修复?提前感谢
FORM 1
namespace Test
{
public partial class Form1 : Form
{
private string _servername;
public Form1()
{
InitializeComponent();
_servername = "localhost";
}
public string _Server(string _server)
{
_servername = _server;
string serverlist2 = _server;
_Server2(serverlist2);
return serverlist2;
}
public void _Server2(string _server2)
{
_servername = _server2;
MessageBox.Show(_servername);
}
private void ChangeName_Click(object sender, EventArgs e)
{
Form2 _Form2 = new Form2();
_Form2.Show();
}
private void CurrentServerName_Click(object sender, EventArgs e)
{
MessageBox.Show(_servername);
}
}
}
FORM 2
namespace Test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void NewName_Click(object sender, EventArgs e)
{
Form1 _Form1 = new Form1();
_Form1._Server("TEST");
this.Close();
}
}
}
这不起作用,因为您正在Form2
中创建Form1
的新"实例",这与其他Form1
不同。
你需要这样更改Form1:
private void ChangeName_Click(object sender, EventArgs e)
{
using (Form2 form2 = new Form2())
{
form2.Show();
_Server(form2.ServerName);
} //Ensure the form is Disposed.
}
Form2是这样的:
namespace Test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public String ServerName { get; private set; } //Can only be set in this class, but read by all.
private void NewName_Click(object sender, EventArgs e)
{
ServerName = "Test";
Close();
}
}
}
编辑:另一点。像_Server()
这样的命名方法和像_Form2
这样的局部变量是不好的做法,它们应该是Server()
和form2
。看看这篇MSDN文章和这个问题。
您不希望在Form2
中创建Form1
的新实例。相反,当您创建Form2
的实例来显示它时,将对Form1
的当前实例的引用传递到构造函数中。然后,您可以访问Form1
的现有实例上的方法。这里有一个例子:
表格1
private void ChangeName_Click(object sender, EventArgs e)
{
// Pass a reference to this form instance using the 'this' keyword
Form2 _Form2 = new Form2(this);
_Form2.Show();
}
表格2
namespace Test
{
public partial class Form2 : Form
{
// Hold an instance to Form1
private Form1 mForm1;
public Form2(Form1 form1)
{
// Store instance to form1
mForm1 = form1;
InitializeComponent();
}
private void NewName_Click(object sender, EventArgs e)
{
// Change name on existing instance of form 1
mForm1._Server("TEST");
this.Close();
}
}
}