Mit einem ListView, muss ich (große) Symbole für ein Array von ausführbaren Dateien anzeigen.Möglichkeiten zum Anzeigen von Exe-Icons in einem ListView
Gibt es einen Standard Weg dies zu tun/ein "Muster" (ob Design oder anders)?
Eine Falte: Diese .exes sollten NUR aus diesem ListView ausgeführt werden. Wenn eine Person über den Explorer zur EXE-Datei navigieren soll, sollte sie von dort nicht ausgeführt werden können. IOW, der Benutzer muss sich am System anmelden, bevor er das Array der Programmsymbole sieht (und was er sieht, hängt von seiner Rolle ab) *, und das ist das EINZIGE Gateway, um diese Apps auszuführen.
- Also müssen diese App-Symbole programmgesteuert hinzugefügt werden.
Ideen?
Update:
Der Versuch, den Code zu verwenden, unten, um ein "Quick and Dirty" App zu erstellen.
Hier ist mein Code:
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.IO;
namespace ListViewWithAppIcons {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
DirectoryInfo dir = new DirectoryInfo(@"C:\SpotRun");
foreach (FileInfo file in dir.GetFiles()) {
try {
this.imageList1.Images.Add(Image.FromFile(file.FullName));
} catch {
Console.WriteLine("This is not a Duck-billed Platypus");
}
}
this.listView1.View = View.LargeIcon;
this.imageList1.ImageSize = new Size(32, 32);
this.listView1.LargeImageList = this.imageList1;
//or
//this.listView1.View = View.SmallIcon;
//this.listView1.SmallImageList = this.imageList1;
for (int j = 0; j < this.imageList1.Images.Count; j++) {
ListViewItem item = new ListViewItem();
item.ImageIndex = j;
this.listView1.Items.Add(item);
}
}
}
}
..und hier ist das "durch ein Werkzeug generierter Code" (nicht ich, das andere Werkzeug):
namespace ListViewWithAppIcons {
partial class Form1 {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.listView1 = new System.Windows.Forms.ListView();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.SuspendLayout();
//
// listView1
//
this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.listView1.Location = new System.Drawing.Point(0, 0);
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(555, 408);
this.listView1.TabIndex = 0;
this.listView1.UseCompatibleStateImageBehavior = false;
//
// imageList1
//
this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(555, 408);
this.Controls.Add(this.listView1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ImageList imageList1;
}
}
Pause in mehrere Fragen nach unten. 1. Die Listenansicht zeigt uns den Code, der nicht funktioniert. 2. Es gibt keine "Muster", um eine Listenansicht mit Zeilen zu füllen, die Symbole enthalten, die nur die Listenansicht an eine Datenquelle binden. 3. exe's nur von dieser ListView ausführbar ist eine separate Frage alle zusammen. ps Ich habe dich nicht runtergeschmissen, aber ich werde dich nicht wieder auf Null bringen. –
Es würde viel mehr als eine Aufwertung brauchen, um mich wieder auf Null zu bringen, mein Freund. –
Ich habe keinen Code, der nicht funktioniert, ich habe mich nur gefragt, ob das Problem bereits von klügeren Leuten gelöst wurde. Ich bin ein gutes Stück vom Weg dorthin, aber nicht überzeugt, dass mein Weg "sehr sportlich" ist (zufällige/überflüssige Princess Bride-Referenz). –