Показать окно сообщения после полного отображения пользовательского элемента управления

У меня есть control form, производный от класса управления пользователями Windows. Мне нужно показать message box на основе условия после отображения формы. Я пытался использовать form paint event handler для этого, но кажется, что он срабатывает дважды. В результате message box отображается дважды. Как это может быть сделано?

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

person chenk    schedule 23.01.2014    source источник
comment
покажи что пробовал...   -  person Sandesh    schedule 23.01.2014
comment
Видиблечанжед/онвидиблечанжед?   -  person Greg D    schedule 23.01.2014
comment
@GregD Я использовал событие Paint   -  person chenk    schedule 23.01.2014


Ответы (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");
            }
        }
    }
person Jade    schedule 23.01.2014
comment
Затем переместил this._Shown = true; перед MessageBox.Show(что-то); - person Jade; 23.01.2014
comment
открытый класс MyUserControl: UserControl { открытое событие EventHandler Shown; общественное логическое значение IsShown { получить; частный набор; } public MyUserControl() : base() { } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); если (!IsShown) { IsShown = true; if (Shown.IsNotNull()) { Shown(this, e); } OnShown(это, д); } } protected virtual void OnShown (отправитель объекта, EventArgs e) { } } - person Krzysztof Radzimski; 28.09.2017