Laden...
Q
Quallo myCSharp.de - Member
Anwendungsentwickler Nähe Bremen Dabei seit 12.01.2005 992 Beiträge
Benutzerbeschreibung

Forenbeiträge von Quallo Ingesamt 992 Beiträge

04.01.2006 - 10:05 Uhr

Eben nicht!

Das sagt doch alles hier:

As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.

Du darfst das in deiner Exe oder dll linken.
Es darf ein Programm sein, was die Bibliothek benutzt, aber es darf kein Programm sein, was lediglich(!!!) auf der Bibliothek basiert(Extremes Beispiel wäre das stumpfe Ableiten der Klasse und dann das komerzielle Vertreiben).

So habe ich das verstanden.

03.01.2006 - 20:38 Uhr

Charset.Ansi habe ich genommen.

Man kann bei String keine Byteposition angeben, die ungerade ist, das gibt einen Fehler beim ersten Instanzieren.
Vielleicht kann ich es beim Byte-Array.

ByValArray habe ich auch genommen, habe ich hier nur falsch gepostet.

Es kann doch nicht sein, dass die Bytes gerundet werden.
Das macht doch keinen Sinn. Bei Bits könnte ich das verstehen, wenn man die in Bytes packen will.

03.01.2006 - 17:59 Uhr

Bei folgendem kommt er auch durcheinander:


		[MarshalAs(UnmanagedType.ByValTStr, SizeConst=33)]
		public byte[] Text; //Als string habe ich das auch schon versucht
		[MarshalAs(UnmanagedType.I2)]
		public short Zahl;
		[MarshalAs(UnmanagedType.ByValTStr, SizeConst=11)]
		public string DatumText;

In Hex kodiert sieht die Datei so aus:
//Hier kommt der Text
57494E310020202020202020202020202020202020202020202020202020202020
//Hier kommt jetzt die Zahl
0000
//Hier kommt DatumText
32342E30392E3230303200

Als Text sieht das Ganze so aus: WIN1ttttttttttttttttttttttttttttXXX24.09.2002X
wobei X für Hex 0 steht.

Wenn ich Size Const auf 33 Stelle beginnt er die Zahl ein Byte zu spät zu "parsen"(es kommt 12800 raus, was Hex 00 32 entspricht).

Wenn es auf 32 steht nicht, beginnt er die Zahl ein Byte zu früh zu "parsen"(es kommt 32 raus, was Hex 20 00 entspricht).

Er nimmt also entweder 32 oder 34 Zeichen, aber keine 33.
gibt es nicht die Möglichkeit, ein fixes 33 Byte großes Array zu erstellen(schon zur Compilezeit?).
Wenn ich daraus eine class mache, statt einem struct und Text mit = new byte[33] initialisiere klappt es trotzdem nicht!

Nun ja, wenn ich String statt byte[] nehme habe ich auch Probleme.
Wohlgemerkt nur bei diesem Text. Bei anderen Strings in der gleichen Datei nicht.

Es ist zum Verzweifeln.

Grüße, Christoph

03.01.2006 - 16:41 Uhr

Naja, die von mir als erstes geschilderte Methode klappt soweit.
Allerdings handelt es sich bei den Binärstring um NICHT mit Hex 0 beendete,(in VB zum Beispiel so: Info_Inhalt As String * 33) was zu Problemen führt.
Welchen MarshalTyp kann ich den für diesen Typ string nehmen(Im Moment versuche ich MarshalAs(UnmanagedType.ByValTStr, SizeConst=33) )?

EDIT: Die String sind doch mit hex 0 abgeschlossen.
Allerdings kommt er wohl aus dem Tritt weil danach noch Hex 20 sind.
Ich werde mal weiter schauen.

03.01.2006 - 15:54 Uhr

