Отправить параметный из одной формы в другую в C # - PullRequest
0 голосов
/ 11 октября 2011

У меня есть две формы (C #). В одной форме есть метод, который берет данные и сохраняет их в базе данных после закрытия формы, которой я хочу быть в другой (основной форме) для обновления данных. Как это сделать используя ООП или просто сделать максимально красиво и хорошо.

Ответы [ 3 ]

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

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

Обратите внимание, что если вы хотите отправить данные куда-то, вам нужна ссылка на это место, т.е. вам нужна ссылка на основную форму в другой форме.Либо передайте this из главной формы в конструктор другой формы, либо вы также можете сохранить ссылку в статическом поле в классе Program (сделать это в методе Main, где вы создаете основную форму) и т. Д.

0 голосов
/ 11 октября 2011

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

Код формы 2

    public event EventHandler<UpdatedEventArgs> updateEvent;

    public class UpdatedEventArgs : EventArgs
    {
        public string SomeVal { get; set; } // create custom event arg for your need
    }

    protected virtual void OnFirstUpdateEvent(UpdatedEventArgs e)
    {
        if (updateEvent != null)
            updateEvent(this, e);
    }


    private void button1_Click(object sender, EventArgs e)
    {
        UpdatedEventArgs eventData = new UpdatedEventArgs(); 
        eventData.SomeVal = "test"; // set update event arguments, according to your need

        OnFirstUpdateEvent(eventData);
    }

    public Form2()
    {
        InitializeComponent();
    }

Форма1 код

    public Form1()
    {
        InitializeComponent();

        Form2 form2 = new Form2();
        form2.updateEvent += new EventHandler<Form2.UpdatedEventArgs>(form2_updateEvent); // create event handler to update form 1 from form 2
        form2.Show();
    }

    void form2_updateEvent(object sender, Form2.UpdatedEventArgs e)
    {
        if (e != null && e.SomeVal != null)
        {
            // Do the update on Form 1 
            // depend on your event arguments update the grid  
            //MessageBox.Show(e.SomeVal); 
        }

    }
0 голосов
/ 11 октября 2011

Наиболее приемлемое для ООП решение, вероятно, заключалось бы в том, чтобы событие в любой форме «запускало» обновление данных, которое подписано и обрабатывается методом другой формы. Вот основная схема:

public class Form1:Form
{
   public event EventHandler<MyDataObject> DataChanged;

   ...

   public override void OnClosing(CancelEventArgs e)
   {
      //Put in logic to determine whether we should fire the DataChanged event
      try
      {
         if(DataChanged != null) DataChanged(this, myFormCurrentData);
         base.OnClosing(e);
      }
      catch(Exception ex)
      {
         //If any handlers failed, cancel closing the window until the errors
         //are resolved.
         MessageBox.Show(ex.Message, "Error While Saving", MessageBoxButtons.OK);
         e.Cancel = true;
      }
   }
}

...

public class Form2:Form
{
   //Called from wherever you would open Form1 from Form2
   public void LaunchForm1()
   {
      var form1 = new Form1();
      form1.DataChanged += HandleDataChange;
      form1.Show();
   }

   private void HandleDataChange(object sender, MyDataObject dataObj)
   {
      //Do your data validation or persistence in this method; if it fails,
      //throw a descriptive exception, which will prevent Form1 from closing.
   }
}

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

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