如何将动态变量传递给另一种形式?
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
除了 btnBoost
和 btnBreak
之外, 对那个实例一无所知 。您需要向 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
。
我有两个表格 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
除了 btnBoost
和 btnBreak
之外, 对那个实例一无所知 。您需要向 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
。