J'ai une application C# WinForm où j'utilise un ListView pour montrer quels fichiers ont été téléchargés dans ma base de données. J'utilise le même code à chaque fois, en appelant LoadFileAttachments()
lorsque le formulaire se charge, et à chaque fois que j'actualise la liste, ou ajoutez ou supprimez des pièces jointes supplémentaires de la base de données. (Cette partie fonctionne très bien)Pourquoi cet écart apparaît-il dans ma ListView?
Lorsque j'ai un problème, c'est le côté GUI de ListView. La première fois que LoadFileAttachments()
s'exécute et remplit ListView, il existe un espace entre le côté gauche de ListView et les pièces jointes. Lors d'appels ultérieurs, l'écart disparaît.
Comme vous pouvez le voir ci-dessous, les colonnes ne changent pas de largeur, il semble juste y avoir un écart. J'ai essayé de capturer l'événement MouseClick du ListView et en utilisant un ListViewHitTestInfo pour voir ce qui était là, et il montre l'article sur lequel je clique à côté, avec la propriété de "Selected = false". En cliquant sur l'icône ou le texte, l'élément est sélectionné, mais pas dans l'espace.
Quelle est la cause de l'écart?
Screenshot:
Screenshot of the gap/no gap http://img831.imageshack.us/img831/4054/fileattachments.png
Le code que j'appelle chaque fois:
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);
}
}
Voici le code dans le fichier concepteur:
//
// 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);
Pourquoi créez-vous un ListViewGroup? La propriété CheckBoxes du LV a-t-elle déjà été activée? –
@Hans Non, je n'ai jamais utilisé les CheckBox avec cette ListView, et ListViewGroup ne devrait pas être là! Je ne suis pas sûr de savoir pourquoi je l'ai mis là (probablement essayer de faire quelque chose de différent à un moment donné), mais je ne l'appelle jamais. Merci d'avoir attrapé cela - enlevé ici et de ma source, même problème. –
Si vous définissez la vue sur, par exemple, LargeIcon et retournez à Details, vous l'écraserez assez solidement. –