Передача данных из одной формы в другую - PullRequest
4 голосов
/ 31 января 2010

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

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

Я могу удалить и добавить новый объект, его редактирование - существующий, с которым мне тяжело, и как мне загрузить вторую форму?

Я сейчас создаю, а экземпляр тогда instance.Show ();

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

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

Допустим, ваша form1 - это форма с сеткой данных (grdMyData), которая отображает строки экземпляров класса MyClass, а form2 - это форма для редактирования данных данной строки. Когда пользователь нажимает кнопку «Изменить», вы можете использовать это:

private void btnEdit_Click(sender e, EventArgs arg)
{
   if (grdMyData.SelectedRows.Count == 0)
       return; //nothing to do

   MyClass selectedRow = (MyClass)grdMyData.SelectedRows[0].DataBoundItem;
   Form2 frm2 = new Form2(selectedRow);
   if (frm2.ShowDialog() == DialogResult.OK)
   {
        //do something if needed
   }
}

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

0 голосов
/ 31 января 2010

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

Вот официальное руководство
http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

В основном это было бы что-то вроде этого

// Source form  
public event YourEventHandlerType EventName;

// Wherever the event occurs  
EventName.Invoke(...);

// Destination form
this.referenceToSourceForm.EventName += MyEventHandler(...);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...