Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подвисание приложения на C# 
:(
    Опции темы
sadisasha
Дата 1.4.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.12.2006

Репутация: нет
Всего: нет



Такая ситуация на форме расположен ListView, ширина ColumnHeader сохраняеться в файл настроек. При изменении размера ColumnHeader
обрабатывается событие изменения ColumnHeader
Код

private void listView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
        {
            this.OpenSettings(); // возвращаются первоначальные настройки, тоесть ширина Columnheader
        }

Приложение не дает пользователю поменять ширину столбцов, и вот в это время происходит подвисание, столбцы встают на свои места, а изменённый курсор не которое время остается. И в это время я не могу работать с ListView.
В чём может быть причина?

Это сообщение отредактировал(а) sadisasha - 1.4.2009, 14:44
PM MAIL   Вверх
Idsa
Дата 1.4.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



sadisasha, а не входит ли приложение в рекурсию? Вы обрабатываете ColumnWidthChanged, изменяя внутри него ширину столбца, в результате чего опять будет вызван ColumnWidthChanged и т. д.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
sadisasha
Дата 1.4.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.12.2006

Репутация: нет
Всего: нет



Цитата(Idsa @ 1.4.2009,  14:47)
sadisasha, а не входит ли приложение в рекурсию? Вы обрабатываете ColumnWidthChanged, изменяя внутри него ширину столбца, в результате чего опять будет вызван ColumnWidthChanged и т. д.

Сделал вот так
Код

        private void listView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
        {
            int index = e.ColumnIndex;
            switch (index)
            {
                case 0:
                    columnHeader1.Width = mainSettings.Column1Width;
                    break;
                case 1:
                    columnHeader2.Width = mainSettings.Column2Width;
                    break;
                case 2:
                    columnHeader3.Width = mainSettings.Column3Width;
                    break;
            }
        }

Помогло!
Но всё равно, я как новичек ничего непонял.
PM MAIL   Вверх
sadisasha
Дата 5.4.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 15.12.2006

Репутация: нет
Всего: нет



Цитата(sadisasha @ 1.4.2009,  15:19)
Цитата(Idsa @ 1.4.2009,  14:47)
sadisasha, а не входит ли приложение в рекурсию? Вы обрабатываете ColumnWidthChanged, изменяя внутри него ширину столбца, в результате чего опять будет вызван ColumnWidthChanged и т. д.

Сделал вот так
Код

        private void listView_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
        {
            int index = e.ColumnIndex;
            switch (index)
            {
                case 0:
                    columnHeader1.Width = mainSettings.Column1Width;
                    break;
                case 1:
                    columnHeader2.Width = mainSettings.Column2Width;
                    break;
                case 2:
                    columnHeader3.Width = mainSettings.Column3Width;
                    break;
            }
        }

Помогло!
Но всё равно, я как новичек ничего непонял.

Этот код отказывается работать в XP, отладчик пишет что то типа незаконченный цикл или рекурсия. Сейчас я понял почему это происходит, но как обойти. Может есть какой другое решение? т.к метод listView_ColumnWidthChanged использовать нельзя.
PM MAIL   Вверх
Idsa
Дата 6.4.2009, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



sadisasha, с WinForms давно не имел дел... но по-моему рекурсию можно обойти, обработав ColumnWidthChanging. Если мне не изменяет память, при изменении e.NewWidth повторного вызова не происходит.
Код

        private void listView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
        {
            int index = e.ColumnIndex;
            switch (index)
            {
                case 0:
                    e.NewWidth = mainSettings.Column1Width;
                    break;
                case 1:
                    e.NewWidth = mainSettings.Column2Width;
                    break;
                case 2:
                    e.NewWidth = mainSettings.Column3Width;
                    break;
            }
        }



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0719 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.