Cómo: Extraer el icono asociado a un archivo en formularios Windows Forms

Actualización: noviembre 2007

Muchos archivos tienen iconos incrustados que proporcionan una representación visual del tipo de archivo asociado. Por ejemplo, los documentos de Microsoft Word contienen un icono que los identifica como documentos de Word. Al mostrar los archivos en un control de lista o control de tabla, quizás desee mostrar el icono que representa el tipo de archivo al lado de cada nombre de archivo. Esto es fácil con el método ExtractAssociatedIcon.

Ejemplo

En el ejemplo de código siguiente se muestra cómo extraer el icono asociado a un archivo y cómo mostrar el nombre de archivo y el icono asociado en un control ListView.

Private listView1 As ListView
Private imageList1 As ImageList


Public Sub ExtractAssociatedIconEx()

    ' Initialize the ListView, ImageList and Form.
    listView1 = New ListView()
    imageList1 = New ImageList()
    listView1.Location = New Point(37, 12)
    listView1.Size = New Size(161, 242)
    listView1.SmallImageList = imageList1
    listView1.View = View.SmallIcon
    Me.ClientSize = New System.Drawing.Size(292, 266)
    Me.Controls.Add(Me.listView1)
    Me.Text = "Form1"

    ' Get the c:\ directory.
    Dim dir As New System.IO.DirectoryInfo("c:\")

    Dim item As ListViewItem
    listView1.BeginUpdate()
    Dim file As FileInfo
    For Each file In dir.GetFiles()

        ' Set a default icon for the file.
        Dim iconForFile As Icon = SystemIcons.WinLogo

        item = New ListViewItem(file.Name, 1)

        ' Check to see if the image collection contains an image
        ' for this extension, using the extension as a key.
        If Not (imageList1.Images.ContainsKey(file.Extension)) Then

            ' If not, add the image to the image list.
            iconForFile = System.Drawing.Icon.ExtractAssociatedIcon(file.FullName)
            imageList1.Images.Add(file.Extension, iconForFile)
        End If
        item.ImageKey = file.Extension
        listView1.Items.Add(item)

    Next file
    listView1.EndUpdate()
End Sub
ListView listView1;
ImageList imageList1;

public void ExtractAssociatedIconEx()
{
    // Initialize the ListView, ImageList and Form.
    listView1 = new ListView();
    imageList1 = new ImageList();
    listView1.Location = new Point(37, 12);
    listView1.Size = new Size(151, 262);
    listView1.SmallImageList = imageList1;
    listView1.View = View.SmallIcon;
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Controls.Add(this.listView1);
    this.Text = "Form1";

    // Get the c:\ directory.
    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"c:\");

    ListViewItem item;
    listView1.BeginUpdate();

    // For each file in the c:\ directory, create a ListViewItem
    // and set the icon to the icon extracted from the file.
    foreach (FileInfo file in dir.GetFiles())
    {
        // Set a default icon for the file.
        Icon iconForFile = SystemIcons.WinLogo;

        item = new ListViewItem(file.Name, 1);
        iconForFile = Icon.ExtractAssociatedIcon(file.FullName);

        // Check to see if the image collection contains an image
        // for this extension, using the extension as a key.
        if (!imageList1.Images.ContainsKey(file.Extension))
        {
            // If not, add the image to the image list.
            iconForFile = System.Drawing.Icon.ExtractAssociatedIcon(file.FullName);
            imageList1.Images.Add(file.Extension, iconForFile);
        }
        item.ImageKey = file.Extension;
        listView1.Items.Add(item);
    }
    listView1.EndUpdate();
}

Compilar el código

Para compilar el ejemplo:

  • Pegue el código anterior en un formulario Windows Forms y llame al método ExtractAssociatedIconExample desde el constructor del formulario o al método de control del evento Load.

    Necesitará asegurarse de que su formulario importa el espacio de nombres System.IO.

Vea también

Otros recursos

Imágenes, mapas de bits y metarchivos

ListView (Control, formularios Windows Forms)