0

我无法从从Form1.

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

我在网上找到了几个无用的解决方案。

4

4 回答 4

0

在 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'
    }
}

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

于 2013-01-06T12:13:30.297 回答
0

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

于 2013-01-06T13:00:31.043 回答
0

我更喜欢使用这样的简单回调函数:

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 返回它

于 2013-01-08T14:20:33.240 回答
0

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

于 2013-01-06T11:49:26.327 回答