Мерцание при работе с двумя формами.
Никак не могу избавится от мерцания окон в приложении. Среда: С#
Практически все на форуме перелистал, есть похожие темы, все что в них написано перепробывал, но результата нету.
В общем-то, к примеру, есть две формы. На каждой форме по кнопке.
При нажатии на кнопку на Форме1, она скрывается и открывается Форма2, соответственно так же с Формы2 на Форму1.
[COLOR="Red"]DoubleBuffered[/COLOR] стоит в [COLOR="Blue"]True[/COLOR] как для Формы1, так и для Формы2.
{
[COLOR="#48d1cc"]Form1[/COLOR].ActiveForm.Hide();
[COLOR="#48d1cc"]Form2[/COLOR] Frm2 = [COLOR="Blue"]new[/COLOR] [COLOR="#48d1cc"]Form2[/COLOR]();
[COLOR="#48d1cc"]Point[/COLOR] point = [COLOR="#0000ff"]new[/COLOR] [COLOR="#48d1cc"]Point[/COLOR](Location.X, Location.Y);
Frm2.Location = point;
Frm2.ShowDialog();
}
После многократных попыток избавится от мерцания выяснилось что оно связано с скрытием формы, с которой мы переходим. Т.е. из-за вот этого:
Возможно ли избавится от мерцания, или же отказаться от Hide()?
Может быть попробовать так:
{
Form2 Frm2 = new Form2();
Point point = new Point(Location.X, Location.Y);
Frm2.Location = point;
Form1.Hide();
Frm2.ShowDialog();
}
Sanila_san данный вариант тоже был опробован, результат такой же как и с Hide().
Может быть попробовать так:
{
Form2 Frm2 = new Form2();
Point point = new Point(Location.X, Location.Y);
Frm2.Location = point;
[COLOR="Red"]Form1.Hide();[/COLOR]
Frm2.ShowDialog();
}
GreenRiver, насколько я понимаю, то что выделено красным это есть ошибка и работать не будет.
Если же ты имел ввиду [COLOR="Blue"]Form1.ActiveForm.Hide();[/COLOR] и хотел предложить изменить очередность выполнения кода, то в данном контексте, я также не вижу смысла. (Скорее всего моего опыта еще недостаточно чтобы понять его :)).
На форме Form2 расположено: 7 textBox'ов, 2 comboBox'а, 1 listBox, 1 pictureBox, 2 groupBox'а. Я предполагал, что из-за большого количества объектов расположенных на Form2 происходит мерцание, но когда заккоментил [COLOR="Blue"]Form1.ActiveForm.Hide();[/COLOR], то Form1 не пряталась, а была на background'e и мерцания не было.
Предполагал также, что это может быть из-за очень сильно тормознутого компа, но это опроверглось после проверки на нескольких машинах.
P.S. Сейчас ищу пути реализовать все на одной форме (MdiContainer или что подобное), но всеже очень интересно почему так происходит.
В любом случае не удается повторить Ваш баг - у меня ничего не мерцает. Я даже не понимаю в какой момент это происходит? При каждой перерисовки Form2?
В любом случае не удается повторить Ваш баг - у меня ничего не мерцает. Я даже не понимаю в какой момент это происходит? При каждой перерисовки Form2?
Странная какая-то ситуация. Я уже и сам ничего не понимаю.
1. Запустил проект, для перепроверки, так мерцание происходит во время первой перерисовки Form2, а потом уже нормально, хотя бывают ситуации, что повторяется несколько раз.
2. Создал точно такой же проект, и ничего не мерцает :confused:.
Спасибо всем откликнувшимся. Сейчас сижу сравниваю коды двух проектов, для выяснения причин такого поведения.
насчет мерцания: на разных компах может быть по разному из за его мощности и загруженности, когда то сталкивалась с таким.
насчет мерцания: на разных компах может быть по разному из за его мощности и загруженности, когда то сталкивалась с таким.
Скорее всего это именно такая ситуация, т.к. на обоих компах установлены MS .NET Framework 3.5 SP1 и MS Visual C# 2005 Express Edition. В общем-то, практически одно и тоже, кроме ОС и железо отличается малость.
Я так понял, что лучше реализовывать все на одной форме (MDI Container, с использованием TabControl'ов и т.д.), там как я заметил мерцание редкость.
Всем огромное спасибо за помощь и советы.