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

1

Я загрузил свой код ниже. Проблема, с которой я сталкиваюсь, заключается в попытке получить текст из textBox1 и textBox2 в form2 в listBox в form1. Когда пользователь открывает вторую форму, они должны помещать текст в текстовые поля и после нажатия кнопки - он должен закрыть форму2 и вставить текст в form1 listBox

Я пробовал несколько вещей, но я не могу это сделать. Я также совершенно новичок в кодировании С# и только что начал работать с окнами, поэтому любая помощь была бы высоко оценена.

ФОРМА 1 КОДА НИЖЕ

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

namespace ToDoList
{
    public partial class Form1 : Form
    {
        List<string> _items = new List<string>();
        public Form1()
        {
            InitializeComponent();
            Form2 form2 = new Form2();
            _items.Add("TITLE\t\t\tDESCRIPTION\t\t\t\t\t\tPRIORITY\tDUE DATE");
            listBox1.DataSource = _items;


        }

        private void filesToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {



        }

        public void button2_Click(object sender, EventArgs e)
        {


        }

        public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        public void listView1_SelectedIndexChanged_1(object sender, EventArgs e)
        {

        }

        private void listBox1_SelectedIndexChanged_1(object sender, EventArgs e)
        {

        }
    }
}

ФОРМА 2 КОДА НИЖЕ

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

namespace ToDoList
{
    public partial class Form2 : Form
    {
        List<string> _items = new List<string>();
        public Form2()
        {
            InitializeComponent();
        }

        public void button2_Click(object sender, EventArgs e, string tbtext)
        {
            //Form1 form1 = new Form1();
            //form1.listBox1.Items.Add(tbtext);
            Form1 form1 = new Form1();
            _items.Add(textBox1.Text);
            _items.Add(textBox2.Text);
            _items.Add(comboBox1.Text);

            form1.listBox1.DataSource = null;
            form1.listBox1.DataSource = _items;

        }

        public void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public void textBox1_TextChanged(object sender, EventArgs e)
        {


        }

        private void button2_Click(object sender, EventArgs e)
        {






            //IF THE USER DOES NOT ENTER items IN THE SPACES THESE IF STATEMENTS BRING A MESSAGEBOX 
            if (string.IsNullOrWhiteSpace(this.textBox2.Text) && string.IsNullOrWhiteSpace(this.textBox1.Text))
            {
                MessageBox.Show("Please Fill The Entries");

            }

            else
            {
                if (string.IsNullOrWhiteSpace(this.textBox1.Text))
                {
                    MessageBox.Show("Please Enter A Task Name");
                }

                if (string.IsNullOrWhiteSpace(this.textBox2.Text))
                {
                    MessageBox.Show("Please Enter A Description");
                }
            }
        }

        public void textBox1_TextChanged_1(object sender, EventArgs e)
        {

        }

        public void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        public void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
  • 1
    Прежде всего, вы создаете новую форму Form1 в вашей форме Form2, эта форма Form1 никогда не отображается и не является той, которая создала вашу форму Form2. Я бы использовал ShowDialog, чтобы показать Form2, таким образом, это будет модально, и вы можете использовать свойство для доступа к данным после закрытия Form2.
  • 0
    Как сказал Марк, ShowDialog - это то, что вы хотите. Это даст вам результат (пример: пользователь нажал «ОК» или «Отмена»), и на основании этого результата форма 1 может получить доступ к свойству из формы 2 по мере необходимости. Смотрите пример здесь .
Показать ещё 1 комментарий
Теги:
winforms
listbox

1 ответ

2
Лучший ответ

Ваша общая идея правильная, но то, что вы должны понять, это то, что Марк указал в комментариях. Создание Form1 в Form2 и добавление данных в эту форму не будет работать, потому что, как только Form2 закрывается, этот экземпляр Form1 больше не существует. IE То, что вы сейчас делаете, выглядит как иерархия дерева:

Form1 (open Form2)
  |
  +-> Form2 (open and save to Form1)
        |
        +-> Form1 (contains saved data but you never see it)

Исходный Form1 является родительским. Он отвечает за открытие Form2. Используя ShowDialog, Form1 может знать, как Form2 закрыт. И поскольку это родительская форма, она может обращаться к любым общедоступным свойствам в Form2. Поэтому скажем, что Form2 имеет следующие общедоступные поля:

public TextBox textBox1;
public TextBox textBox2;

Затем вы можете извлечь данные из них следующим образом:

public void SomeMethodInForm1()
{
   Form2 form2 = new Form2();

   // Show form2 as a modal dialog and determine if DialogResult = OK. 
   if (form2.ShowDialog(this) == DialogResult.OK)
   {
      // Read the contents of form2 TextBox. 
      this._items.Add(form2.textBox1.Text);
      this._items.Add(form2.textBox2.Text);

      this.listBox1.DataSource = null;
      this.listBox1.DataSource = _items;
   }

   form2.Dispose();
}
  • 0
    Это здорово, большое спасибо за объяснение тоже! Я очень ценю это :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню