Bestanden (met icoon) slepen naar C# programma

Status
Niet open voor verdere reacties.

Rozenknopje

Gebruiker
Lid geworden
25 jun 2007
Berichten
46
Beste mensen :D

Ik ben nu al een lange tijd bezig met iets wat me maar niet wil lukken... :(

Wat ik wil is dat ik bestanden kan slepen naar mijn C# programma. Nou is dat tot nu toe allemaal gelukt door middel van een listbox, en de events DragDrop en DragEnter. Als ik nu bestanden sleep, dan krijg ik de volledige path en de filename.

Nu vroeg ik me af hoe je je programma zodanig kan instellen dat als je een bestand er naar toe sleept, dat je dan ook de icoon te zien krijgt? Bijvoorbeeld bij een .txt bestand krijg je een kladblok icoontje te zien naast de path file.
Een beetje zoals dit:
<icoon> <path/filename>
<icoon> <path/filename>
<icoon> <path/filename>
<icoon> <path/filename>

Als iemand mijn code wil zien of een screenshot van het programma zelf, laat het dan maar weten! Alvast hartstikke bedankt voor de antwoorden! ^^

PS: Ik heb alleen tutorial gevonden op de Microsoft site, maar die gaat er van uit dat je veel meer ervaren bent. Dus ik kwam er niet echt uit..
 
Probeer dit:


Bron: http://stackoverflow.com/questions/462270/get-file-icon-used-by-shell

[CPP]Public Function IconFromFilePath(filePath As String) As Icon
Dim result As Icon = Nothing
Try
result = Icon.ExtractAssociatedIcon(filePath)
Catch ''# swallow and return nothing. You could supply a default Icon here as well
End Try
Return result
End Function
[/CPP]

Zo gebruiken:
[CPP] Dim filePath As String = "C:\test.docx"
Dim TheIcon As Icon = IconFromFilePath(filePath)

If TheIcon IsNot Nothing Then
''#Save it to disk, or do whatever you want with it.
Using stream As New System.IO.FileStream("C:\test.ico", IO.FileMode.CreateNew)
TheIcon.Save(stream)
End Using
End If[/CPP]

Dat kun je zelf wel naar C# zetten toch? ;)
 
Het is mij gelukt om deze om te zetten naar C#. Echter is dit wel om alle bestanden uit C# te voorschijn te halen. Is het ook mogelijk als je een individueel bestand naar mijn C# programma sleept, dat alleen deze icoon/bestandsnaam te voorschijn komt? :)
 
Dat kan nu toch? Gewoon het pad in de functie invullen. ;)
 
Maar is het niet mogelijk dat mijn C# programma automatisch detecteert wat het path/bestandsnaam is, nadat je het erin sleept? Dus zonder dat je de path en bestandsnaam hoeft in te vullen in de code.
 
Tuurlijk. Geef je code eens.
 
Hierbij de code.. Ik zou graag willen dat deze code ziet hoe de file heet en alleen deze filename in de listview zet. :p Als je meer erover wilt weten, vraag maar.. Hartstikke bedankt voor de moeite alvast!

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


private void listView1_DragDrop(object sender, DragEventArgs e)
        {
            // Get the c:\ directory.
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"N:\Desktop");

            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 (System.IO.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.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
            }
            listView1.EndUpdate();
        }
 
'k Heb je code aangepast:

Zo zou het moeten werken:

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

private void listView1_DragDrop_1(object sender, DragEventArgs e)
{
// Get the c:\ directory.
string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false);
listView1.BeginUpdate();

// For each file in the c:\ directory, create a ListViewItem
// and set the icon to the icon extracted from the file.

foreach (string file in FileList)
{
// Set a default icon for the file.
Icon iconForFile = SystemIcons.WinLogo;
ListViewItem item;

item = new ListViewItem(System.IO.Path.GetFileName(file), 1);
iconForFile = Icon.ExtractAssociatedIcon(file);

// Check to see if the image collection contains an image
// for this extension, using the extension as a key.
if (!imageList1.Images.ContainsKey(System.IO.Path.GetExtension(file)))
{
// If not, add the image to the image list.
iconForFile =
System.Drawing.Icon.ExtractAssociatedIcon(file);
imageList1.Images.Add(System.IO.Path.GetExtension(file), iconForFile);
}
item.ImageKey = System.IO.Path.GetExtension(file);
listView1.Items.Add(item);
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}
listView1.EndUpdate();
}
}[/cpp]
 
Ik wilde even zeggen dat je code perfect werkt! Hartstikke bedankt voor je moeite!!! :love:
 
Graag gedaan, hoor :D
Zet je de vraag even op opgelost?

Als er nog problemen zijn hoor ik het wel ;).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan