如何更新字符串“_服务器名称”;来自第二种形式

本文关键字:二种 更新 何更新 字符串 服务器 | 更新日期: 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();
        }
    }
}