Я реализую пользовательский элемент управления, который предоставляет общедоступные события для обработки из внешнего класса, то есть основной формы.
Основная форма может обрабатывать эти события (в моем случае это расширенный TabControl).
Выдержка из моего пользовательского элемента управления:
public class FlatTabControlEx : TabControl {
public delegate void OnTabCloseQueryDelegate(int tabIndex, TabPage tabPage);
public event OnTabCloseQueryDelegate TabCloseQuery;
protected override void OnPaint(PaintEventArgs e) {
DrawControl(e.Graphics);
base.OnPaint(e);
}
protected override void OnClick(EventArgs e) {
var imageRect = GetImageRectangle()
bool mouseOver = imageRect.Contains(GetMousePos());
if (mouseOver) {
if (TabCloseQuery != null) {
TabCloseQuery(i, TabPages[i]);
}
}
}
}
И вот как я обрабатываю это событие:
public partial class TestForm : Form {
public TestForm() {
InitializeComponent();
_flatTabControlEx.TabCloseQuery += (index, tabPage) => {
if (MessageBox.Show("Close tab with title " + tabPage.Text, "Question", MessageBoxButtons.YesNo) == DialogResult.Yes) {
_flatTabControlEx.TabPages.Remove(tabPage);
}
};
}
}
Каким-то образом окно сообщения скрывается (из-за егоглавная форма?) и появляется только тогда, когда основная форма теряет и восстанавливает фокус.Предоставление другого владельца, похоже, не помогло.
Как я могу справиться с этим делом и как вызвано поведение?
Редактировать 1 : добавлен некоторый минимизированный код выше.
Редактировать 2 : Я заметил, что на самом деле мой элемент управления отображается над MessageBox.Как я могу определить, когда его нарисовать?