Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Мерцание при работе с двумя формами.

22K
28 июля 2009 года
kotelius
75 / / 08.08.2008
Доброго времени суток, форумчане!

Никак не могу избавится от мерцания окон в приложении. Среда: С#
Практически все на форуме перелистал, есть похожие темы, все что в них написано перепробывал, но результата нету.
В общем-то, к примеру, есть две формы. На каждой форме по кнопке.
При нажатии на кнопку на Форме1, она скрывается и открывается Форма2, соответственно так же с Формы2 на Форму1.
[COLOR="Red"]DoubleBuffered[/COLOR] стоит в [COLOR="Blue"]True[/COLOR] как для Формы1, так и для Формы2.
 
Код:
[COLOR="Blue"]private void[/COLOR] button1_Click([COLOR="#0000ff"]object[/COLOR] sender, [COLOR="MediumTurquoise"]EventArgs[/COLOR] e)
        {
            [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();
        }

После многократных попыток избавится от мерцания выяснилось что оно связано с скрытием формы, с которой мы переходим. Т.е. из-за вот этого:
 
Код:
[COLOR="#48d1cc"]Form1[/COLOR].ActiveForm.Hide();

Возможно ли избавится от мерцания, или же отказаться от Hide()?
241
30 июля 2009 года
Sanila_san
1.6K / / 07.06.2005
А если попробовать что-то вроде
 
Код:
Form1.ActiveForm.Visible = false;
1.9K
30 июля 2009 года
GreenRiver
451 / / 20.07.2008
Как-то не очень понятно, что мерцает-то?
Может быть попробовать так:
 
Код:
private void button1_Click(object sender, EventArgs e)
        {
            Form2 Frm2 = new Form2();
            Point point = new Point(Location.X, Location.Y);
            Frm2.Location = point;
            Form1.Hide();
            Frm2.ShowDialog();
        }
22K
30 июля 2009 года
kotelius
75 / / 08.08.2008
Всем привет!
Цитата: Sanila_san
А если попробовать что-то вроде
 
Код:
Form1.ActiveForm.Visible = false;


Sanila_san данный вариант тоже был опробован, результат такой же как и с Hide().

Цитата: GreenRiver
Как-то не очень понятно, что мерцает-то?
Может быть попробовать так:
 
Код:
private void button1_Click(object sender, EventArgs e)
        {
            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] и хотел предложить изменить очередность выполнения кода, то в данном контексте, я также не вижу смысла. (Скорее всего моего опыта еще недостаточно чтобы понять его :)).

Цитата: GreenRiver
Как-то не очень понятно, что мерцает-то?

На форме Form2 расположено: 7 textBox'ов, 2 comboBox'а, 1 listBox, 1 pictureBox, 2 groupBox'а. Я предполагал, что из-за большого количества объектов расположенных на Form2 происходит мерцание, но когда заккоментил [COLOR="Blue"]Form1.ActiveForm.Hide();[/COLOR], то Form1 не пряталась, а была на background'e и мерцания не было.

Предполагал также, что это может быть из-за очень сильно тормознутого компа, но это опроверглось после проверки на нескольких машинах.

P.S. Сейчас ищу пути реализовать все на одной форме (MdiContainer или что подобное), но всеже очень интересно почему так происходит.

1.9K
02 августа 2009 года
GreenRiver
451 / / 20.07.2008
Поправка:
 
Код:
this.Hide();

В любом случае не удается повторить Ваш баг - у меня ничего не мерцает. Я даже не понимаю в какой момент это происходит? При каждой перерисовки Form2?
22K
02 августа 2009 года
kotelius
75 / / 08.08.2008
Цитата: GreenRiver

В любом случае не удается повторить Ваш баг - у меня ничего не мерцает. Я даже не понимаю в какой момент это происходит? При каждой перерисовки Form2?


Странная какая-то ситуация. Я уже и сам ничего не понимаю.
1. Запустил проект, для перепроверки, так мерцание происходит во время первой перерисовки Form2, а потом уже нормально, хотя бывают ситуации, что повторяется несколько раз.
2. Создал точно такой же проект, и ничего не мерцает :confused:.

Спасибо всем откликнувшимся. Сейчас сижу сравниваю коды двух проектов, для выяснения причин такого поведения.

242
02 августа 2009 года
Оlga
2.2K / / 04.02.2006
можно попробовать создать Форму 2 в невидимом режиме, а затем сделать видимой.
насчет мерцания: на разных компах может быть по разному из за его мощности и загруженности, когда то сталкивалась с таким.
22K
03 августа 2009 года
kotelius
75 / / 08.08.2008
Проблема найдена (я так думал:confused:). Вчера сидел пересматривал код, формы и все остальное, и обнаружил что в окошке Properties для Form1 есть слишком много элементов, в то время как на форме было расположено только TabControl, TabPage и Button. Посмотрел я Form1.Designer.cs и увидел, что там происходит инициализация компонент, которых нету на форме, т.е. они когда были, но потом я их удалил, но почему-то код инициализации остался. После чистки лишнего кода, все стало работать нормально, даже можно сказать идеально. Но, сегодня запустил тот же проект на другом компе и снова те же проблемы :mad:.
Цитата: Оlga

насчет мерцания: на разных компах может быть по разному из за его мощности и загруженности, когда то сталкивалась с таким.


Скорее всего это именно такая ситуация, т.к. на обоих компах установлены MS .NET Framework 3.5 SP1 и MS Visual C# 2005 Express Edition. В общем-то, практически одно и тоже, кроме ОС и железо отличается малость.

Я так понял, что лучше реализовывать все на одной форме (MDI Container, с использованием TabControl'ов и т.д.), там как я заметил мерцание редкость.

Всем огромное спасибо за помощь и советы.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог