Как я могу взять элементы из списка и отобразить их в виде списка в другой форме? - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть список, полный пунктов для моего заказа.

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

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

Мой новый просмотр списка:

private void CustomerInfo_Click(object sender, EventArgs e)
    {
        ListViewItem customers = new ListViewItem(fullName.Text);

        customers.SubItems.Add(totalcount.ToString());
        customers.SubItems.Add(total.ToString());
        customers.SubItems.Add(Address.Text);
        customers.SubItems.Add(telephone.Text);
        for (int i = 0; i < OrderlistBox.Items.Count; i++)
        {
            customers.SubItems.Add(OrderlistBox.Items[i].ToString());
        }

        Customers.Items.Add(customers);

        //CLEAR ALL FIELDS
        OrderlistBox.Items.Clear();
        fullName.Text = "";
        Address.Text = "";
        telephone.Text = "";
        totalDue.Text = "";
        totalItems.Text = "";
    }

Мой contextMenuStrip, поэтому, когда я нажимаю на клиента, я могу получить его информацию (имя, адрес), порядок и т. д.):

private void customerInformationToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (Customers.SelectedItems.Count != 0)
        {
            var myformmessagedialog = new MessageBoxForm
            {
                name = Customers.SelectedItems[0].SubItems[0].Text,
                address = Customers.SelectedItems[0].SubItems[3].Text,
                telephone = Customers.SelectedItems[0].SubItems[4].Text,
            };
            myformmessagedialog.ShowDialog();
        }
    }

Моя новая форма, окно сообщения, в котором я буду отображать всю информацию для клиента:

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

    public string name;
    public string address;
    public string telephone;
    public ListViewItem order = new ListViewItem();

    private void MessageBoxForm_Load(object sender, EventArgs e)
    {

        lblName.Text = name;
        lbladdress.Text = address;
        lbltelephone.Text = telephone;

        orderListView.Items.Add(order);
    }
}

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

Ответы [ 5 ]

4 голосов
/ 12 декабря 2011

Один из способов сделать это - поместить данные, которые вы хотите отобразить, в какой-то вид ViewModel, в основном это класс или набор классов, в которых есть данные, которые вы хотите отобразить. Затем основная форма может отобразить ее, и вы можете передать ссылку на эту ViewModel в окно сообщения, и она также может отобразить ее.

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

1 голос
/ 12 декабря 2011

Самый простой способ, основанный на ваших текущих настройках, - это просто передать данные представления списка на ваш MessageBoxForm, например,

public partial class MessageBoxForm : Form
{
    ...

    public void LoadListView(ListViewItemCollection items)
    {
        orderListView.Clear();
        orderListView.AddRange(items);
    }
}

....

private void customerInformationToolStripMenuItem_Click(object sender, EventArgs e)    
{    
    if (Customers.SelectedItems.Count != 0)    
    {    
        var myformmessagedialog = new MessageBoxForm    
        {    
            name = Customers.SelectedItems[0].SubItems[0].Text,    
            address = Customers.SelectedItems[0].SubItems[3].Text,    
            telephone = Customers.SelectedItems[0].SubItems[4].Text,    
        };
        myformmessagedialog.LoadListView(Customers.Items);
        myformmessagedialog.ShowDialog();    
    }    
} 
1 голос
/ 12 декабря 2011

Основной ответ - нет.

Вы ведете коллекцию предметов (какими бы они ни были).

Вы отображаете их в списке.

Вы отображаете их в виде списка.

Если вы хотите сказать, выберите некоторые из списка и переместите их только в представление списка.

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

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

0 голосов
/ 12 декабря 2011

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

myformmessagedialog.ShowDialog();

становится

myformmessagedialog dialog = new myformmessagedialg(this);
dialog.ShowDialog();

и ваш конструктор класса становится таким:

public MessageBoxForm(myformmessagedialog parent){
    name=parent.fullName.Text;
    address=parent.address.Text;
    ...etc...
    InitializeComponent();
}

Хотя может быть лучше просто передать имя, адрес и т. Д., А не всю форму, этот способ удобен, когда вы меняете вещи, потому что у вас меньше места для изменения, чтобы добавить другую переменную для передачи.

0 голосов
/ 12 декабря 2011

Я предполагаю, что вам нужно (и я мог неправильно понять, что вы ищете) - это новый метод в вас MessageBoxForm для передачи вашего Customers объекта:

private void customerInformationToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (Customers.SelectedItems.Count != 0)
    {
        var myformmessagedialog = new MessageBoxForm;
        myformmessagedialog.Customers = Customers;
        if (myformmessagedialog.ShowDialog() == DialogResult.OK)
        {
          Customers = myformmessagedialog.Customers;
        }
    }
}

Если это так, просто измените ваш класс так:

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

  private void MessageBoxForm_Load(object sender, EventArgs e)
  {
    if (Customers != null) 
    {
      // add your code here to add your Customers as needed
    }
  }

  public Customers Customers { get; set; }

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