Was meinst du mit deserialisieren?
Kann man aus einem MemoryStream ein struct deserialisieren?
Oder muss ich da mit einem BinaryFormatterInstanz.Deserialize(...) arbeiten?
Das zweitere geht sicherlich nicht, da die Datei ja aus VB6 kommt, und nicht aus .NET.

03.01.2006 - 15:41 Uhr

Ich habe ein struct, das ich mit Binär serialisierten Daten(geschrieben in VB6) aus einer Datei füllen muss.

Ich habe den VB6-Quellcode des structs in VS durch den Konvertierungsassistenten von VB6 nach VB.NET umgewandelt und dann in SharpDevelop nach C# konvertiert.
Hat soweit geklappt.
Nun habe ich Dateien, in denen so ein struct als Sequenzieller Bytestrom liegt.
Ich kann das machen, in dem ich mir ein unmanaged handle auf ein managed byte array hole(so habe ich das verstanden), so gefunden bei codeproject:

public static TestStruct FromBinaryReaderBlock(BinaryReader br)
{
    //Read byte array
    byte[] buff = br.ReadBytes(Marshal.SizeOf(typeof(TestStruct)));
    //Make sure that the Garbage Collector doesn't move our buffer 
    GCHandle handle = GCHandle.Alloc(buff, GCHandleType.Pinned);
    //Marshal the bytes
    TestStruct s = 
      (TestStruct)Marshal.PtrToStructure(handle.AddrOfPinnedObject(),
      typeof(TestStruct));
    handle.Free();//Give control of the buffer back to the GC 
    return s;
}CSHARP]

Ist das nicht ein wenig unelegant?
Gibt es keine ByteArrayToStructure Methode?

Grüße, Christoph
03.01.2006 - 15:28 Uhr

Ich dachte, dass man bei Webservices vielleicht eingebaute Methoden wie z.b. Komprimierung hat, so dass dann beispielsweise komprimierte Soap-Dateien durch die Leitung rauschen.

Das ich das ganze selbst komprimieren kann ist klar, nimmt dem Ganzen aber sehr viel der Eleganz und Leichtigkeit. Und das in Delphi rückgängig machen ist auch nicht gerade charmant.

Grüße, Christoph

03.01.2006 - 14:00 Uhr

Nochmal ein Nachtrag: Welche Methoden zur Verschlüsselung und Datenreduktion(Komprimierung) gibt es bei WebServices?
Kann man soetwas wie eine Verschlüsselte und Komprimierte Verbindung daunterlegen?

Hintergrund: Ich habe spaßeshalber mal eine Instanz der oben genannten Klasse serialisiert(per SoapFormatter) und komme auf eine Dateigröße von 3,7 MB. Das ganze mit Modem aufgerufen und schon dauert ein Aufruf des Webservices locker 10 Minuten, das kann man wohl vergessen.
Da sehr viele sensitive Firmendaten enthalten sind, muss die ganze Geschichte verschlüsselt über den Draht gehen.

03.01.2006 - 13:12 Uhr

Die Verarbeitungslogik ist bereits in einer seperaten DLL.
Die Frage ist, wie ich diese Funktionen jetzt durch einen Webservice kapseln kann.

Ich weiß über einen Webservice, dass er für Aufrufe entfernter Funktionen genutzt wird. Als Übertragungsprotokoll gibt es da SOAP z.B.. Das ist in XML notiert, genauso wie WSDL, die Beschreibung eines Webservices.
Wie das ganze in .NET ausgeprägt ist und welche Komponenten und Klassen es da gibt weiß ich allerdings nicht und finde da im Moment auch ganz schlecht Zugang zu.

Ich denke schon, dass Delphi Methoden bereitstellt um eine Instanz in SOAP oder XML zu serialisieren. Damit ist sie dann ja total unabhängig.

03.01.2006 - 13:08 Uhr

Vielen Dank!

Ich habe bei Amazon nur die Suche bemüht.
Die Suche nach ".net webservice" öffnet aber direkt die Produktseite für ".NET Kompakt" von Ralph Westphal(mein erstes .NET-Buch).

03.01.2006 - 11:43 Uhr

Folgendes:

Ich habe ein funktionierendes System, welches eine XML-Datei von der Platte liest(mittels Deserialisierung) und eine Antwortdatei erstellt(mittels Serialisierung).

Das ganze ist soweit modular, dass ich der eigentlichen Verarbeitungsroutine die eingelesene Datei als Instanz einer Klasse übergebe und die Antwortdatei als Instanz einer Klasse zurückbekomme.
Die Verarbeitung ist also von der physischen Repräsentation der Daten getrennt.

Ist es möglich, auf Basis der vorhandenen Klassen einen Webservice zu erstellen, der eine serialisierte Klasseninstanz(z.B. als XML-Datei) entgegennimmt und die Antwort genauso zurückliefert.
Welche Schritte müsste ich da unternehmen?
Das Ganze muss von Delphi(nicht .NET) heraus aufrufbar sein.
Da ich mich mit dem Thema Webservices noch so gut wie gar nicht befasst habe, stehe ich im Moment ein wenig vorm Berg.
Gibt es gute Tutorials für den Bereich(oder Bücher), dass man sich mal in das Thema einlesen kann?
Oder ist das ganze recht trivial?

Grüße, Christoph

03.01.2006 - 08:56 Uhr

Siehe Topic.

Wäre nett wenn ihr mir ein paar Titel nennen könntet.
Im .NET-Bereich bin ich recht firm(ausser ASP.NET), der Focus des Buches sollte also speziell auf Webservices liegen.

Grüße, Christoph

02.01.2006 - 19:36 Uhr

Ersteres und damit irgendwie auch zweiteres g.

Den gibt es erst in höheren Ausgaben.

02.01.2006 - 15:57 Uhr

Statt Getter und Setter solltest du eine Property nehmen.


public class CKomplexeZahl
{

  private double _Real;

  public double Real
  {
    get
    {
      return this._Real;
    }
    set
    {
      this._Real = value;
    }
  }

}

Nur als ein Beispiel.
Durch den Aufruf von EineZahl.SetReal(7); wird jetzt der Block set{...} aufgerufen.
Hierin hast du eine variable namens value, die den Wert 7 enthält.

Durch den Aufruf von double a = EineZahl.GetReal(); wird jetzt der Block get{...} aufgerufen.
Hierin musst du einen wert vm Typ double mit return zurückgeben.

31.12.2005 - 18:04 Uhr

Kann mich den wünschen nur anschließen!

Freue mich aufs Treffen 2006!

Darf man Fragen, welche Software ihr veröffentlichen wollt?

Grüße, Christoph

31.12.2005 - 12:37 Uhr

Quallo ist eine wohl fünf Jahre alte Geschichte.

Wir waren im Sommer am See, ich war gerade im Wasser und habe meine Runden gedreht, da ich gerne schwimme.
Ein Mädel hat sich nicht ins Wasser getraut und fragte ob da Quallen drin sind(soetwas bescheuertes, Quallen in einem künstlich angelegten Süßwassersee).
Ein Kumpel sagte dann :"Ja, eine Qualle!" und zeigte in meine Richtung.
Von da an war ich Qualle, irgendwer machte daraus Quallo. Jetzt werde ich mal so und mal so genannt.

31.12.2005 - 02:04 Uhr

Ist aber kein Problem, wenn du dich selbst anklagst und stellst gibt es bestimmt mildernde Umstände.
Machst du den Staatsanwalt herbivore?

Naja, wer hat noch nie einen vermeintlichen Bug gefunden und sich darauf versteift, nur um danach zu merken, wie blind man war!

Das wird auch im neuen Jahr nicht besser g!

31.12.2005 - 02:01 Uhr

Würde hier gerne mal ein Thread eröffnen, wo Erfahrungen zum Thema SQL Server 2005 Express Edition geschildert werden. Also Themen wie Performance, Stablität, Zuverlässigkeit, Features, Installation, API, Probleme...
Würde auch gerne eine Pro und Contra Diskussion und Alternativen sehen.
Ich denke, dass sich spätestens mit Vista alle mit dem Thema mal auseinandersetzen müssen.
Mein Interesse rührt übrigens von einem Programm her(welches ich gerade entwickle), wo ich den besagten SQL Server benutze. Da ich an dem Programm gerade arbeite und mich dafür entschieden habe, den SQL Server zu benutzen, bin ich natürlich gespannt, was ihr darüber denkt.
Ein wichtiger Grund für meine Entscheidung war übrigens die Möglichkeit, aus Visual Studio heraus die Datenbank zu erstellen und zu managen.

Grüße, ein gespannter Christoph

30.12.2005 - 20:46 Uhr

Ansonsten akzeptieren die meisten ToString() Methoden einen Format String.
Genaueres siehe SDK

29.12.2005 - 20:30 Uhr

Ich habe ein paar Fragen zum SQL-Server Express.

Ich habe die DB-Dateien auf einem Netzlaufwerk liegen(das ist ein Fakt, bitte keine Fragen warum), mal abgesehen von der Performance, welche Probleme können sich da ergeben?

Ich schreibe die eingetippten Daten nach jedem neuen Satz per Update weg, wie ist es da bei einem Ausfall des ClientProgramms oder des Rechners(der Server läuft auf der gleichen Maschine)? Sind die Daten dann sicher in der DB?
Oder kann es sein, dass der die Cached und nur alle paar Minuten/Sätze/MB wegschreibt?
Ist es möglich, dass der SQL Server Express DB-Dateien zerschießt?
Oder kann ich davon ausgehen, dass die Datei jeden wie auch immer gearteten Absturz des Servers oder der Netzwerkleitung überlebt?

Grüße, Christoph

29.12.2005 - 01:59 Uhr

Mit Polo-Shirt im Programm?
Die debatte hatten wir jetzt ja schon zu genüge g.
Aber leider gibt es da keine Alternative für mich.

Am liebsten etwas mit farblich abgesetzten langen ärmeln.
Etwas modisches halt, das man auch als Nicht-Geek tragen kann g

28.12.2005 - 11:37 Uhr

Original von herbivore
Hallo wpb,

naja, die Geschmäcker scheinen verschieden zu sein. Substring wäre das Letzte, was ich hier benutzen würde.

herbivore

Dem kann ich nur beipflichten!
Wozu hat man eine DateTime Klasse wenn man dann die Operationen auf String-Ebene selber macht!
Naja, ich denke ich habe auch schon ein paar Dinge selber gemacht, für die es Bibliothekenfunktionen gibt, obwohl ich immer darauf bedacht bin erst die Bibliothek zu durchsuchen und hier nachzufragen.

Grüße, Christoph

27.12.2005 - 06:09 Uhr

Lass das r.Next(x) in deinem letzten Code mal weg und mach davon direkt x.
Du willst ja direkt die Nummer des gewählten Tores haben und nicht eine Zufallszahl zwischen 0 und dem gewählten Tor.

r ist m. E. = new Random();

r.Next(x) gibt also eine Zufallszahl zwischen 0 und x zurück.

Grüße, Christoph

22.12.2005 - 17:56 Uhr

Wenn du zirkuläre Referenzen hast solltest du die Definition der Klasse in eine Assembly ausladen, die von BL und DL referenziert wird.

19.12.2005 - 22:53 Uhr

Und der rest in etwas genauso.
Nur das casten nach int natürlich nicht und das Teilen muss eine Ganzzahl ergeben, keinen Dezimalbruch.

19.12.2005 - 21:38 Uhr

Original von Bella
so einfach is % bei strings auch wieder nicht zu berechnen...

also ich bin stolz den algorithmus programmiert zu haben, das is einer der wenigen bei dem ich nicht ganz so lange auf der leitung gestanden bin gg

Habe ich ja auch nicht gesagt, ist ja für gerade/ungerade auch der schlechtere ansatz.
Modulo lässt sich sonst über division mit nachfolgender multiplikation lösen. Dann die Differenz zum ursprünglichen.

Also, das könnte klappen.

private int Modulo(int a,int b)
{
return(a-((int)(a/b)*b))
}

19.12.2005 - 21:17 Uhr

Naja, ich habe in meinem ggt immer ein:

If(GrößereZahl % KleinereZahl == 0) return KleinereZahl

Also da dauert es nicht lange, ein Modulo muss aber ausgeprägt sein.

19.12.2005 - 21:14 Uhr

Na gut, ich dachte jetzt, dass es nur um den direkten Zugriff geht.
Der ist ja möglich. Wäre nett, nochmal den genauen Einsatzzweck zu erfahren.

Grüße, Christoph

19.12.2005 - 21:04 Uhr

Bei Hashtables kann ich doch über einen Index zugreifen.

Ist meines Erachtens MyHashTable.Values[x] .

Grüße, Christoph

19.12.2005 - 21:02 Uhr

Wenn du jetzt ein ggt für Strings programmiert hast, um zu gucken, ob eine Zahl gerade ist, dann muss ich nicht nur gg sagen, sondern gggggggggggggg.

Aber ggt ist ne nette Übungsaufgabe für Algorithmik.

Grüße, Christoph

19.12.2005 - 16:04 Uhr

Also den longdouble kenne ich nicht, welche struktur ist das?

Sagen dir in Zusammenhang mit Gleitkommazahlen Exponent und Mantisse was?

http://de.wikipedia.org/wiki/Gleitkommazahl
http://de.wikipedia.org/wiki/Doppelte_Genauigkeit

Gibt es in .NET überhaupt einen Datentyp mit vierfacher Genauigkeit?

Oder mit dreifacher Genauigkeit?
Von der Größe passt ja Decimal, aber die ist ja auf decimal Zahlen optimiert.

19.12.2005 - 14:46 Uhr

Bei welcher Genauigkeit?

Ich kann eine Zahl speichern, die eine bestimmte Länge hat und wieviel Nullen dahinter stehen. Das ist jetzt ne ganz grobe Erklärung.

Beispiel: Ich brauche 456789, bekomme aber nur 45 * 10^5, also 450000 .

Du brauchst ja 8192 Zeichen(dezimal) um eine Zahl von der Länge 10-4096 bis 104096 darzustellen. Das kann wohl ein normaler Datentyp nicht bieten.

19.12.2005 - 14:41 Uhr

Ich sage mal so, wenn die Grundlagen halbwegs stimmen lässt sich jedes Problem lösen wenn man nur lange genug darüber brütet.
Und je länger man brütet, desto größer ist die Freude, wenn man es dann schafft.

Mit anderen Worten: du schaffst das schon!!!

18.12.2005 - 10:41 Uhr

Ich habe mir nochmal die BigInt Klasse angeguckt.
Das könnte helfen, ich habe allerdings nur ganz kurz reingeschaut.

http://www.codeproject.com/csharp/BigInteger.asp#PrimalityTest

18.12.2005 - 10:38 Uhr

Danke fürs einspringen herbivore.

Bei der Klasse muss ich warnen, die To-String Methode dauert sehr lange nach meinen Erfahrungen. Also nicht alle Zwischenschritte anzeigen lassen.

Grüße, Christoph

18.12.2005 - 01:54 Uhr

Es gibt da eine BigInt Klasse!

Die kann beliebig große Zahlen darstellen, da werkelt intern ein Array of Int.
Ist also nur durch physische Gegebenheiten beschränkt.

Das sollte wesentlich schneller als der Vergleich mit String sein.
Und zum ggT Problem kann ich nur sagen, dass man da tagelang drüber nachdenken kann, welche Optimierungen es dort gibt.
Kommt auch immer auf die Zahlen an, das ist wie bei Suchmethoden.

16.12.2005 - 10:11 Uhr

Klappt das gut?

Ich habe das schon im 3d kino gesehen, aber noch nicht auf dem rechner.

Ich weiß nur, dass die revelator wirklich beeindruckendes Tiefengefühl geboten hat und ich verstehe nicht, warum sich dass nicht weiter durchgesetzt hat!

15.12.2005 - 13:25 Uhr

Ein Breakpoint oder eine Exception bevor das Programmfenster sichtbar wird?

Grüße, Christoph

13.12.2005 - 19:03 Uhr

Das ist mir schon klar, dass das Pseudo ist.
Allerdings ist es ein einfaches Beispiel, wie man Rekursiven Code in Iterativen umwandelt.

Der richtige Beweis würde mich mal interessieren.
Ne URL wäre schön.

Grüße, Christoph

13.12.2005 - 17:13 Uhr

Ach, tatsächlich? g
Das ist mir schon klar, ich weiß was das ist, ich habe hier im Board auch schon diverse Beispiele dazu gepostet, auch Performance-Messungen.

Da rekursive Funktionen intensiv mit dem Stack arbeiten, muss man nur den Stack nachbilden in einer Iterativen Schleife, schon hat man aus Rekursion eine Iteration gemacht.

Die Abarbeitung des Stacks ist doch nicht anderes als Iteration.
Nimm den obersten Job und führe ihn aus...
Nimm den obersten Job und führe ihn aus...
Nimm den obersten Job und führe ihn aus...

Das geht solange, bis kein Job mehr da ist(ich weiß schon, dass es sich um Funktionsaufrufe bzw. deren Daten auf dem Stack handelt).

13.12.2005 - 13:57 Uhr

Ist denn wirklich der Unterschied groß?

Bei Rekursion wird ein Job auf den Stack gepackt und abgearbeitet.
Genauso kann ich bei der Iteration selber eine Liste pflegen, und die Jobs abarbeiten.

Oder bin ich da auf dem Holzweg?

07.12.2005 - 11:13 Uhr

Dachte das wäre eine Speziallösung oder ein Produktionssystem für den Unternehmenseinsatz. Da schließen sich meine Lösungen natürlich aus.

Dann bleibt wohl nur eine Verschlüsselung zu benutzen, die Append beherrscht.
Alles andere ist Security by Obscurity.

Grüße, Christoph

07.12.2005 - 09:34 Uhr

Nimm ein Programm wie TrueCrypt und bastel dir einen verschlüsselten Datencontainer, den du als Platte einhängst. Das ist selbst vom FBI und CIA in Kooperation mit dem KGB nicht zu knacken(außer du gibst ihnen den Schlüssel), wenn du die richtige Verschlüsselungsart wählst.
Ansonsten kannst du mit dem Programm, oder mit Bordmitteln des Betriebssystems, auch eine ganze Platte oder Partition verschlüsseln.
Das Beste daran: Es ist schnell, du musst dich kein Stück darum kümmern und musst keine Binärdateien nehmen.

Wenn ich mich recht entsinne, kann man die DateiContainer auch austauschen, wenn beide den Schlüssel haben.
Ach ja, TrueCrypt ist Open Source, imo auch unter SourceForge zu finden.

Grüße Christoph

06.12.2005 - 22:41 Uhr

Original von herbivore
Hallo Quallo,

in der Grundversion vielleicht 40 Stunden, sic! Dann über vier Jahre hinweg immer wieder weiterentwickelt. Keine Ahnung wieviel Arbeit da letztendlich drinsteckt.

herbivore

Das ist ja nur ne Woche. Da hätte ich mit wesentlich mehr gerechnet!

06.12.2005 - 20:34 Uhr

Original von herbivore
Hallo dr4g0n76,

mein interessantestes Projekt, war die Entwicklung eines Modul zur Verwaltung von Objekten unter C.
Um überhaupt unter C mit Klassen und Objekten arbeiten zu können;

dieses prozessübergreifend (Shared Memory) und automatisch synchronisiert.

Mit automatischer Speicherverwaltung (SmartPoint/RefrenceCounting)

Für den Zustand der Objekte konnte man beliebige Rücksetzpunkt definieren (Undo).

Gleichzeitig war das Teil ein O/R-Mapper (würde man heute sagen)

und hat ein optimistisches Sperrverfahren mit automatischen Datenbankabgleich implementiert.

Dank Surrogaten wurden die Objekte bei der ersten Benutzung automatisch und vollkommen transparent geladen.

Dazu habe ich dann noch ein Programm geschrieben, mit dem man zur Laufzeit die Objekte der anderen Prozesse (die waren ja in einem prozessübergreifenden Pool) quasi wie in einem Debugger anschauen konnte. Dieses Programm musste man aber nicht wie einen Debugger vorher starten, sondern konnte das auch nach dem Start des zu überprüfenden Programms. Und das auch in der Produktionsumgebung.

herbivore

RESPEKT!

Darf man fragen wieviel Arbeitststunden ca. ?

06.12.2005 - 18:34 Uhr

Ich habe das ganze auf einem 1.3 Celeron M mit nichtmal 256 MB getestet und es läuft absolut flüssig.
Nur auf den beiden Kisten wo schon einmal die Beta drauf war läuft es noch lahm.
Sehr ärgerlich, aber zumindest muss ich die gemachte Arbeit nicht aus Performance-Gründen wegschmeißen!

06.12.2005 - 11:36 Uhr

Bis jetzt konnte ich keine Probleme damit feststellen.
Werde aber nochmal nachschauen.
Ist ne Geforce 2 ti wenn ich mich recht entsinne...

06.12.2005 - 09:20 Uhr

Dass du beim erstellen des TreeViews beim Adden und Löschen eines jeden Knotens gleichzeitig ein Hashtable(oder Dictionary<string,TreeNode> in 2.0) pflegst, was eine Zuordnung von Suchtext zu Knoten vornimmt. Dann darf der Text aber nicht gleich sein.
Alternativ eine Klasse, die eine Referenz auf einen String und eine Referenz auf einen TreeNode hat. Die Instanzen davon packst du dann in eine ArrayListe und gehst da durch um zu suchen.
Andere haben sicherlich noch nettere Tips.
Wenn du sicher bist, dass jeder Knoten einen anderen Text hat, dann ist Hashtable(oder Dictionary<string,TreeNode> in 2.0) sicherlich die beste Wahl.

BTW: Gibt es in .NET eigentlich die Möglichkeit ein assoziatives Array OHNE Hashen des Keys zu benutzen? Also mit langsamerer Suche, dafür garantiert OHNE Kollisionen?

Grüße Christoph

06.12.2005 - 08:34 Uhr

Baue eine Rekursive Suche oder Arbeite mit Zwischenlisten bei der Suche.
Das sollte sehr schnell zum Ergebnis führen.

Ob es dafür eine methode in der Bibliothek gibt kann ich nicht sagen, ich vermute aber eher nicht, da das Ganze nur eine Kapselung des Win32 TreeViews ist.

06.12.2005 - 08:21 Uhr

Ich habe das mal eben auf der Arbeit geöffnet(da werden wir wohl auch bald diese Komponente einsetzen): In der Tat ist es hier wesentlich!!! schneller. Auf einem 866er P3. Da muss wohl zu Hause auf dem Rechner was schief sein. Hat jemand Vermutungen, woran das liegen könnte?

Grüße Christoph