У меня есть приложение 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);