Вы захотите использовать делегатов для решения этой проблемы.
В коде вашего элемента управления определите делегата, который вы будете использовать, чтобы сообщить своей основной форме, что она закрывается.Везде, где вы хотите закрыть родительскую форму, вы будете вызывать это пользовательское событие, которое будет обрабатываться вашей родительской формой.Например, мы предполагаем, что вы хотите закрыть родительскую форму нажатием кнопки в элементе управления
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();
}
}