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

时间:2019-06-20 09:51:58

标签: c# forms public

我有两个Form1和Form2表单,它们已经相互“连接”了。我已经在它们之间传递了按钮信号,轨迹栏值,计时器刻度...。

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传递一个变量,该变量将每个timertick的值更改为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

被宣布为公开,其值始终为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.

我想从inside(?)调用变量

public Form1()

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

希望这能描述我的问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要访问更改值的实例。在您的代码中,Form2除了btnBoostbtnBreak之外不知道有关该实例的任何信息。您需要将Form1实例的引用提供给Form2的构造函数:

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();
}

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

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

class Form1
{
    public Button BreakButton => btnBreak;
}

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