2013-02-09 2 views
0

У меня есть основная форма, которая предлагает вычисления и открывает и закрывает проекты, созданные пользователем.Передача данных между двумя экземплярами WinForms в C#

Когда пользователь нажимает на кнопку Open Project в разделе Файл, форма называется Open Project открывает, как показано ниже, что позволяет пользователю загружать проект:

enter image description here

Теперь я хочу, чтобы передать данные из этой формы в основную форму после нажатия OK.

Проблема, с которой я сталкиваюсь, заключается в том, что основная форма уже открыта.

Любое решение этой проблемы было бы оценено высоко.

+1

Не знаю, как вы думаете, что главная форма уже будучи открытым является проблема. Почему вы не можете просто иметь основную форму получить любую информацию, которую хотите от других форм? Похоже, вам нужно свойство в вашем другом классе (-ях). – PhoenixReborn

ответ

1

Попытка создать Properties в Open Project Form

Главная форма

private void openButton_Click(object sender, EventArgs e) 
{ 
    using(var f = new Open_Project_Form()) 
    { 
     f.ProjectReference = projectRefrencetTextBox.Text; 
     f.ProjectNo = projectNoTextBox.Text; 
     f.ShowDialog(); 
    } 
} 

Открыть проект формы

public string ProjectReference { get; set; } 
public string ProjectNo { get; set; } 

private void Open_Project_Form_Load(object sender, EventArgs e) 
{ 
    projectRefrenceComboBox.Text = ProjectReference; 
    projectNoTextBox.Text = ProjectReference; 
} 

UPDATE

Я неверно истолковал вопрос. Мой предыдущий ответ от MainForm к OpenProjectForm это время от OpenProjectForm до MainForm

Главная Форма

//Properties for MainForm 
public string ProjectReference { get; set; } 
public string ProjectNo { get; set; } 

private void openButton_Click(object sender, EventArgs e) 
{ 
    using(var f = new Open_Project_Form() { Owner = this }) 
    { 
     f.ShowDialog(); 
     if (f.DialogResult == DialogResult.OK) 
     { 
      projectRefrencetTextBox.Text = ProjectReference; 
      projectNoTextBox.Text = ProjectNo; 
     } 
    } 
} 

Открыть проект Форма: Примите к сведению, что у вас есть okButton и cancelButton

private void Open_Project_Form_Load(object sender, EventArgs e) 
{ 
    okButton.DialogResult = DialogResult.OK; 
    this.AcceptButton = okButton; 
    this.CancelButton = cancelButton; 
} 

Сейчас, в okButton_Click event

private void okButton_Click(object sender, EventArgs e) 
{ 
    var f = Owner as MainForm; 
    if (f == null) return; 
    f.ProjectReference = projectRefrenceComboBox.Text; 
    f.ProjectNo = projectNoTextBox.Text; 
    Close(); 
} 

Ссылка:

Надеется, что это будет поможет вам.

+0

Я только что испытал это, и он отлично работает! Большое вам спасибо за помощь. – user1580591

+0

приветствуется, но не забывайте, что мой ответ отмечен как __accepted__ ':)' – spajce

0

Можете ли вы использовать мероприятия? Создайте EventClass и верните значение в качестве результата события.

0

Создать событие в открытом классе формы:

public event EventHandler<ProjectDetailsArgs> ProjectDetailsSubmitted; 
    public class ProjectDetails: EventArgs 
    { 
     public string projectReference{ get; set; } 
     public string projectNo{get;set;} 
     //you can add more prop.s here 
    } 

On your Ok button click event add 

if (ProjectDetailsSubmitted != null) 
       { 
        ProjectDetailsArgs argss = new ProjectDetailsArgs(); 
        argss.projectReference = projectRefrencetTextBox.Text; 
        argss.projectNo = projectNoTextBox.Text; 
        ProjectDetailsSubmitted(null, argss); 
       } 

В главной форме создайте обработчик для него:

childform.ProjectDetailsSubmitted+=new EventHandler<ProjectDetailsArgs>project_detailsSubmitted); 

       public void project_detailsSubmitted(object sender, ProjectDetailsArgs e) 
       { 
     //Do Your work 
       } 
Смежные вопросы