Змінюй хід війни! Допомагай ЗСУ!

c# изненение объекта объявленной на главной форме с дочерней формы

  • Автор теми Автор теми Kvest
  • Дата створення Дата створення
а зачем его менять? для этого redaktiruemiyObj , как бы очевидно после присвоения...
 
да, забираю свои слова обратно, этот вариант сгодиться, но мне надо немного не то, я неправильно сформулировал цель, мне нужно по закрытию дочерней формы перехватывать изменения объекта на главную. Если действовать таким путем, то мне придется создавать еще 1 объект такого же типа а по закрытию формы копировать с него данные в redaktiruemiyObj, как то так, но мне вариант с делегатом все же больше понравился, там дополнительный объект создавать не требуется кроме того он не нарушит принцип инкапсуляции
 
мне нужно по закрытию дочерней формы перехватывать изменения объекта на главную. Если действовать таким путем, то мне придется создавать еще 1 объект такого же типа а по закрытию формы копировать с него данные в redaktiruemiyObj, как то так, но мне вариант с делегатом все же больше понравился, там дополнительный объект создавать не требуется кроме того он не нарушит принцип инкапсуляции

Непонимаю, зачем создавать новый обьект? Выполняеш манипуляции с redaktiruemiyObj , потом закрываеш дочернюю форму и всё. Что значит, перехватывать изменения? Главная форма отображает данные из этого обьекта, так? Значит при закрытии дочерней формы нужно просто сообщить в главную что обьект БЫЛ модифицирован и нужно перечитать данные. И никаких копий, зачем?
 
Непонимаю, зачем создавать новый обьект? Выполняеш манипуляции с redaktiruemiyObj , потом закрываеш дочернюю форму и всё. Что значит, перехватывать изменения? Главная форма отображает данные из этого обьекта, так? Значит при закрытии дочерней формы нужно просто сообщить в главную что обьект БЫЛ модифицирован и нужно перечитать данные. И никаких копий, зачем?

В принципе да, но мне нужно именно перехватывать объект в определенный момент (в момент нажатия кнопки ОК, после которого идет закрытие формы), то есть его редактирование в реальном времени нежелательно. Такая у меня ситуация.
 
То есть, до закрытия дочерней формы нельзя чтобы главная форма отображала какие-то изменения в обьекте? Или же до закрытия нельзя чтобы какие-то отдельные данные обьекта были фактически изменены, а только все скопом в момент Close() ? Это принципиальная разница.
 
Ну, тут я вижу 2 способа это сделать:
1) Дочерняя форма должна работать с копией такого обьекта. При закрытии, главная форма берёт эту ссылку копии и присваивает её ссылке на первичный обьект.

2) Сам обьект предусматривает такое поведение: В нём есть временные переменные, (которые дочерняя форма будет изменять). И в нём же есть метод (должен вызываться при закрытии формы), который все изменённые переменные присваивает скопом "рабочим переменным". Тогда копий обьекта не надо делать.

Можно подробнее, почему нельзя изменять данные по отдельности?
 
1) Дочерняя форма должна работать с копией такого обьекта.
однозначно. Реализуй интерфейс ICloneable и пользуйся.

Хотя я советую всетаки поправить родительскую форму таким образом чтобы она не рефрешила данные пока ты изменяешь объект
 
И все таки я больше склоняюсь к варианту вроде этого...


class MainForm
{

ChildForm c;

...
private void Apply()
{
...
myObj[myObj.count-1] = с.obj;
RefreshVisualInfo();
...
}


...
private void buttonNewObjAdd(...)
{
...
c = new ChildForm(Apply);
c.Show();
...
}

...

}





class ChildForm
{

private delegate void p();
p a;
....


ChildForm (p method)
{
a = method;
}

...

buttonOk_click()
{
a(); //В этот момент и будем забирать объект и рефрешить отображаемую инфу
this.Close();
}
...
}

Можно подробнее, почему нельзя изменять данные по отдельности?

попробую объяснить. Эта форма (дочерняя) будет использоваться в двух случаях: для создания и для редактирования объекта. Так вот когда для создания она будет вызываться есть вариант что пользователь просто не создаст объект а передумает и закроет форму. Конечно можно объект удалять в этой ситуации, но рациональней будет его создавать уже тогда, когда пользователь все вводит правильно и жмет кнопочку ОК. Вот поэтому я и хочу сделать через вызов метода главной формы с которым связан делегат на дочерней
 
Останнє редагування:
Назад
Зверху Знизу