2013-03-21 4 views
1

Я пишу приложение, которое запрашивает ввод, который должен быть выбран из ComboBox, затем запрашивает второй вход, который будет выбран из другого ComboBox (на основе первого, есть разные возможности для каждого первого входа.) Когда оба входа установлены, пользователь нажимает кнопку, которая передает эти входы во вторую форму и использует form2.show() для ее открытия (входы передаются через свойства). Мне хотелось бы закрыть эту новую форму (эта функция будет выполнена), а затем выбрать новые входы и снова открыть вторую форму, на этот раз используя новые входы. Входы меняют информацию, которую вызывается в новой форме. Прямо сейчас, моя программа падает, когда я нажимаю кнопку, чтобы открыть новую форму после изменения входов.C# закрыть форму изменить значения открыть новую форму

Любые предложения ?!

Спасибо!

UPDATE

Вот ошибка я получаю: System.ObjectDisposedException: Не удается получить доступ к объекту, расположенный. Название объекта: 'Form2'.

И код.

Из главной формы:

private void button1_Click(object sender, EventArgs e) 
    { 
     report_form.TypeSelected = type_selected; 
     report_form.LoadSelected = load_selected; 
     report_form.Show(); 
    } 

От дочерней формы:

public string TypeSelected { get; set; } 
public string LoadSelected { get; set; } 
private void Form2_Load(object sender, EventArgs e) 
    { 
     this.Text = "Report for " + TypeSelected + " load " + LoadSelected; 
     label1.Text = "Type: " + TypeSelected; 
     label2.Text = "Load: " + LoadSelected; 

     dataGridView1.DataSource = bindingSource1; 
     GetData(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 
+0

Пожалуйста, покажите свой код. – mbeckish

+0

Без просмотра вашего кода это кто-нибудь догадался – Steve

+0

И, пожалуйста, покажите ошибку. Хотя я догадаюсь, что это форма Disposed ... –

ответ

0

Из кода он выглядит, как вы, вероятно, показывая дочернюю форму несколько раз. Когда вы вызываете close, форма DIsposed и вызов show на ней снова без повторной инициализации вызывает это исключение. Вам нужно просто скрыть свою дочернюю форму, а не закрывать ее или закрыть ее, воссоздавать ее каждый раз, когда вы хотите ее показать. (Hide вместо Close.)

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

Высокий конь: вы должны попытаться реорганизовать ваше приложение в MVC (model, view controller.) Класс контроллера будет определять, какая форма нагрузки открыта и когда, а также передать модель (данные) между ними. Такое разделение проблем поможет вам организовать ваше приложение и уйти от вашей проблемы. Или MVP тоже: (Model View Presenter)

+0

Я попытался использовать ShowDialog(), и он работает. Большое спасибо! – user2196809

Смежные вопросы