如何将动态变量传递给另一种形式?

How to pass dynamic variables to another form?

我有两个表格 Form1 和 Form2,它们都已经 "connected" 在一起了。我已经在它们之间传递按钮信号、轨迹栏值、计时器滴答……。

Form1 中的连接如下所示:

private void Form1_Load(object sender, EventArgs e)
    {
        Form2 = new Form2(timer1,btnBoost,btnBrake);
        Form2.Show();
    }

在 Form2 内部:

public Form2(Timer timer,Button Boost,Button Brake)
    {
        InitializeComponent();
        _timer = timer;
        _boost = Boost;
        _brake = Brake;          
    }

现在我想将一个变量从 Form1 传递给 Form2,这个变量在每个时间点都改变它的值,以创建一个图表。

Form1 内部看起来像这样

public partial class Form1 : Form {

public double ValueThatIWant;

}

完成我给它一个值

private void Timer1_Tick1(object sender, EventArgs e){

ValueThatIWant = Math.Sqrt(somevalue.X,somevalue.Y);
}

我已经尝试通过从 Form2 调用 Form1 来访问变量

Form1.valueThatIWant

但自从

public double valueThatIWant

声明为 public,它的值始终为 0。

private void FillChart()
    {

       this.chart1.Series["Velocity"].Points.AddXY(time,Form1.ValueThatIWant);

    }

//That's the method I've created in Form2 to create a chart.

我想从里面调用变量(?)

public Form1()

方法,这样我就得到了变化的值,而不仅仅是0。

希望能描述我的问题。

提前致谢!

您需要访问您更改值的实例。在您的代码中,Form2 除了 btnBoostbtnBreak 之外, 对那个实例一无所知 。您需要向 Form2:

的构造函数提供对 Form1 实例的引用
public Form2(Timer timer, Form1 f1, Button Boost, Button Brake)
{
    InitializeComponent();
    _form1 = f1;
    _timer = timer;
    _boost = Boost;
    _brake = Brake;          
}

在您的 Form1 代码中,您现在需要:

private void Form1_Load(object sender, EventArgs e)
{
    Form2 = new Form2(timer1,this,btnBoost,btnBrake);
    Form2.Show();
}

而不是:

private void Form1_Load(object sender, EventArgs e)
{
    Form2 = new Form2(timer1,btnBoost,btnBrake);
    Form2.Show();
}

现在您可以在 Form2 内访问 _form1.ValueIWant

此外,您还可以从构造函数中省略这两个按钮,因为它们可能无论如何都是 Form1 的组件。在这种情况下,您需要在 Form1 public 属性中创建适当的字段,但是:

class Form1
{
    public Button BreakButton => btnBreak;
}

您现在可以通过哪种方式使用 _form1.BreakButton