C # Onpaint не спрацьовує

У мене є цей код:

    private void HandleGUI()
    {
        if (_currentForm == null)
        {
            navigationSideBar1.Visible = false;
            pnlToolbar.Visible = false;

            return;
        }

        if (_currentForm.ShowNavigationBar)
        {
            HandleNavigationButton(_currentForm);
        }

        btnSave.Visible = _currentForm.ShowSaveButton;
        btnClose.Visible = _currentForm.ShowCloseButton;
        btnSave.Paint += new PaintEventHandler(btnSave_Paint);
        navigationSideBar1.Visible = _currentForm.ShowNavigationBar;
        pnlToolbar.Visible = _currentForm.ShowToolBar;

        btnSave.Refresh();
        btnSave.Invalidate();
    }

Я зареєстрований на onpaint події кнопки збереження (btnSave), але ця подія не звільняється, навіть коли я закликаю Оновити або Скасувати. Як це можливо?

EDIT: Ось як виглядає клас клавіатури saave:

public class SaveButton : ButtonX
{
    public SaveButton()
    {
        this.Image = Properties.Resources.Save;
        this.Text = "Opslaan";
        this.Size = new Size(108, 39);

    }
}
0
Це спеціальна кнопка, яку успадковує кнопка X, яка є кнопкою DevComponent.
додано Автор Martijn, джерело
Всі дякую за коментарі. Це має дещо пов'язане з кнопкою devComponents. Я спробував той же код із системною кнопкою, і тоді він працює просто чудово.
додано Автор Martijn, джерело
@MusiGenesis: я переопределюю події OnPaint в класі, і все одно нічого не відбувається, тому, я думаю, ви маєте рацію з думкою, що подію не має реалізації.
додано Автор Martijn, джерело
@MusiGenesis: чи можете ви опублікувати відповідь, щоб я міг відмітити вашу відповідь, як відповідав?
додано Автор Martijn, джерело
Я думаю, це вже було намальовано до того, як цей код буде викликаний, але я можу змішувати це з тим, як iOS робить речі.
додано Автор MusiGenesis, джерело
Спробуйте додати стандартну кнопку DevComponent (тобто не його підклас) до форми тестування та перевірити, чи вона колись запускає подія Paint . Вони можуть виявити подія Paint (так що їх інтерфейс відповідає стандартній кнопці), але насправді не реалізований.
додано Автор MusiGenesis, джерело
Ясна річ. Зроблю.
додано Автор MusiGenesis, джерело
Важко здогадатися, коли цей код може бути викликаний. Випадковий знімок: кнопка не видно (поки що).
додано Автор Hans Passant, джерело
Це не нормально. Напевно, треба побачити події Paint. Ти можеш це переоцінити?
додано Автор LarsTech, джерело
Ви повинні змінити своє запитання та теги, щоб відобразити, що це не стандартна кнопка. Це важливо для вас, щоб отримати резолюцію.
додано Автор LarsTech, джерело
Це стандартна кнопка або користувацький елемент керування?
додано Автор ja72, джерело
Ви додали цю кнопку до форми? Це видиме? Чи розміщується він у видимій області? Де цей код називається? Вам потрібно надати більше інформації.
додано Автор Miguel Angelo, джерело

3 Відповіді

Спробуйте додати стандартну кнопку DevComponent (тобто її не підклас) до тестової форми та дізнатись, чи вона коли-небудь запускає події Paint. Вони можуть виявити подія Paint (так що їх інтерфейс відповідає стандартній кнопці), але насправді не реалізований.

2
додано

З MSDN :

Виклик методу "Недійсний" не примушує синхронної фарби; щоб зупинити синхронні фарби, викликайте метод Update після виклику методу Invalidate.

Отже, вам потрібен оновити дзвінок. Тепер Оновити - просто Скасувати w/update children + Update, тому теоретично вас піклуються. Все, що я можу думати, полягає в тому, що Windows не викликає Paint, якщо вона дійсно не потрібна, тобто коли форма відображається на інтерфейсі користувача або записується на графічний пристрій ("скріншот" невидимого вікна). Чи є ці справи?

1
додано
Thnx для довідкової інформації. Не знав цього
додано Автор Martijn, джерело

Встановлення userpaint до true призведе до події onpaint

this.SetStyle(ControlStyles.UserPaint, true);
1
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug