Как перенести объекты между окнами формы в C # - PullRequest
0 голосов
/ 08 августа 2009

Я получил ListView в форме окна. Когда форма загружает загрузку ListView с личными объектами. Я хочу сделать, когда некоторые пользователи дважды щелкают на ListView, получают объект personel из свойства ListView.SelectedItem, открывают новую форму и переносят этот объект во вновь открытую форму.

вот мои коды для загрузки личных объектов в ListView:

public static void GetAll(ListView list)
{
    list.Items.Clear();
    using (FirebirdEntityz context = new FirebirdEntityz())
    {
        ObjectQuery<PERSONEL> query = context.PERSONEL;
        foreach (var item in query)
        {
            var mylist = new ListViewItem { Text = item.NAME };
            mylist.SubItems.Add(item.SURNAME);
            mylist.Tag = item;
            list.Items.Add(mylist);
        }
    }
}

private void Form1_Load(object sender, EventArgs e)
{                     
    GetAll(listView1);
}

Это мой личный объект для перевода:

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    PERSONEL personel = (PERSONEL)listView1.SelectedItems[0].Tag;
}

Ответы [ 4 ]

3 голосов
/ 08 августа 2009

Возможно, вы просто добавите в форму общедоступное свойство PERSONEL, которое затем зададите в обработчике событий SelectedIndexChanged. Тогда любой код, имеющий доступ к вашей форме выбора, может получить доступ к выбранному вами свойству PERSONEL.

2 голосов
/ 08 августа 2009

В открывшейся новой форме добавьте новое свойство в классе формы;

private PERSONNEL Personnel{get; set;}
public ShowPersonnel(PERSONNEL _personnel){
   this.Personnel = _personnel;
   //do whatever you want here
}

в основной форме;

private void listView1_SelectedIndexChanged(object sender, EventArgs e){
        PERSONNEL personnel = listView1.SelectedItems[0].Tag as PERSONNEL;
        Form2 form2 = new Form2();
        form2.ShowPersonnel(personnel);
        form2.Show();

}

Может включать опечатки. Изменить ПЕРСОНАЛ на ПЕРСОНАЛ.

1 голос
/ 08 августа 2009
  • Одним из способов является публичная собственность как предположил Фактор Мистик.
  • Или у вас может быть параметризованный ctor и передать объект персонала. Хотя, это может создать некоторые проблемы с представление дизайна формы в Visual Студия.
0 голосов
/ 08 августа 2009

Вы должны быть в состоянии установить элемент отображения элемента управления просмотра списка. Прежде чем войти в цикл for, сделайте что-то вроде:

list.DisplayMember = "Name"

Тогда связывай объект.

list.DataSource = query.ToList()

Выбранный предмет даст вам объект, который вы связали ...

MessageBox.Show(((PERSONEL)list.SelectedItem).Name);

Так было в .net 2.0. Но я уверен, что, вероятно, есть способ сделать это в версии 3.0 и выше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...