从Form2中的类中获取属性值,并且该值已在c#的Form1中设置

本文关键字:Form1 设置 Form2 获取 属性 | 更新日期: 2023-09-27 18:09:34

场景如下:我想在Class1中设置服务器的值,我在Form1中设置值。然后在Form2中获得服务器Class1的值。

class Class1
{
    private string server;
    public string Server
    {
        get { return server; }
        set { server = value; }
    }
}
//Form1 where i want to set the value of server
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1();
    sample.Server = serverTxt.Text;
}
//Form2 where i want to get the value of server that i've set in Form1
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1();
    string serVer = sample.Server;
}

我知道我不能有server的值,因为我声明了一个新的Class1实例。但是有任何方法,我仍然可以得到服务器的值在Form2,我在Form1中设置?

请原谅我,我是c#的新手,提前感谢大家:D

从Form2中的类中获取属性值,并且该值已在c#的Form1中设置

有许多选择,但是Class1的静态实例将更容易。

在form1中声明/创建Class1类的静态实例
//Form1 where i want to set the value of server
public static Class1 sample=new Class1();
private void setBtn_Click_1(object sender, EventArgs e)
{
    sample.Server = serverTxt.Text;
}

和Form2中的

//Form2 where i want to get the value of server that i've set in Form1
private void setBtn_Click_1(object sender, EventArgs e)
{
    string serVer = Form1.sample.Server;
}

您不仅不能这样做,而且在执行setBtn_Click_1之后的代码中,您创建的类型Class1的对象消失了—这是因为您在方法中只有对它的引用,所以当方法执行时引用消失了!

您可以在创建第二个表单时将其发送到构造函数中。像这样,然后

class Class1
{
    private string server;
    public string Server
    {
        get { return server; }
        set { server = value; }
    }
}
//form 1
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1();
    sample.Server = serverTxt.Text;
    prevForm = sample;
}

//form 2
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1{ Server=prevForm.Server };
}

对于这个,你应该把结果或对你的第一个表单的引用保存在某个地方,以便你以后可以访问它

您必须设置serverTxt的值。Form1中的文本到全局变量(最简单的方法)。然后取Form2

这个全局变量的值

您可以在Form2构造函数中发送相关数据并从Form1初始化它(在Form1中初始化Form2时传递数据)

[编辑]您还可以通过保存该数据的数据库或使用两个表单都可以访问的外部文件传递信息。

解决方案之一是将Calss1中的server属性声明为静态

class Class1
{
    public static string Server { get; set; }
}

这样你就可以在两种形式

之间得到它的值
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1.Server = serverTxt.Text;
}
private void setBtn_Click_1(object sender, EventArgs e)
{
    string serVer = Class1.Server;
}

仅当您有一个Server用于Class1

的所有实例时使用