Скопируйте текст из списка в другую winform - PullRequest
0 голосов
/ 27 сентября 2011

Я действительно застрял с этим, поэтому я надеюсь, что кто-то может помочь.У меня есть 2 winforms, одна имеет просмотр списка, а другая имеет текстовое поле.Я хочу проверить, какой элемент отмечен в списке, и скопировать этот текст во вторую форму.Я пробовал этот код, но он не будет работать, любая помощь очень ценится!

// 1st form

private void button5_Click(object sender, EventArgs e) // Brings up the second form
{
   Form4 editItem = new Form4();
   editItem.Show();
} 

public string GetItemValue()
{
   for (int i = 0; i < listView1.Items.Count; i++)
   {
      if (listView1.Items[i].Checked == true)
      {
         return listView1.Items[i].Text;
      }
   }
   return "Error";
}

// 2nd form

private void Form4_Load(object sender, EventArgs e)
{
   Form1 main = new Form1();
   textBox1.Text = main.GetItemValue();
}

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Вы создаете новый Form1 внутри Form4 после его загрузки. Вам нужна ссылка на оригинал Form1. Это может быть выполнено несколькими способами, возможно, самым простым является передача ссылки в конструктор Form4.

// Form 1

// This button creates a new "Form4" and shows it
private void button5_Click(object sender, EventArgs e)
{
   Form4 editItem = new Form4(this);
   editItem.Show();
} 

public string GetItemValue()
{
   for (int i = 0; i < listView1.Items.Count; i++)
   {
      if (listView1.Items[i].Checked == true)
      {
         return listView1.Items[i].Text;
      }
   }
   return "Error";
}

-

// Form 2 (Form4)

// Private member variable / reference to a Form1
private Form1 _form;

// Form4 Constructor: Assign the passed-in "Form1" to the member "Form1"
public Form4(Form1 form)
{
   this._form = form;
}

// Take the member "Form1," get the item value, and write it in the text box
private void Form4_Load(object sender, EventArgs e)
{
   textBox1.Text = this._form.GetItemValue();
}
1 голос
/ 27 сентября 2011

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

private void button5_Click(object sender, EventArgs e) // Brings up the second form 
{
    Form4 editItem = new Form4();
    editItem.Show(this); //passes a reference to this form to be stored in owner
}  

Затем укажите ссылку на нее в другой форме.

private void Form4_Load(object sender, EventArgs e)
{
    textBox1.Text = ((Form1)owner).GetItemValue();
} 
1 голос
/ 27 сентября 2011

Попробуйте это

ФОРМА 1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        //Fields
        public List<string> itemTexts;

        public Form1()
        {
            InitializeComponent();

            //Generate some items
            for (int i = 0; i < 10; i++)
            {
                ListViewItem item = new ListViewItem();

                item.Text = "item number #" + i;

                listView1.Items.Add(item);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem item in listView1.Items)
            {
                if (item.Checked)
                {
                    itemTexts.Add(item.Text);
                }
            }

            Form2 TextBoxForm = new Form2(itemTexts);
            TextBoxForm.Show();
        }


    }
}

ФОРМА 2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form2 : Form
    {
        //Fields
        List<string> itemTexts;

        public Form2(List<string> itemTexts)
        {
            InitializeComponent();

            this.itemTexts = itemTexts;

            foreach (string text in itemTexts)
            {
                textBox1.Text += text + Environment.NewLine;
            }
        }    
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...