Добавить в список из другой формы - PullRequest
0 голосов
/ 20 июня 2010

Мне интересно, как я могу обновить свой просмотр списка в форме 1, вводя данные через текстовые поля в форме 2. Мой код работает нормально, если я помещаю все текстовые поля в одну форму и т. Д.

Я подумал, что мне нужна ссылка на первую форму 2-го числа, но не могу заставить ее работать.

Любые советы для правильного направления меня будут хорошими, также как и любые советы для лучшего способа сделать это.

Это код, который у меня есть:

Form1:

public partial class form1 : Form
    {
        public form1()
        {
            InitializeComponent();
        }

        public ListView MyListView
        {
            get
            {
                return taskList;
            }
        }

Form2:

public partial class form2 : Form
    {
        public form2()
        {
            InitializeComponent();
        }

        form1 f;

        public add(form1 f)
        {
            this.f = f;
        }        

        public void AddToList()
        {
                ListViewItem item1 = new ListViewItem(txtName.Text);
                item1.SubItems.Add(txtEmail.Text);
                item1.SubItems.Add(txtPhone.Text);
                f.MyListView.Items.AddRange(new ListViewItem[] { item1 });
        }

Ответы [ 3 ]

3 голосов
/ 20 июня 2010

Самый прямой способ сделать это - использовать события.Вы можете добавить событие на form2, которое будет срабатывать при каждом добавлении элемента и включать в себя текст, который нужно вставить (у вас есть несколько фрагментов информации, поэтому подойдет пользовательский тип данных).Затем вы можете добавить метод-обработчик к form2, который добавляет элемент в его ListView.Затем вы связываете их вместе в коде, который создает две формы, и жизнь должна быть хорошей.

Итак, чтобы предоставить некоторый код, в первую очередь структура данных для события:

public delegate void HandleItemAdded(object sender, ItemAddedEventArgs e);    

public struct ItemAddedEventArgs : EventArgs
{
    public string Name;
    public string Email;
    public string Phone;

    public ItemAddedEventArgs(string name, string email, string phone)
    {
        Name = name;
        Email = email;
        Phone = phone;
    }
}

Тогда у нас есть код события на form2

public event HandleItemAdded ItemAdded;
// .. some other stuff
public void RaiseItemAdded(ItemAddedEventArgs e)
{
    if(ItemAdded != null)
        ItemAdded(this,e);
}

// ... now for your AddToList
public void AddToList()
{

    RaiseItemAdded(new ItemAddedEventArgs(txtName.Text,txtEmail.Text, txtPhone.Text);
}

И теперь мы можем добавить обработчик в form1

public void HandleItemAdded(object sender, ItemAddedEventArgs e)
{
    ListViewItem item1 = new ListViewItem(txtName.Text);
    item1.SubItems.Add(txtEmail.Text);
    item1.SubItems.Add(txtPhone.Text);
    MyListView.Add(item1);
}

И, наконец, нам нужносвязать их вместе

//...not sure what your code looks like, but we'll assume we have instances of the two forms named form1Form and form2Form
form2Form.ItemAdded += form1Form.HandleItemAdded
0 голосов
/ 20 июня 2010

Если form2 не создана и не отображается form1, у вас не будет ссылки на вызов.В этом случае все станет немного интереснее с точки зрения коммуникации.Когда это произойдет, вам нужно будет использовать модель событий для передачи информации из одного места в другое.

0 голосов
/ 20 июня 2010

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

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