Как создать свойство "изменение переменной"?
У меня есть переменная X, и я хочу, чтобы когда в Form2 эта переменная меняется, в Form1 сразу же менялся размер кнопок. Как я могу это осуществить?
Источник: Stack Overflow на русском
У меня есть переменная X, и я хочу, чтобы когда в Form2 эта переменная меняется, в Form1 сразу же менялся размер кнопок. Как я могу это осуществить?
Эту переменную нужно создать как свойство и в методе set свойства вызывать событые. Form1 должна подписаться на это событие. Как только значение переменной будет меняться, будет происходит соотвествующее событие, и вызываться все обработчики, которые подписаны на это событие.
Вот простой пример, который демонcтрирует эту технику:
using System;
using System.Threading.Tasks;
namespace VariableTrackingDemo {
static class Globals {
public static EventHandler VarToTrack_Changed;
static int val;
public static int VarToTrack {
get { return val; }
set {
val = value;
// в C# 5.0 "?." нет, поэтому просто проверяем на
// не нуль, это же хорошая мысль
if (VarToTrack_Changed != null) VarToTrack_Changed(val, new EventArgs());
}
}
}
class VariableTracking {
// это обработчик события, который делает что-то нужное
// обработчиков может быть много в разных местах
static void evhndlr(object sender, EventArgs e) {
Console.WriteLine(sender.ToString());
}
static void Main() {
// здесь обработчик подписывается на нужное событие
Globals.VarToTrack_Changed += evhndlr;
// Globals.VarToTrack_Changed += evhndlr1; ещё один подписали, если нужно
string s;
while ((s = Console.ReadLine()) != "") Globals.VarToTrack = Convert.ToInt32(s);
// в форме и других нестатических объектах нужно удалять подписку
Globals.VarToTrack_Changed -= evhndlr;
}
}
}