Laden...

Profil von alaudo

myCSharp.de - Member Mitglied seit
A
alaudo
myCSharp.de - Member
5
Themen
16
Beiträge
Dabei seit
03.12.2007
Letzte Aktivität
vor 17 Jahren
Alter
46 Jahre
Erstellt vor 17 Jahren

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...

Erstellt vor 17 Jahren

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.

Erstellt vor 17 Jahren

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.

Erstellt vor 17 Jahren

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.

Erstellt vor 17 Jahren

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.

Erstellt vor 17 Jahren

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?

Erstellt vor 17 Jahren

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...

Erstellt vor 17 Jahren

Ä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#...

Erstellt vor 17 Jahren

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

  1. ListView wird in einem Formular gefüllt, die dynamisch erzeugt wird und nach Benutzereingabe auch freigegeben wird. Aus diesem Grund brauche ich einen Container, wo ich die Daten für die ganze Anwendungslaufzeit unterbringen kann.
  2. Ich komme aus der C-Welt und habe noch nicht so viel Erfahrung mit Objekten. RegisteredFileTypes wird auf folgende Weise deklariert:
   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!

Erstellt vor 17 Jahren

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.