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

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

🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #21
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #22
а зачем его менять? для этого redaktiruemiyObj , как бы очевидно после присвоения...
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #23
да, забираю свои слова обратно, этот вариант сгодиться, но мне надо немного не то, я неправильно сформулировал цель, мне нужно по закрытию дочерней формы перехватывать изменения объекта на главную. Если действовать таким путем, то мне придется создавать еще 1 объект такого же типа а по закрытию формы копировать с него данные в redaktiruemiyObj, как то так, но мне вариант с делегатом все же больше понравился, там дополнительный объект создавать не требуется кроме того он не нарушит принцип инкапсуляции
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #24
мне нужно по закрытию дочерней формы перехватывать изменения объекта на главную. Если действовать таким путем, то мне придется создавать еще 1 объект такого же типа а по закрытию формы копировать с него данные в redaktiruemiyObj, как то так, но мне вариант с делегатом все же больше понравился, там дополнительный объект создавать не требуется кроме того он не нарушит принцип инкапсуляции

Непонимаю, зачем создавать новый обьект? Выполняеш манипуляции с redaktiruemiyObj , потом закрываеш дочернюю форму и всё. Что значит, перехватывать изменения? Главная форма отображает данные из этого обьекта, так? Значит при закрытии дочерней формы нужно просто сообщить в главную что обьект БЫЛ модифицирован и нужно перечитать данные. И никаких копий, зачем?
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #25
Непонимаю, зачем создавать новый обьект? Выполняеш манипуляции с redaktiruemiyObj , потом закрываеш дочернюю форму и всё. Что значит, перехватывать изменения? Главная форма отображает данные из этого обьекта, так? Значит при закрытии дочерней формы нужно просто сообщить в главную что обьект БЫЛ модифицирован и нужно перечитать данные. И никаких копий, зачем?

В принципе да, но мне нужно именно перехватывать объект в определенный момент (в момент нажатия кнопки ОК, после которого идет закрытие формы), то есть его редактирование в реальном времени нежелательно. Такая у меня ситуация.
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #26
То есть, до закрытия дочерней формы нельзя чтобы главная форма отображала какие-то изменения в обьекте? Или же до закрытия нельзя чтобы какие-то отдельные данные обьекта были фактически изменены, а только все скопом в момент Close() ? Это принципиальная разница.
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #27
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #28
Ну, тут я вижу 2 способа это сделать:
1) Дочерняя форма должна работать с копией такого обьекта. При закрытии, главная форма берёт эту ссылку копии и присваивает её ссылке на первичный обьект.

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

Можно подробнее, почему нельзя изменять данные по отдельности?
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #29
1) Дочерняя форма должна работать с копией такого обьекта.
однозначно. Реализуй интерфейс ICloneable и пользуйся.

Хотя я советую всетаки поправить родительскую форму таким образом чтобы она не рефрешила данные пока ты изменяешь объект
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #30
И все таки я больше склоняюсь к варианту вроде этого...


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();
}
...
}

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

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