Опция 1
Передайте ссылку на метку обратного отсчета в Form1
на Form2
, используя ее конструктор, затем используйте эту ссылку, чтобы подписаться на событие TextChanged
метки:
In Form1
:
private int CountDown = 100;
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this.[The Counter Label]);
form2.Show();
this.timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.[The Counter Label].Text = CountDown.ToString();
if (CountDown == 0)
this.timer1.Enabled = false;
CountDown -= 1;
}
In Form2
:
public form2() : this(null) { }
public form2(Control timerCtl)
{
InitializeComponent();
if (timerCtl != null) {
timerCtl.TextChanged += (s, evt) => { this.[Some Label].Text = timerCtl.Text; };
}
}
Вариант 2
Используйте открытое свойство Form2
, для которого можно установить ссылку на элемент управления.Установите это свойство в Form1
сразу после создания нового экземпляра Form2
.
Однако это означает, что Form1
необходимо знать об этом свойстве в Form2
:
В Form1
:
private int CountDown = 100;
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
form2.CountDownControl = this.[The Counter Label];
this.timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.[The Counter Label].Text = CountDown.ToString();
if (CountDown == 0)
this.timer1.Enabled = false;
CountDown -= 1;
}
В Form2
:
private Control timerCtl = null;
public Control CountDownControl {
set { this.timerCtl = value;
if (value != null) {
this.timerCtl.TextChanged += (s, evt) => { this.[Some Label].Text = timerCtl.Text; };
}
}
}
Существует множество других опций.
Вы также можете использовать Публичное свойство в Form2
и установить это свойство непосредственно из события Timer.Tick
.Открытое свойство, как и во втором примере, может установить для свойства Text одного из его элементов управления значение свойства.
Мне не очень нравится этот параметр, тем не менее, он доступен.
В Form1
:
private int CountDown = 100;
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
this.timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
this.[The Counter Label].Text = CountDown.ToString();
form2?.CountDownValue = CountDown;
if (CountDown == 0)
this.timer1.Enabled = false;
CountDown -= 1;
}
В Form2
:
public int CountDownValue {
set { this.[Some Label].Text = value.ToString(); }
}
}
Вы также можете иметьпользовательское событие в Form1
, которое Form2
может подписать или реализовать INotifyPropertyChange
.Но это то же самое, что и вариант1.