Aber du kannst dir einen Wrapper schreiben, der mittels ISeriazable und IXmlSerizable seinen Inhalt (den der ImageList) in dein gewünschten Format schreibt.
Der Weg ist für mich zu lang, ich kann es kaum glauben, dass in .Net keine Möglichkeit besteht, die Images einer Liste zu speichern...
Wenn du alle 18K Knoten durchgehen musst -- dann ist es doch egal, in welcher Reihenfolge, einen schnelleren Algorithmus gibt es hier nicht.
Wenn du das Durchgehen schneller machen möchtest, empfiehlt es sich, den Baum in 3-4 Unterbäume aufzuteilen und die mit separaten Threads durchgehen. Das sollte dann schneller laufen, besonders wenn dein CPU mehrkernig ist.
Ich würde das Passwort einfach hashen und Hash im Programm speichern. Bei der Passwortabfrage hashst du das vom Benutzer eingegebene Passwort noch mal und vergleichst mit deinem gespeicherten Hash. Wenn die übereinstimmen, dann sollten auch die Passwörter stimmen.
Was du gerade machst heißt "Tiefensuche". Eine andere Möglichkeit wäre "Breitensuche". Die beiden sind gleich schnell, die Breitensuche wird u.A. dort verwendet, wo die zu Wurzel nah liegenden Knoten in der ersten Reihe aktualisiert werden sollen.
Danke für den Tipp, das funktioniert bei mir aber auch nicht.
Folgender Code:
// writing icons into "icons.dat"
using (FileStream streamWriter = new FileStream("..\\ini\\icons.dat", FileMode.Create) )
{
BinaryFormatter binIcons = new BinaryFormatter();
try
{
binIcons.Serialize(streamWriter, SmallIconList);
}
catch (SerializationException e)
{ }
}
generiert nur die Datei icons.dat, die unabhängig vin der ImageList-Größe immer 17 bytes groß und nicht mehr deserialisiert werden kann.
Was mache ich dann falsch?
Danke im Voraus,
Alexander.
Ich möchte eine ImageList serialisieren, der folgende Code, der in vielen anderen Fällen funzt, verursacht die "InvalidOperation"-Ausnahme.
// writing icons into "icons.xml"
using (TextWriter streamWriter = new StreamWriter("..\\ini\\icons.xml", false))
{
XmlSerializer xmlFileTypes = new XmlSerializer(typeof(ImageList));
TextWriter textFileTypes = new StringWriter();
xmlFileTypes.Serialize(textFileTypes, SmallIconList);
streamWriter.Write(textFileTypes);
}
Wie kann ich dann die ImageList doch in eine externe Datei schreiben?
Gibt es echt soetwas wie MCP-Prüfungen bzw. allgemeine Prüfungen für C#?
Ich zweifle stark daran, dass man eine separate Prüfung nur für pure C# hat. Eine allgemeine .Net Prüfung gibt es auf jeden Fall, und die werde ich auch bald ablegen.
Bei meinem jetzigen Chef war es auch bisschen komisch. Ich bin ja Facharzt vom Beruf (Kinderneurologe), habe mich aber als Programmierer beworben. Der meinte "Na, ein richtig guter Programmierer ist selten Programmierer vom Beruf" 😉 Wie seltsam die Aussage sein mag, stimmt es zumindest für unsere Firma...
Äh so ne doofe Frage, du hast die ListView mit minestens einen Header gefüllt oder, sehe erst grad jetzt das diese ja leer ist (muss man aber auch genauer hinsehen)?
Danke, das war's!
Der Fehler lag an das Zurücksetzen vom ListView, hier sollte man nicht
lstTargetList.Clear();
sondern
lstTargetList.Items.Clear();
schreiben. Jetzt geht es... die Bilder funktionieren allerdings noch nicht, mal sehen, warum...
Siehe Databinding auf Objekte 🙂
Ja, ich vertiefe mich langsam in die Richtung, habe sogar vor Kurzem Windows Presentation Foundation MCP-Prüfung abgelegt, jedoch fehlen mir noch die Grundlagen vom C#...
Erst mal vielen Dank für die schnelle Antwort!!!
Dann solltest die Items sehen.
Das ändert leider nichts. Die View-Eigenschaft wurde aber im Designer auf Details umgestellt und bleibt auch so.
Was mich nur wundert, warum löscht du alle hinzugefügten Items aus deiner ListView um sie wieder danach hinzuzufügen. Das ist nicht nötig, deine RegisteredFileTypes kannst dir spaaren. Die ListView kann objecte halten.
Vielen Dank für den Tipp!
Ich kann aber diese Lösung nicht direkt anwenden, da
public struct FileTypes
{
public string FileExt; // File extension
public string FileDesc; // File description
public int ImageIndex; // Image index
public string Prog; // Programm name
public bool FUseCmd; // Flag: use command line argument
public string Cmd; // The command line argument to use
public bool FUseVerb; // Flag: use action verb
public string Verb; // The verb to use
public bool FUseSendKeys; // Flag: to use SendKeys
public string SendKeys; // SendKeys sequence
} ;
In meiner statischen Klasse difiniere ich ein Generik
public static List<FileTypes> RegisteredFileTypes = new List<FileTypes>();
Der Trick besteht aber darin, das in der ListView 2 Spalten mit den Werten aus meiner Struct gefüllt werden muss. Deswegen reicht das Überschreiben von ToString() nicht aus (oder ginge es, wenn der Rückgabewert aus zwei durch "|" getrennten Einträgen bestünde, wie z.B. beim OpenFileDialog.Filter?).
Ich bin mir absolut sicher, dass man das Ganze viel eleganter machen kann und werde für jeden Tipp sehr dankbar!
In meinem Projekt habe ich ein Formular mit ListView und eine weitere Klasse, die dieses Steuerelement mit Einträgen füllt. Aus einem Ereignis in dem Formular wird die Instanz von ListView-Objekt auf folgende Weise übergeben:
if (fdNewType.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
DPrintJob.AddNewType(fdNewType.FileName);
DPrintJob.FeedListView(lstFileTypes);
}
Hier ist wie das ListView gefüllt wird:
public static void FeedListView(ListView lstTargetList)
{
lstTargetList.Clear();
for (int i = 0; i < RegisteredFileTypes.Count; i++)
{
ListViewItem newType = new ListViewItem(RegisteredFileTypes[i].FileExt);
newType.SubItems.Add(RegisteredFileTypes[i].FileDesc);
lstTargetList.Items.Add(newType);
}
}
Wenn ich dann nach dem Ausfüllen vom ListView Items.Count überprüfe, da sehe ich die richtige Anzahl von Elementen, einzelte Elemente sind auch über Items[] ansprechbar.
Jedoch sehe ich in dem Steuerelement in meinem Formular nur die ausgegraueten Spaltenüberschriften. Was komisch ist, dass diese Oberschriften vor dem Einfügen erstes Listeintrages normal dargestellt werden, erst dann werden sie ausgegraut.
Vielen Dank im Voraus,
Alexander.