Quick response
Just add a link to the main form in your sub form:
public partial class TempCalib : Form
{
private MainForm _main
public TempCalib(MainForm main) : this()
{
_main = main;
}
}
:
private TempCalib _tempCalib;
private void calibBtn_Click(object sender, EventArgs e)
{
if (_tempCalib == null)
_tempCalib = new TempCalib(this);
_tempCalib.Show();
}
calibBtn_Click MainForm ( UserControl), _tempCalib :
_tempCalib = new TempCalib((MainWindow)FindForm());
:
private void OkButton_Click(object sender, EventArgs e)
{
_main.TempCommand();
this.Hide();
}
: , MainForm ( , ), TempCalib UserControl, Form ( , UserControl ).
. , Form - , Form. ?
1. DECOUPLE CONTROLS. , , , TempCalib MainForm :
public partial class TempCalib : Form
{
public event EventHandler SomethingMustBeDone;
private void OkButton_Click(object sender, EventArgs e)
{
OnSomethingMustBeDone(EventArgs.Empty); / TO DO
this.Hide();
}
}
MainForm:
private TempCalib _tempCalib;
private void calibBtn_Click(object sender, EventArgs e)
{
if (_tempCalib == null)
{
_tempCalib = new TempCalib();
_tempCalib.SomethingMustBeDone += _tempCalib_SomethingMustBeDone;
}
_tempCalib.Show();
}
2. DECOUPLE LOGIC FROM CONTROLS. , ( , , ). ( TempCalib , ). (, ) , . ( ), TempCalib ( ) MainForm :
public partial class MainForm : Form
{
public event EventHandler Calibrate;
protected virtual void OnCalibrate(EventArgs e)
{
}
}
:
public class MyTaskController
{
private MainForm _main;
private TempCalib _tempCalib;
public void Start()
{
_main = new MainForm();
_main.Calibrate += OnCalibrationRequested;
_main.Show();
}
private void OnCalibrationRequested(object sender, EventArgs e)
{
if (_tempCalib == null)
{
_tempCalib = new TempCalib();
_tempCalib.SomethingMustBeDone += OnSomethingMustBeDone();
}
_tempCalib.Show();
}
private OnSomethingMustBeDone(object sender, EventArgs e)
{
_tempCalib.Hide();
}
}
, , ( , ) . , , ( ). , () ( , WinForms WPF, ). , ... : , , , , .
3. DECOUPLE LOGIC . ( ). (MainForm TempCalib). , (, ), , . :
public interface IUiWindow
{
void Show();
void Hide();
}
public interface IMainWindow : IUiWindow
{
event EventHandler Calibrate;
}
public interface ICalibrationWindow : IUiWindow
{
event EventHandler SomethingMustBeDone;
}