Как передать динамические переменные в другую форму? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть две формы 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, которая меняет еезначение каждого таймера к 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);
}

I 'мы уже пытались получить доступ к переменной, вызвав Form1 из Form2

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.

Я хотел бы вызвать переменную изнутри (?) Метода

public Form1()

, чтобы я получил изменяемое значение, а не только 0.

Надеюсь, что это как бы описывает мою проблему.

Заранее спасибо!

1 Ответ

0 голосов
/ 20 июня 2019

Вам нужен доступ к экземпляру, где вы меняете значения. В вашем коде Form2 не знает ничего об этом экземпляре, кроме btnBoost и btnBreak. Вам необходимо предоставить ссылку на ваш 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.

...