私は外部クラス、つまりメインフォームから処理されるパブリックイベントを提供するカスタムコントロールを実装しています。親フォームが再フォーカスするまでMessageBoxは非表示のままです
メインフォームでは、これらのイベントを処理できます(私の場合は、高度な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上に描かれた実際のコントロールだと気付きました。どのように描画するのかを決めるにはどうすればいいですか?
鳴きます。この動作を再現するポストコード。 –
私はカスタムスレッドを実装していません。私はデフォルトのOnPaintをオーバーライドします、それが原因かもしれませんか?とにかく、上記のコードが追加されました。 – fjdumont