Member 14093842 Ответов: 4

Как перенести данные из одного окна в другое с помощью списков.


Привет,

Я пытаюсь перенести свои данные из списка, который пользователь ввел в другой список на другой странице. Например, я хочу, чтобы идентификатор из Window1 Listbox1 был перенесен в Window2 Listbox2. Я создал класс для хранения данных, но не знаю, как их передать. (Edit я не знаю ни одного кода о том, как перенести идентификатор из одного окна в другое)

С уважением

Что я уже пробовал:

Класс:

class TrainF
    {
        private List<TrainF> _list = new List<TrainF>();

        public void Add(TrainF Details)
        {
            _list.Add(Details);
        }



        //Setting the data for the train booking to be stored.
        private string TrainID;
        public string ID
        {
            get
            {
                return TrainID;
            }
            set
            {
                TrainID = value;
            }
        }



Основной код:
TrainF aPerson = new User();
            aPerson.ID = ID.Text;

try
           {
               if (TxtTrainID.Text == "")
               {
                   throw new System.ArgumentException("You must enter your a train ID");
               }
           }
           catch (ArgumentException ex)
           {
               MessageBox.Show(ex.Message);
           }
           LstTrain.Items.Add(TxtTrainID.Text);

4 Ответов

Рейтинг:
2

0x01AA

Здесь вы найдете основное обсуждение вашего запроса: Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]


Рейтинг:
1

Luc Pattyn

Правильный способ справиться с этим в целом-отделить бизнес-логику, то есть основы вашего домена приложений, от всего пользовательского взаимодействия.

Это средство:
- создание соответствующих структур данных (с использованием одного или нескольких классов) для представления вашего бизнеса; это не зависит от форм, элементов управления и т. д.
- передайте эти структуры данных тем формам, которые в них нуждаются.

Объединение бизнеса и взаимодействия неизбежно приведет к созданию недостижимого кода, если не к одному большому беспорядку.

Как абсолютный минимум, используйте свойства, описанные OriginalGriff в его серии из 3 статей (ссылки на которые приведены в решениях 2 и 3), для передачи бизнес-данных. Не проходите контроль, так как это создаст сложные взаимозависимости между вашими формами, которые неизбежно будут развиваться с течением времени.

:)


Рейтинг:
1

RickZeeland

Для меня самый простой способ-это использовать Статический класс со свойствами, которые могут быть доступны обеим формам, вы даже можете использовать Program.cs для этой цели.
Объяснение см. здесь: https://www.dotnetperls.com/static[^]

static class Train
{
    public static string Id { get; set; }
}


BillWoodruff

Мой голос №3 (который я не считаю отрицательным голосованием): я думаю, что для новых/новых студентов использование статического класса не является хорошей идеей; имхо, это не помогает в будущем понимании и использовании SOLID. Это обходной путь, чтобы получить глобальные переменные "дешево."

Однако я думаю, что некоторые сценарии проектирования приложений значительно выигрывают от использования статического класса, который функционирует как "коммутатор"; аналогично "контроллеру" в шаблоне MVC. Но это выходит за рамки данной темы.

Я думаю, что идея использования внутреннего класса программы для этого на самом деле плохая идея: это хак.

RickZeeland

Я согласен, что использование Program.cs немного быстро и грязно, но я думаю, что упоминание статики информативно, потому что некоторые новички, похоже, не знают, что такое статика и что это такое !

BillWoodruff

Привет Рик, я думаю, что подходящее использование 'static предназначено для: библиотек связанных функций, которые не имеют внешних зависимостей; методов расширения, как части реализации синглтона.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members

также: https://stackoverflow.com/a/241372

имхо, в контексте этого вопроса, я думаю, упоминание ;статика может просто запутать плакат.

.. и, возможно, я: смертельно ошибаюсь :)

Рейтинг:
0

BillWoodruff

Существует множество способов структурирования обмена данными между формами. Какой из них вы выберете, может включать в себя взаимодействие с пользователем (показ модально), необходимость проверки пользовательского ввода и т. д.

OriginalGriff имеет большую серию из трех статей здесь о форме для взаимодействия и обмена данными: [^]

Смотреть также: [^]

Вот один из способов:

Предполагая,:

1. У вас есть две формы

2. Одна из них является основной формой

3. другая форма создается во время выполнения основной формой

В главной форме:

private OtherForm otherForm;

private ListBox otherFormListBox;

private void MainForm_Load(object sender, EventArgs e)
{
     otherForm = new OtherForm;
     otherFormListBox = otherForm.OFListBox; 

     otherForm.Show(); // show it here ?  
}

public void TransferData()
{
     // do the right thing
}
В другой форме:
public ListBox OFListBox;

private ListBox otherFormListBox;

private void OtherForm_Load(object sender, EventArgs e)
{
     otherForm = new OtherForm;
     OFListBox = listBox1;
}
В этом примере вы открываете список в другой форме, чтобы основная форма могла получить к нему доступ.