Как создать свойство "изменение переменной"?

Рейтинг: 0Ответов: 1Опубликовано: 25.05.2023

У меня есть переменная X, и я хочу, чтобы когда в Form2 эта переменная меняется, в Form1 сразу же менялся размер кнопок. Как я могу это осуществить?

Ответы

▲ 0Принят

Эту переменную нужно создать как свойство и в методе 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;
        }
    }
}