Постійний збір на дрони FPV для ЗСУ
Закидуй дві гривні!
FPV-дрони змінюють хід війни
Змінюй хід війни!

C# Передача параметров между формами

🔴 19:05 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 27.11.2008
Повідом.: 87
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #1
C# Передача параметров между формами

Собственно необходимо передать параметры между формами, чтоб сначала одна форма отработала, а потом передала параметры дальше и закрылась. Что-то типа следующего.
Код:
        [STAThread]
        static void Main()
        {
            List<Client> clients = new List<Client>();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new NewWindow(clients));
            Application.Run(new MainWindow(clients));
        }

так вот конструкторы форм ругаются:

error CS0051: Inconsistent accessibility: parameter type 'ServerWinForms.Client' is less accessible than method 'ServerWinForms.NewWindow.NewWindow(ServerWinForms.Client)'

почему они ругаються?
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #2
Собственно необходимо передать параметры между формами, чтоб сначала одна форма отработала, а потом передала параметры дальше и закрылась.

Код:
        [STAThread]
        static void Main()
        {
            // тут нельзя вставлять код! это важно! Иначе нарушится работа контролов
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            List<Client> clients = new List<Client>();
            using(NewWindow newWnd = NewWindow())
            {
               newWnd.SetClientList(clients);  // передали форме данные
               if(newWnd.ShowDialog()!=DialogResult.OK)
                  return;
               clients = newWnd.GetClients(); // забрали у формы данные
            }
            using(NewWindow newWnd = NewWindow())
            {
               newWnd.SetClientList(clients);  // передали форме данные
               if(newWnd.ShowDialog()!=DialogResult.OK)
                  return;
               clients = newWnd.GetClients(); // забрали у формы данные
            }
        }

так вот конструкторы форм ругаются:

error CS0051: Inconsistent accessibility: parameter type 'ServerWinForms.Client' is less accessible than method 'ServerWinForms.NewWindow.NewWindow(ServerWinForms.Client)'

почему они ругаються?

потому что твой класс Client имеет меньшую область видимости чем метод NewWindow.NewWindow. Скорее всего Client объявлен как internal, а класс NewWindow как public.

Однако передавать данные контролам через конструктор в корне неправильный подход. Хотя это и будет работать, но через жопу и является ярким образцом как делать не нужно! За такое по башке полагается давать.
Дизайнер Visual Studio такое не переваривает. У контрола всегда должен быть конструктор без параметров!
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #3
Ваша оценка снижена до миниума.Форма есть структура,поля которой определяют ее вид.Снабдив ее конструктором,разработчики разрешили проблему,которая могла бы возникать при ее образовании(вспомним,что он всегда формируется по умолчанию) а также возможность изменять нужные поля,не затрагивая все,формируемые по умолчанию.
Формируя форму,мы создаем экземпляр класса, и тем самым организуем физический процесс.Две формы есть два процесса,и обмен между ними происходит через специальные средства.Взять поле с одной формы и вставить в поле другой формы невозможно,находясь в процессе одной из форм.
Клез примет оценку 2++.
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #4
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #5
бред сивой кобылы, это вполне возможно.
Тут четко один плюс уходит.
Вы постоянно создаете на форуме негативную риторику ,более того ведете заведомо неправильное суждение то ли по причине далекого расположения от истинности физических процессов,то ли по собственному опыту,рекламирующему недостойное поведение,стремительно ведущее к краху личности и общественно-производственного труда как формы ,устанавливающей общее взаимодействие.
Отмеченное вами предложение обьясняет использование средств изменения или обновления уже сконструированных форм,которые позволяют также и взять поля одной формы и передать в другую.
Они и есть в ваших писюльках.Применение конструкторов для таких преобразований может вызвать потерю данных ранеее сконструированных полей данных а также привести к загаживанию ОП.
Если вам кажется,что вы практик,вы далеко ошибаетесь.Но я рад,что вы начинаете немного думать.
 
Останнє редагування:
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #6
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #7
Код:
        [STAThread]
        static void Main()
        {
            // тут нельзя вставлять код! это важно! Иначе нарушится работа контролов
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            List<Client> clients = new List<Client>();
            using(NewWindow newWnd = NewWindow())
            {
               newWnd.SetClientList(clients);  // передали форме данные
               if(newWnd.ShowDialog()!=DialogResult.OK)
                  return;
               clients = newWnd.GetClients(); // забрали у формы данные
            }
            using(NewWindow newWnd = NewWindow())
            {
               newWnd.SetClientList(clients);  // передали форме данные
               if(newWnd.ShowDialog()!=DialogResult.OK)
                  return;
               clients = newWnd.GetClients(); // забрали у формы данные
            }
        }



потому что твой класс Client имеет меньшую область видимости чем метод NewWindow.NewWindow. Скорее всего Client объявлен как internal, а класс NewWindow как public.

Однако передавать данные контролам через конструктор в корне неправильный подход. Хотя это и будет работать, но через жопу и является ярким образцом как делать не нужно! За такое по башке полагается давать.
Дизайнер Visual Studio такое не переваривает. У контрола всегда должен быть конструктор без параметров!


Спосибо большое. Вы еще раз мне все прояснили.:клас:

P.S. Посоветуйте чтонибуть почитать по управлению сериализацией.:)
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #8
Спосибо большое. Вы еще раз мне все прояснили.:клас:

P.S. Посоветуйте чтонибуть почитать по управлению сериализацией.:)

а что тут читать, сериализация - это банальное сохранение переменных объекта в поток. Все по сути сводится записи примитивных значений типа int/float/string в поток и чтении обратно. Для агрегированных объектов можно вызывать их собственную сериализацию.
Обычно используется сериализация в поток (System.IO.Stream) или в XML (System.Xml.XmlNode).

XML удобен тем что позволяет легко просмотреть и отредактировать содержимое сериализованных объектов, а также передавать и манипулировать сериализованными данными как строкой, что опять-же удобно тем что сразу видно что сериализовано. Также XML удобно использовать для взаимодействия между разными системами на разных платформах и т.п. Т.е. это как-бы универсальный формат хранения. Минус только один - плохо будет себя показывать при хранении громоздких структур данных (видео/аудио записи и т.п.) - много места будет занимать.

Я бы тебе рекомендовал почитать литературу по архитектуре, различные faq по проектированию, уж больно много банальных граблей делаешь :)
 
Останнє редагування:
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #9
Я бы тебе рекомендовал почитать литературу по архитектуре, различные faq по проектированию, уж больно много банальных граблей делаешь :)

Первое мое боле менее реальное приложение. По программе обучения залез далеко вперед, и поэтому много боков. Я и так вижу что кривовато... :confused: Поэтому читать хочиться хорошие книги.

Что почитать по проектированию?
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #10
Две формы есть два процесса,и обмен между ними происходит через специальные средства.Взять поле с одной формы и вставить в поле другой формы невозможно,находясь в процессе одной из форм.
Однако здесь данные передаются не "в процессе одной из форм", а в процессе Main(). И как раз Klez показал как не трогать конструкторы форм. Зачем же претензии, а главное: куда?
 
  • 🔴 19:05 Повітряна тривога в Харків.обл.
  • #11
Я доволен работой Губителя ,большое ему спасибо,мне будет легче в дальнейшем работать.Единственное,что он плохо разобрался в футболе.Но главное,чтобы погода была солнечная и склоны озеленели.
 
Назад
Зверху Знизу