Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在用户控件完全显示后显示消息框_C#_Winforms_User Controls_Messagebox_Paintevent - Fatal编程技术网

C# 在用户控件完全显示后显示消息框

C# 在用户控件完全显示后显示消息框,c#,winforms,user-controls,messagebox,paintevent,C#,Winforms,User Controls,Messagebox,Paintevent,我有一个从windows用户控件类派生的控件窗体。一旦表单显示,我需要根据条件显示一个消息框。我试图使用表单绘制事件处理程序来完成此操作,但它似乎触发了两次。因此,消息框显示两次。如何做到这一点 public partial class SelectAccounts : UserControl { private void SelectAccounts_Paint(object sender, PaintEventArgs e) { MessageBox.Sho

我有一个从windows用户控件类派生的
控件窗体
。一旦表单显示,我需要根据条件显示一个
消息框
。我试图使用
表单绘制事件处理程序来完成此操作,但它似乎触发了两次。因此,
消息框
显示两次。如何做到这一点

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

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

    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");
            }
        }
    }

显示您尝试过的内容…VisibleChanged/OnVisibleChanged?@GregD我使用了Paint Event,然后移动了此项。\u show=true;在MessageBox.Show(“某物”)之前;公共类MyUserControl:UserControl{public event EventHandler已显示;public bool IsShown{get;private set;}public MyUserControl():base(){}受保护的重写void OnPaint(PaintEventArgs e){base.OnPaint(e);if(!IsShown){IsShown=true;if(show.IsNotNull()){show(this,e);}OnShown(this,e);}}}protected virtual void OnShown(object sender,EventArgs e){}