C# 实时更改其他形式变量的值

C# 实时更改其他形式变量的值,c#,winforms,C#,Winforms,我试图改变一些变量在另一个形式中的值。 我知道如何通过构造函数传递它,但这不是我想要的。我希望能够在不改变表单状态的情况下通过它。 我试图以初始形式创建公共变量,但仍然无法从另一个访问它们来修改值 第一种形式是 public partial class Main : Form 我有一个变量: public bool showingTexturePacks = false; 我尝试使用以下方法从第二个表单(公共部分类TexturePacksListViewer:form)修改它: privat

我试图改变一些变量在另一个形式中的值。 我知道如何通过构造函数传递它,但这不是我想要的。我希望能够在不改变表单状态的情况下通过它。 我试图以初始形式创建公共变量,但仍然无法从另一个访问它们来修改值

第一种形式是

public partial class Main : Form
我有一个变量:

public bool showingTexturePacks = false;
我尝试使用以下方法从第二个表单(公共部分类TexturePacksListViewer:form)修改它:

private void TexturePacksListViewer_FormClosed(object sender, FormClosedEventArgs e)
{
    Main main = new Main();
    main.showingTexturePacks = true;
}
它不起作用

我知道如何通过构造函数传递它,但这不是我想要的

这里我假设您传递的是表单上定义的属性,而不是表单本身的实例

我希望能够在不改变表单状态的情况下通过它。我试图以初始形式创建公共变量,但仍然无法从另一个访问它们来修改值

如果将一个窗体的实例传递给另一个窗体,例如通过在第二个窗体的构造函数中传递实例,则可以访问第一个窗体的所有公共属性

public class Form1 : Form
{
    public int Foo { get; set; }
}

public class Form2 : Form
{
    public Form2(Form1 form1) 
    {
        form1.Foo = 42;
    }
}
在代码的某个地方

Form1 f1 = new Form1();
Form2 f2 = new Form2(f1);
请注意,和模式以一种强大、通用的方式支持您正在尝试做的事情。WPF是围绕MVVM模式构建的,尽管您也可以实现MVC或MVVM

更新

在你刚刚发布的代码中

Main main = new Main();
main.showingTexturePacks = true;
您正在创建一个全新的Main实例。如果您想影响程序中已经存在的实例,您需要以某种方式传入已经存在的实例

我知道如何通过构造函数传递它,但这不是我想要的

这里我假设您传递的是表单上定义的属性,而不是表单本身的实例

我希望能够在不改变表单状态的情况下通过它。我试图以初始形式创建公共变量,但仍然无法从另一个访问它们来修改值

如果将一个窗体的实例传递给另一个窗体,例如通过在第二个窗体的构造函数中传递实例,则可以访问第一个窗体的所有公共属性

public class Form1 : Form
{
    public int Foo { get; set; }
}

public class Form2 : Form
{
    public Form2(Form1 form1) 
    {
        form1.Foo = 42;
    }
}
在代码的某个地方

Form1 f1 = new Form1();
Form2 f2 = new Form2(f1);
请注意,和模式以一种强大、通用的方式支持您正在尝试做的事情。WPF是围绕MVVM模式构建的,尽管您也可以实现MVC或MVVM

更新

在你刚刚发布的代码中

Main main = new Main();
main.showingTexturePacks = true;

您正在创建一个全新的Main实例。如果您想影响程序中已经存在的实例,您需要以某种方式传入已经存在的实例。

您的代码在哪里?我添加了代码的一部分您的代码在哪里?我添加了代码的一部分,就是:)我必须通过构造函数传递表单,以便更改变量。谢谢就是这样:)我必须通过构造函数传递表单,这样我才能更改变量。谢谢