переход к форме, которая уже открыта - PullRequest
0 голосов
/ 07 апреля 2011

Что я пытаюсь сделать, это загрузить некоторую информацию из базы данных.

Для этого я открываю форму со списком всего, что можно загрузить.

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

Однако я не могу вызвать метод в этой форме.

Любая помощь будет оценена.

Ответы [ 4 ]

1 голос
/ 07 апреля 2011

Я бы перевернул это:

  1. Преврати форму выбора в модальное диалоговое окно, которое создается и отображается в форме, в которую ты хочешь что-то загрузить
  2. Выставляй сделанный выборв диалоговом окне через свойство или метод в диалоговой форме

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

В диалоговом окне выбора класса:

public string GetSelectedId()
{
    return whateverIdThatWasSelected;
}

В форме вызова:

using(var dlg = new SelectionDialogForm())
{
    if (dlg.ShowDialog() == DialogResult.OK)
    {
        DoSomethingWithSelectedId(dlg.GetSelectedId());
    }
}
0 голосов
/ 07 апреля 2011

Правильный способ сделать это - ввести класс Controller, который используется обеими формами. Затем вы можете использовать свойство в Controller, когда оно установлено, будет вызывать событие NotifiyPropertyChanged.

см. INotifyPropertyChanged для получения дополнительной информации

0 голосов
/ 07 апреля 2011

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

public int SelectedItemId {get;private set;}

//In your item selected code, like button click handler..
this.SelectedItemId = someValue;

Затем просто откройте форму в диалоге

//Open the child form
using (var form = new ChildForm())
{
    if (form.ShowDialog(this) == DialogResult.OK)
    {
        var result = form.SelectedItemId;//Process here..
    }
}
0 голосов
/ 07 апреля 2011

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

например.

public class FormA : Form
{

private string _YourProperty = string.empty;

public string YourProperty
{
 get
 {
  return _YourProperty;
 }
 set
 {
  _YourProperty = value;
 }
}

}

public class FormB : Form
{

public void ButtonClick(object sender, EventArgs args)
{
 using (FormA oForm = new FormA)
 {
  if (oForm.ShowDialog() == DialogResult.OK)
  {
   string Variable = oForm.YourProperty;
  }
}
}

Вам просто нужно установить свое свойство нажатием кнопки на формеА затем вы можете получить к нему доступ из формы B}

...