この問題を解決するには、デリゲートを使用する必要があります。
コントロールのコード ビハインドで、メイン フォーム自体を閉じるように指示するために使用するデリゲートを定義します。親フォームを閉じたいコントロール内のどこでも、親フォームによって処理されるこのカスタム イベントを発生させます。例として、コントロールのボタン クリックで親フォームを閉じたいと仮定します。
public delegate void CloseHostFormEventHandler(Object sender, EventArgs e);
public partial class MyControl : Control {
public event CloseHostFormEventHandler CloseFormEvent;
public closeButton_Clicked(object sender, EventArgs) {
// do your db stuff
// you could create your own class here and pass the object to your main form if you wanted
EventArgs myargs = new EventArgs();
// tell host form to close itself
CloseFormEvent(this, myargs);
}
}
親フォームでは、コントロールによって発生したイベントを処理する必要があります。
public partial class MyForm : Form {
public MyForm() {
InitializeComponent();
// ill assume your control was added via the designer and thus done in InitializeComponent()
// hook up event handler
mycontrol.CloseFormEvent += CloseFormEventHandler(closeformCallback);
}
protected void closeformCallback(object sender, EventArgs e) {
DialogResult = DialogResult.OK;
this.Close();
}
}