mufeed k Ответов: 2

Как устранить мерцание в форме mdi C#


я работаю с wiforms. у меня есть форма mdi. моя проблема заключается в том, что когда я устанавливаю фоновое изображение на свой mdi, это создает некоторые проблемы. он мерцает, когда всплывает окно сообщений. а также он иногда мерцает, когда я загружаю новую дочернюю форму( не каждый раз).
я видел много решений здесь но ничего не работает для меня пожалуйста помогите мне

Что я уже пробовал:

я пытался
1)dubblebuffer=true;

2)
const int WM_NCPAINT = 0x85;
const int WM_SIZE = 0x05;
защищенное переопределение void WndProc(ref Message m)
{
if (m. Msg == WM_NCPAINT)
{
если (это.WindowState = = FormWindowState. Maximized)
вернуть;
}

if (m. Msg == WM_SIZE)
{
если (это.WindowState = = FormWindowState. Maximized)
вернуть;
}

база.WndProc(ref m);
}



3)
//для избежания мерцания
// protected override CreateParams CreateParams
//{
// получить
// {
// CreateParams handleParam = base.CreateParams;
// handleParam.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
// возврат handleParam;
// }
//}

4)написал ниже код в MDI load

этот.SetStyle (ControlStyles.UserPaint, правда);

#realJSOP

Перечислите все, что вы пробовали, чтобы нам не пришлось гадать и предлагать то, что вы уже пробовали. Говорить, что вы "испробовали много решений", абсолютно бесполезно.

mufeed k

Сэр, я обновил свой вопрос с помощью кодов, которые я пробовал
спасибо за внимание к моему вопросу

2 Ответов

Рейтинг:
8

mufeed k

у меня есть решение.я вставил ниже код в конструктор и он работал нормально
спасибо за Вашу поддержку


foreach (Control ctl in this.Controls)
           {    // Find the MDI client window
               if (ctl is MdiClient)
               {
                  // Hackorama to avoid flicker:
                   var dblBuf = ctl.GetType().GetProperty("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance);
                   dblBuf.SetValue(ctl, true, null);
                   break;

               }
           }


Рейтинг:
1

Midi_Mick

Вы пробовали установить стиль окна в конструкторе?

InitializeControl();
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);


mufeed k

да я уже пробовал устанавливать в конструкторе
есть некоторый прогресс, но он все еще мерцает, пока окно mesage отображается в форме клиента