Добавить запись в текстовое поле в другом классе? - PullRequest
0 голосов
/ 27 октября 2011

У меня есть форма, в которой я могу ввести данные из одного окна, а затем нажать кнопку ввода (btnEnter), нажать кнопку отображения (btnShowBooks) и показать данные в другом окне.Когда я нажимаю btnEnter с кодом ниже и затем нажимаю btnShowBooks, чтобы отобразить ввод в новом окне, текстовое поле txtBookList по-прежнему пусто.Вот упрощенный код, который не работает, и надеюсь на некоторые советы.

Файл формы BookEntry

private void btnEnter_Click(object sender, EventArgs e)
{
    BookList bookList = new BookList();
    bookList.txtBookList.Text = "aaa";
}

Файл формы BookList вкоторый у меня есть макет и кнопка закрытия, чтобы не было никакого соответствующего кода.Существует только текстовое поле с именем txtBookList и кнопкой btnClose.

В файле конструктора BookList я обнародовал поле:

public System.Windows.Forms.TextBox txtBookList;

С уважением.HelpNeeder.

- решено -

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;
using System.Collections;

namespace Lab_8
{
    public partial class BookEntry : Form
    {
        BookList bookList = new BookList();

        public BookEntry()
        {
            InitializeComponent();
        }

        private void btnEnter_Click(object sender, EventArgs e)
        {
            bookList.txtBookList.Text = "aaa";
        }

        private void btnShowBooks_Click(object sender, EventArgs e)
        {
            bookList.ShowDialog();
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 27 октября 2011

Я только что повторил это, и он работает нормально (VS2010 .NET4) .. Вы показываете тот же самый экземпляр формы позже? (как показано ниже):

BookList bookList = new BookList();
bookList.txtBookList.Text = "aaa";
bookList.Show();

EDIT

Учитывая ваш ответ, кажется, что вы создаете отдельные формы. Вот что вам нужно сделать:

Сначала, в вашей основной форме, объявите это:

private BookList _bookList = new BookList();

Затем, где бы вам ни понадобилось сослаться на эту форму, используйте _bookList для этого. Например:

_bookList.txtBookList.Text = "aaa";
_bookList.ShowDialog();

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

BookList bookList = new BookList();

Вы на самом деле создаете совершенно разные копии формы.

1 голос
/ 27 октября 2011

Где вы делаете .Show () в форме BookList.Убедитесь, что вы не создаете 2 отдельных экземпляра формы и устанавливаете текстовое поле на одном, а отображаете другое (это то, что я подозреваю).

1 голос
/ 27 октября 2011

Вы создаете новый BookList и затем теряете его, как только метод возвращается. Вы пытаетесь получить доступ к объекту BookList внутри формы BookEntry? Это должно выглядеть больше как:

private void btnEnter_Click(object sender, EventArgs e)
{
    // bookListForm is the ID of the form in the designer 
    bookListForm.txtBookList.Text="aaa";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...