Невозможно избежать мерцания формы полностью - PullRequest
0 голосов
/ 20 марта 2019


Я пытаюсь избежать мерцания формы в моем приложении для Windows (MDI), но не могу избежать его полностью.

Что я пробовал ...
1) Я поместил этот кодв моем form.cs

protected override CreateParams CreateParams
        {
            get
            {
                var cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;  
                return cp;
            }
        }

2) Включено двойная буферизация для формы и панели

typeof(Panel).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, pnlNotification, new object[] { true });
typeof(Form).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, this, new object[] { true });            

Основная проблема
Мои вышеуказанные коды работаютотлично, но когда я минимизирую свое приложение и максимизирую его снова, мерцание начинается снова.

Структура моей формы
Я использовал родительскую панель в каждой форме и поместил все элементы управления внутри этой панели.

Я вызываю форму из MDI Parent какэто

if (menuStrip1.Enabled == true)
        {
            frmProductSale ProductSale = new frmProductSale(this);
            ProductSale.MdiParent = this;
            ProductSale.Show();                
        }

и дочерний код формы ..
Конструктор ...

 public frmProductSale(frmHome Hm)
        {
            InitializeComponent();
            Home = Hm;            
        }

Загрузка

private void frmProductSale_Load(object sender, EventArgs e)
        {
            UserName = ((Label)Home.Controls.Find("lblUserName", true).SingleOrDefault()).Text;
            BrowseStatus = (Label)Home.Controls.Find("lblBrowseStatus", true).SingleOrDefault();
            ResetStatus = (Label)Home.Controls.Find("lblResetStatus", true).SingleOrDefault();
            SaveUpdateStatus = (Label)Home.Controls.Find("lblSaveUpdateStatus", true).SingleOrDefault();
            RecordSelectionStatus = (Label)Home.Controls.Find("lblRecordSelectionStatus", true).SingleOrDefault();
            QuantityStatus = (Label)Home.Controls.Find("lblQuantityStatus", true).SingleOrDefault();
            ImportantMethods.CreateEvents(pnlProductSale, this, "Product Sale");
            FillValues(this, UserName);
            txtPatientName__L.Focus();            
        }

Спасибо.

...