2013-03-22 69 views
3

试图把在ObjectListview图标,这是我的代码,其中的图标应该已经放:ObjectListView显示图标

objectListView1.SmallImageList = imageList1; 

     deleteColumn.IsEditable = true; 
     deleteColumn.ImageGetter = delegate 
     { 
      return 0; 
     }; 
     deleteColumn.AspectGetter = delegate 
     { 
      return "Delete"; 
     }; 

imageList1已有的图片,这个代码应该把旁边的“删除”图标,但它没有出现,通过食谱和谷歌浏览,我仍然不知道。谁能帮我?

这是案件的全部形式的代码需要:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Security.Cryptography; 
using System.IO; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
     objectListView1.AllowDrop = true; 
     objectListView1.DragEnter += new DragEventHandler(objectListView1_DragEnter); 
     objectListView1.DragDrop += new DragEventHandler(objectListView1_DragDrop); 
     objectListView1.CellEditActivation = BrightIdeasSoftware.ObjectListView.CellEditActivateMode.SingleClick; 
     objectListView1.CellEditStarting += deleteItems; 
     objectListView1.SmallImageList = imageList1; 

     deleteColumn.IsEditable = true; 
     deleteColumn.ImageGetter = delegate 
     { 
      return 0; 
     }; 
     deleteColumn.AspectGetter = delegate 
     { 
      return "Delete"; 
     }; 
    } 

    private void objectListView1_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      e.Effect = DragDropEffects.Copy; 
     } 
     else 
     { 
      e.Effect = DragDropEffects.None; 
     } 
    } 

    private void objectListView1_DragDrop(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormats.FileDrop, true)) 
     { 
      string[] droppedFiles = (string[]) e.Data.GetData(DataFormats.FileDrop); 
      foreach (string path in droppedFiles) 
      { 
       if (File.Exists(path)) 
       { 
        FileObject fo = new FileObject(path, "added later"); 
        objectListView1.AddObject(fo); 
       } 
      } 
     } 
    } 

    private void deleteItems(object sender, BrightIdeasSoftware.CellEditEventArgs e) 
    { 
     if(e.Column == deleteColumn) 
     { 
      e.Cancel = true; 
      objectListView1.RemoveObject(e.RowObject); 
     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

} 

}

+0

你看过MSDN上的文档吗?他们通常提供足够的例子。看[这里](http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.smallimagelist.aspx)和[这里](http://msdn.microsoft.com/en-我们/库/ system.windows.forms.imagelist.aspx)。 – 2013-03-22 08:40:53

+0

ObjectListView实际上并不是Microsoft产品,并且问题似乎与它相关,而不是ImageList。 – 2013-03-22 08:55:54

+0

谢谢你们,问题解决了,我的'ShowImageOnSubItems'设置为false,非常感谢你在 – user2002495 2013-03-22 14:51:44

回答

6

为了让图像在一列旁边的文字出现,你必须:

  1. 连接ObjectListView改为ImageList(使用SmallImageList属性);
  2. 为必须显示图像的列安装ImageGetter委托人;
  3. 确保在ImageList中有实际的图像。

这样做,图像会出现(我刚刚测试过)。

虽然有一个问题。从您的问题中,我怀疑“删除”列可能不是ObjectListView中的第一列。上述步骤仅允许您在第一列显示图像。对于后面的列,您必须将ShowImagesOnSubItems属性设置为True。这可能吗?

+0

以下的答案,不是,删除列在第三列(客户端的要求,不能改变它) – user2002495 2013-03-22 14:47:42

+2

嘿谢谢,我错过了'ShowImagesOnSubItems',真的是一个问题,因为没有任何教程(或者我可能还没有看清楚)。非常感谢 :) – user2002495 2013-03-22 14:50:30