Почему этот пробел отображается в моем ListView? - PullRequest
1 голос
/ 19 июля 2010

У меня есть приложение C # WinForm, в котором я использую ListView, чтобы показать, какие файлы были загружены в мою базу данных. Я использую один и тот же код каждый раз, вызывая LoadFileAttachments() при загрузке формы, и снова каждый раз, когда обновляю список или добавляю или удаляю дополнительные вложения из базы данных. (Эта часть прекрасно работает)

Если у меня возникла проблема, это сторона графического интерфейса ListView. При первом запуске LoadFileAttachments() и заполнении ListView между левой стороной ListView и вложениями возникает разрыв. При последующих вызовах пропасть исчезает.

Как вы можете видеть ниже, столбцы не меняют ширину, просто кажется, что есть зазор. Я попытался захватить событие MouseClick объекта ListView и использовать ListViewHitTestInfo, чтобы увидеть, что там было, и он показывает элемент, по которому я щелкаю рядом, со свойством «Selected = false». Нажатие на значок или текст приводит к тому, что элемент выбирается, но не в промежутке.

Что вызывает разрыв?

Скриншот:

Скриншот разрыва / без разрыва http://img831.imageshack.us/img831/4054/fileattachments.png

Код, который я звоню каждый раз:

private void LoadFileAttachments()
{
    attachmentListView.Items.Clear();
    ImageList iconList = new ImageList();
    attachmentListView.LargeImageList = iconList;
    attachmentListView.SmallImageList = iconList;
    attachmentListView.StateImageList = iconList;

    FileAttachmentInfo[] fileAttach = dbAccess.RetrieveAttachedRecords(loadPNGid.Value);
    foreach (FileAttachmentInfo file in fileAttach)
    {
        ListViewItem item = new ListViewItem(file.FileName);
        item.Tag = file.RowID;
        iconList.Images.Add(file.FileExtention, ExtractIcons.GetIconImage(file.FileExtention));
        item.ImageKey = file.FileExtention;
        item.SubItems.Add(GetFileTypeDescriptors.GetFileDescriptor(file.FileExtention));
        item.SubItems.Add(Conversions.FileSizeToString(file.FileSize));
        item.SubItems.Add(file.DateAdded.ToShortDateString());
        attachmentListView.Items.Add(item);
    }

    if (attachmentListView.Columns.Count == 0)
    {
        attachmentListView.Columns.Add("Attachment", 150);
        attachmentListView.Columns.Add("File type", -2);
        attachmentListView.Columns.Add("Size", -2);
        attachmentListView.Columns.Add("Date added", -2);
    }
}

Это код в файле конструктора:

// 
// attachmentListView
// 
this.attachmentListView.AllowColumnReorder = true;
this.attachmentListView.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.attachmentListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.attachmentListView.Location = new System.Drawing.Point(0, 0);
this.attachmentListView.MultiSelect = false;
this.attachmentListView.Name = "attachmentListView";
this.attachmentListView.Size = new System.Drawing.Size(440, 301);
this.attachmentListView.TabIndex = 0;
this.attachmentListView.TileSize = new System.Drawing.Size(188, 130);
this.attachmentListView.UseCompatibleStateImageBehavior = false;
this.attachmentListView.View = System.Windows.Forms.View.Details;
this.attachmentListView.DoubleClick += new System.EventHandler(this.attachmentListView_DoubleClick);
this.attachmentListView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.attachmentListView_MouseClick);

Ответы [ 3 ]

3 голосов
/ 19 июля 2010

Я полагаю, что проблема вызвана тем, что вы установили свойство StateImageList. Согласно документации ListView.StateImageList , StateImageList представляет собой дополнительный список изображений, который отображается рядом с SmallImageList.

Свойство StateImageList позволяет указать список изображений, содержащий изображения, которые будут использоваться для представления состояния элемента приложения в элементе управления ListView. Состояния изображения отображаются слева от значка для элемента. Вы можете использовать изображения состояний, такие как отмеченные и не отмеченные флажки, для указания состояний элементов, определенных приложением. Изображения состояний видны во всех представлениях элемента управления ListView.

Попробуйте закомментировать и посмотреть, решит ли это вашу проблему.

1 голос
/ 19 июля 2010

Изменится ли он, если вы явно установите IndentCount на ListViewItem в 0 при их создании?

Новый ответ на основании расследования

Я думаю, что это связано с ImageList. В конструкторе я могу получить аналогичное поведение, добавляя и удаляя список изображений. Он не будет решен, пока ListView не будет реконструирован.

Я бы добавил ImageList к ListView в начале, а затем просто очищал и гидратировал тот же ImageList несколько раз.

0 голосов
/ 19 июля 2010

Будет ли иметь значение, если вы укажете горизонтальное выравнивание?

attachmentListView.Columns.Add("Name", -2, HorizontalAlignment.Left);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...