【问题标题】:Show a message box after usercontrol fully displayed用户控件完全显示后显示消息框
【发布时间】:2014-01-23 08:39:25
【问题描述】:

我有一个从 windows 用户控件类派生的control form。一旦显示表单,我需要根据条件显示message box。我尝试使用form paint event handler 来执行此操作,但它似乎触发了两次。结果message box 显示了两次。如何做到这一点?

public partial class SelectAccounts : UserControl
{
    private void SelectAccounts_Paint(object sender, PaintEventArgs e)
    {
         MessageBox.Show("something");
    }
}

【问题讨论】:

  • 显示你尝试过的...
  • VisibleChanged/OnVisibleChanged?
  • @GregD 我使用了 Paint 事件

标签: c# winforms user-controls messagebox paintevent


【解决方案1】:

我已经删除了我之前的答案,你可以试试下面的代码。 使用变量来记住用户控件是否被加载。

    public partial class SelectAccounts : UserControl
    {
        bool _Shown = false;
        private void SelectAccounts_Paint(object sender, PaintEventArgs e)
        {
            if (!this._Shown)
            {
                this._Shown = true;
                MessageBox.Show("something");
            }
        }
    }

【讨论】:

  • 然后移动 this._Shown = true;在 MessageBox.Show("something"); 之前
  • 公共类 MyUserControl : UserControl { 公共事件 EventHandler 显示;公共布尔 IsShown { 得到;私人套装; } public MyUserControl () : base() { } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (!IsShown) { IsShown = true; if (Shown.IsNotNull()) { Shown(this, e); } OnShown(this, e); } } 受保护的虚拟 void OnShown(object sender, EventArgs e) { } }