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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListView свой рисовальщик и проблемма с первой коо, непонятное отношение listView'а к первой 
:(
    Опции темы
interv
  Дата 20.4.2012, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть ListView, установлены значения
  • AllowColumnReorder=true
  • OwnerDraw=true
  • View=Details
  • HideSelection=false
и переопределены рисовальщики
Код

public static void DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            if (e.ItemIndex < 0) return;
            DrawListViewSubItemEventArgs ne;
            //Если это убрать то вообще будет хлам
            if (e.ColumnIndex <= 0)
            {
                int x = 0;
                for (int i = 1; i < e.Item.ListView.Columns.Count; ++i)
                {
                    //e.Header.DisplayIndex
                    if (e.Item.ListView.Columns[i].DisplayIndex < e.Header.DisplayIndex)
                        x += e.Item.ListView.Columns[i].Width;
                }
                Rectangle rect = new Rectangle(x, e.Bounds.Top,
                                               e.Bounds.Width, e.Bounds.Height);
                ne = new DrawListViewSubItemEventArgs(e.Graphics,
                                                     rect,
                                                     e.Item,
                                                     e.SubItem,
                                                     e.ItemIndex,
                                                     e.ColumnIndex,
                                                     e.Header,
                                                     e.ItemState);
                ne.Graphics.Clip = new Region(rect);
            }
            else
                ne = e;
            ne.SubItem.BackColor = ne.Item.BackColor;
            ne.DrawBackground();
            if (ne.Item.Selected)
                ne.Graphics.FillRectangle(Brushes.Purple, ne.Bounds);
            else
                ne.Graphics.FillRectangle(new SolidBrush(ne.SubItem.BackColor), ne.Bounds);
            ne.DrawText();
        }

        public static void DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            e.DrawBackground();
            e.DrawText();
        }

Теперь меняем первую колонку с другой (неважно какой) и перетаскиваем горизонтальный бегунок чуть в право. Вуаля! Получается бред.
Причем косяк именно только с первой колонкой subitems[0]

Это сообщение отредактировал(а) interv - 20.4.2012, 12:24

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  trable.png 58,14 Kb
PM MAIL   Вверх
interv
Дата 20.4.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Решено через попу... Кому интересно:
Код

        public static void DrawItem(object sender, DrawListViewItemEventArgs e)
        {
            int x = e.Item.Bounds.X;
            int w = e.Item.ListView.Columns[0].Width;
            for (int i = 1; i < e.Item.ListView.Columns.Count; ++i)
            {
                if (e.Item.ListView.Columns[i].DisplayIndex < e.Item.ListView.Columns[0].DisplayIndex)
                    x += e.Item.ListView.Columns[i].Width;
            }
            string text = e.Item.Text;
            int cx, cy;
            e.Graphics.MeasureString(text, e.Item.Font, new SizeF(w, 10000), StringFormat.GenericDefault, out cx, out cy);
            bool tt = false;
            while (cy>1 && text.Length>0)
            {
                tt = true;
                text = text.Remove(cx - 1);
                e.Graphics.MeasureString(text+"...", e.Item.Font, new SizeF(w, 10000), StringFormat.GenericDefault, out cx, out cy);
                cx = text.Length;
            }
            Rectangle rect = new Rectangle(x, e.Bounds.Top,
                                           e.Bounds.Width, e.Bounds.Height);
            if (e.Item.Selected)
                e.Graphics.FillRectangle(Brushes.Purple, e.Bounds);
            else
                e.Graphics.FillRectangle(new SolidBrush(e.Item.BackColor), e.Bounds);
            e.Graphics.DrawString(text + (tt ? "..." : ""), e.Item.Font, new SolidBrush(e.Item.ForeColor), rect);
        }


        public static void DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            if (e.ItemIndex < 0) return;
            if (e.ColumnIndex == 0)
                return;
            e.SubItem.BackColor = e.Item.BackColor;
            if (e.Item.Selected)
                e.Graphics.FillRectangle(Brushes.Purple, e.Bounds);
            else
                e.Graphics.FillRectangle(new SolidBrush(e.SubItem.BackColor), e.Bounds);
            e.DrawText();
        }

        public static void DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            e.DrawBackground();
            e.DrawText();
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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