Технологии
Решено
Реализация события при изменении свойств обьекта (C#, WPF) - вопрос №311363
Есть формы OuterForm(Внешняя форма) и InnerForm(Внутренняя форма), внутренняя вызывается по нажатию баттона на внешней. Есть обьект MyObject с тремя свойствами A, B, C и полями a, b, c соответственно, который обьявлен в OuterForm и передается в качестве параметра в InnerForm. Ввести данные для изменения обьекта и изменить его можно только в InnerForm нажатием кнопки «Применить».
Вопрос: Как написать такое событие для
Дополнение автора от июль 24, 2012 г., 17:52:33
Пока я добился только того, что при изменении отдельного поля (сеттеры указывают на поля) срабатывает событие. Проблема состоит в том, что мне не надо, чтобы оно каждый раз срабатывало, то есть 3 раза вместо одного :)
Если сделать так, чтобы событие срабатывало только если все поля изменятся — тоже не прокатит, ибо возможно, пользователь изменит только 2 свойства — 2 это не есть 3 — потому событие не сработает. А нужно чтобы сработало.
Главное — достигнуть цели, если получится, то можно и без событий обойтись.
Александр июль 24, 2012 г.
-
Всего ответов: 4
-
по этому обьяснению не понятно что именно Вы хотите отлавливать и как?
просторо для творчества тут безграничный
если интересуют события только в дочерней форме — вообще нет смысла насиловать обьект, все можно отследить на событиях изменения полей ввода и нажатия кнопок «применить» и «отмена»
если свойства обьекта могут изменяться из других форм или програмно — тогда есть смысл отслеживать события изменений, но нет ни какой проблемы создавать 3 разных события
на пример когда Вы создаете новую форму — это тоже обьект, и если на ней 3 разных текстбокса, из изменения повлекут возникновение 3х разных событий
ведь такой подход не вызывает у Вас сомнений как работать с экранной формой?
так что природа проблемы все еще не понятна
Вы определитесь какую конечную цель преследуете?
отследить изменение каждого отдельного свойства?
или по окончанию обработки обьекта в дочерней форме, получить сведения о том какие свойства были изменены?
в последнем случае опять не нужно насиловать обьект — при изменение одних только полей ввода (чекбоксов или иных контролов), дочерняя форма получает знание, что есть изменения которые можно применить
на момет закрытия, форма без проблем может имееть занние о том отвергнуты изменения или применены?
и нет ни каких проблем перед закрытим сформировать отчет об итогах в таком формате в котором он нужен, и передать в вызывающую форму
Лучший ответ по мнению автора -
если обьясните предметно, ответ может оказаться совсем другим
возможно Ваша проблема типовая и имеет типовое решение
-
Более конкретный пример:
Есть та же внутренняя и внешняя форма, класс, который инкапсулирует в себе данные о пользователе: сервер, логин, пароль.
Если мы зайдем во внутреннюю форму, изменим данные(будь это либо одно поле, либо все) и нажмем «Применить»(При нажатии на данную кнопку после применения изменений форма закрывается) — на внешней форме должен остановиться поток, создаться и начаться новый. Эту работу с потоками я хочу реализовать так: при инициализации внешней формы PersonObject += WokrWithWreads; (Работа с потоками)
-
подозреваю что нет прямой связи между характером реакции на события — запускаете ли Вы потоки или останвливаете, или иные действия
Вам нужно уложить в голове взаимосвязи событий-причин и событий-следтсвий происходящих в формах
строго говоря я уже все сказал, раз у Вас не получается интерпретировать сказанное — давайте проект, в коде будет проще показать
ps конкретика в данном случае это:
— WPF или WinForms?
— модальный вызов формы или не модальный?
… и так далее
-
если Вы еще не в курсе — событийная модель это свойство интерфейса
для WPF своя реализация, для WinForms своя
на обьект (экземпляр класса) из предметной области, в принципе не следует распространять такй же стиль мышления как на интерфейс
по всей видимости основная Ваша проблема в данном случае в этом
так что все что Вам реально нужно, уже сказано в первом моем ответе на этот вопрос
Похожие вопросы
Ускорить программу на C# с использованием Windows Form. Консультация по работе с Windows Forms и serialPort
октябрь 3, 2023 г.