Хотя остальные ответы абсолютно верны, я хотел бы предложить гораздо более простой, но "грязный" способ сделать это.
Каждый компонент имеет свойство Tag
, в котором можно хранить любое пользовательское значение или ссылку. Идея состоит в том, чтобы сохранить ссылку на основную форму во второй форме Tag
и получить к ней доступ из обработчик события нажатия кнопки.
Хорошо в том, что вам не нужно писать много кода или создавать какую-либо структуру данных.
Грязная вещь в том, что ни инфраструктура во время выполнения, ни компилятор во время компиляции не имеют никакого представления о том, что вы храните в .Tag
, и, поскольку она не введена правильно, вы делаете тип приведения, в зависимости от того, сохраняете ли вы правильное значение там заранее.
Если вы храните неправильное значение там, вам может быть трудно отладить причину, так как симптом не сигнализирует, где вы указали неправильное значение в Tag
. Столь дикое Tag
использование в команде программистов - это хорошо, если вы хотите породить много неожиданных ошибок, которые трудно обнаружить и исправить:)
Кроме того, существует только один Tag
на компонент. Если вам нужно более одного пользовательского значения, вы можете в конечном итоге создать пользовательскую структуру данных, на которую Tag
будет содержать ссылку, но это, вероятно, более сложный вопрос, чем все другие предложения.
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
// Main form
private void MainFrm_Load(object sender, EventArgs e)
{
FormOrder frmO = new FormOrder();
frmO.Tag=this;
frmO.Show();
}
public void Refresh()
{
// some action
}
}
public partial class FormOrder : Form
{
public FormOrder()
{
InitializeComponent();
}
private void ShowForm()
{
// some action
}
private void btnCopy_Click(object sender, EventArgs e)
{
Form form = Tag as frmMain; // form now references the main form
if (form != null)
{
form.Refresh();
}
}
}
Хороший пример для быстрого и грязного решения, с такими неотъемлемыми ограничениями, что вы обычно идентифицируете их только тогда, когда слишком поздно - вот почему я говорю в первую очередь;)