如何从另一个窗体更改form1属性或它的对象属性

本文关键字:属性 对象 form1 另一个 窗体 | 更新日期: 2023-09-27 17:50:46

我无法访问主表单的属性或从Form1打开的次要表单的对象属性。

有简单的方法可以解决这个问题吗?

我在网上找到了一些没用的解决方法。

如何从另一个窗体更改form1属性或它的对象属性

Form1的属性设置为public,但注意,这违反了OOP规则

在MainForm中设置一个或多个公共属性。打开第二个表单时,将该表单的所有者设置为MainForm。这样,您就可以在第二个表单中访问MainForm的属性。示例代码:

中后台代码Form1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public String SomeProperty { get; set; }
    //Event of a normal button with name 'OpenFormButton'
    private void OpenFormButton_Click(object sender, EventArgs e)
    {
        var secondForm = new Form2
        {
            Owner = this
        };
        secondForm.Show();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        SomeProperty = "HELLO WORLD";
    }
}

后台代码Form2:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        var owner = this.Owner as Form1;
        var val = owner.SomeProperty;
        MessageBox.Show(val); //Shows a MessageBox with 'HELLO WORLD'
    }
}

这只是一个简单的代码,显示如何访问另一个表单上的属性。您不仅可以获取属性的值,还可以设置(更改)属性的值。这也适用于复杂类型,而不是字符串和整数。希望这对你有帮助!

必须将Form1的实例传递给Form2构造函数

我更喜欢使用这样一个简单的Callback函数:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public String SomeProperty { get; set; }
    private void OpenFormButton_Click(object sender, EventArgs e)
    {
        var secondForm = new Form2()
        {
            GetSomeProperty = () => { return SomeProperty ;};
        };
        secondForm.Show();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        SomeProperty = "HELLO WORLD";
    }
}

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
    public Func<string> GetSomeProperty
    {
        get;
        set;
    }
    private void Form2_Load(object sender, EventArgs e)
    {
        MessageBox.Show(GetSomeProperty.Invoke());
    }
}

每次你打电话GetSomeProperty.Invoke ();Func将调用get访问器并从第一个Form

返回它
相关文章: