Laden...
L
LonelyPixel myCSharp.de - Member
Softwareentwickler Erlangen Dabei seit 21.03.2007 333 Beiträge
Benutzerbeschreibung

Forenbeiträge von LonelyPixel Ingesamt 333 Beiträge

18.07.2007 - 09:19 Uhr

Hm nagut.

Ich find die englische Fassung aber etwas langweilig. "Nein du! - Nein du! - ..."

17.07.2007 - 21:29 Uhr

Ja, wir haben hier 17- und 19"-TFTs im Einsatz mit den ältesten Grafikkarten, die's gibt. Das geht problemlos.

Die Matrox-Webseite ist sehr unübersichtlich, aber ich glaub von denen gab's auch vor einiger Zeit mal Grafikkarten, an die man mehr als 2 Bildschirme anschließen konnte.

17.07.2007 - 19:35 Uhr

Casten in (My)SQL? Kenn ich nicht. Aber prinzipiell sollte das ganze in etwa folgendermaßen ablaufen:

Die Tabelle (das Feld) in die du das Zeichen speichern möchtest, muss auch Unicode-Daten speichern können. Wenn deine ganze Tabelle mit dem utf8-Zeichensatz angelegt wurde, ist das schonmal erfüllt. Ansonsten kann es nicht funktionieren. Latin1 enthält ja nur 256 Zeichen und dazu gehört vermutlich kein Summenzeichen (zumindest in Latin1 (Windows) ist es nicht enthalten).

Dann musst du das Kommunikationsprotokoll zwischen dem Client und dem Server auf UTF8 einstellen. Dazu verwende ich folgende SQL-Anweisungen:
SET CHARACTER SET utf8;
SET NAMES utf8;
Wenn du das nicht machst, könnte es Probleme geben.

Danach musst du das Zeichen, das du speichern willst, in korrekter UTF-8-Darstellung in der SQL-Anweisung übertragen. Das sieht dann im "Klartext" so aus:
INSERT INTO x VALUES ('∑');

Damit hab ich bis jetzt keine Probleme erfahren.

Womit ich allerdings sehr schwere Probleme hatte und habe, ist der MySQL Administrator. Der scheint mir völlig außerstande zu sein, mit Zeichensätzen auch nur annähernd korrekt umzugehen. Das einzige, was der versteht, ist UTF-8, und das nichtmal richtig. Manche Daten werden nämlich unabhängig von der Eingabe immer noch als Latin1 oder irgendwas anderes interpretiert, sodass ein einfaches Backup mit MySQL Administrator nicht wieder mit dem selben Programm lesbar ist.

Aktuelle phpMyAdmin-Versionen haben dieses Problem nicht, dort kann man einen Zeichensatz für Export und Import auswählen. Wenn man überall utf8 einstellt, klappt es auch wunderbar. Mit einer utf8-Sprache kannst du das Unicode-Zeichen dort wahrscheinlich auch ohne weiteres eingeben. Nur um dieses MySQL-Werkzeug würde ich einen großen Bogen machen.

17.07.2007 - 16:59 Uhr

Der Dual-Link-DVI-Anschluss verdoppelt ja nur die Bandbreite des DVI-Anschlusses, um die notwendigen Datenraten für sehr hohe Bildauflösungen übertragen zu können. Ich bin mir grad nicht sicher, ob 1920x1200 bereits DL braucht oder noch nicht. Ich war der Meinung, dass dafür DL benötigt wird, in der c't 15/2007 im Bericht über große TFTs erscheint es mir anders.

16.07.2007 - 16:23 Uhr

Früher gab es nur unmanaged code... Und irgendwie ging das auch. 😉

14.07.2007 - 21:18 Uhr

Ich hab noch nicht reingeschaut seit der Umbenennung, warne aber vor einer zu feinen Aufteilung von Foren. Wo ist die Grenze zwischen einem Schnipsel (snippet) und einer Komponente? Was ist z.B eine vollständige, aber kurze Klasse für einen sehr speziellen Zweck?

Vielleicht wäre es besser, die Bewertungsfunktion besser zu bewerben, damit sie auch mal jemand benutzt. (Ich hab z.B. bislang nur ganz selten was in Webforen bewertet.) Allerdings ist auch hier wieder eine persönliche Bewertung die Gefahr: Brauch ich nicht - kriegt keine gute (oder gar keine) Bewertung... Sofern die Bewertungsfunktion des Boards überhaupt intuitiv verständlich ist (kommt leider nur ganz selten vor) und nicht 1 Stern eigentlich viel schlechter als keiner ist.

14.07.2007 - 19:38 Uhr

Also ich mach das immer so, dass ich die Hintergrundfarbe des ganzen SplitContainers auf die Splitter-Farbe setz, und die Hintergrundfarben der beiden Panels wieder auf die eigentliche Hintergrundfarbe, also z.B. die des Forms dadrüber.

Geht nicht, wenn's transparent sein soll, und ist aufwändig, wenn die Hintergrundfarbe der Panels automatisch durchgereicht werden soll, da das aber nur selten vorkommt, ist das IMO der einfachste Weg.

14.07.2007 - 08:29 Uhr

Früher, also vor vielen Jahren, hab ich mir vereinzelte c't-Hefte gekauft. Aber da war ja soviel spezifisches Technik-Zeug drin, dass ich nur einen Bruchteil der Inhalte verstanden hatte. Damals hatte ich PC-Welt und ein paar andere wie com! und Konsorten gelesen.

Heute ist c't aus meiner Sicht sehr viel verständlicher geworden. Das mag zum einen daran liegen, dass ich mich mit der Technik nun besser auskenne, aber auch daran, dass es mehr allgemeine Themen wie anspruchsvolle Fotobearbeitung oder Vergleiche bestimmter Software gibt. PC-Welt und die anderen Hefte haben wir nach und nach abbestellt, nachdem dort in jeder zweiten Ausgabe mit grellen Cover-Farben das Umgehen aller möglicher Kopierschutzverfahren angepriesen wurde. Langsam war das aber nichts neues mehr, und so furchtbar interessant ist das Thema nun auch wieder nicht. Ich glaube, die ringen verzweifelt um ihre Leserschaft. 😉

Daher wundert es mich nicht, dass c't momentan ganz oben steht. 🙂

13.07.2007 - 12:32 Uhr

Sächsischer Virus - ausgeführt!

Hallo Herr <Name des 1. Posters>,

Virus funktioniert! Ist in Ordnung soweit. Habe alle Daten gelöscht. Ging wunderbar. Kann nicht mehr entwickeln. Keine Mails mehr schreiben. Keine Beiträge irgendwo posten. Und, was mich dann doch zum Nachdenken brachte, keine Rechnungen erstellen 😦. Sitze jetzt am System meines Kollegen und überlege, wo bei diesem Virus die Restore-Function ist?? Ich hoffe doch, es gibt sowas?? Bekomme sonst möglicherweise ein ernsthaftes Problem mit meiner Bank! Es sei denn, sie leiten diesen Virus freundlicherweise auch an meinen Finanzdienstleiter weiter.

mfg.

<Name des Betroffenen>

(Aus einem Internet-Forum übernommen)

12.07.2007 - 18:15 Uhr

Wenn du bei der TextBox den Rahmen wegmachst und ReadOnly auf true setzt, kommt genau der Effekt raus, der in den Windows-Dialogen üblicherweise anzutreffen ist. Funktioniert aber nur sicher ohne UI-Themes. Transparente Hintergrundfarbe mag die TextBox leider nicht, also wird's besonders bei der anderen Hintergrundfarbe von Tab-Seiten etwas schwerer.

12.07.2007 - 12:52 Uhr

Achtung: Sächsicher Virus unterwegs

güden dog

isch bin en häcker aus leipzsch un diss iss en selbstprögrammirder bösartscher Gombjüdervirüs.

Da isch noch net sö viel weß vom Gombjüder iss des en manueller virüs.

Also löschen se alle dadeien von de festpladde und schiggn se den virüs an alle die se gennen

geht lös nü

12.07.2007 - 12:40 Uhr

Von dem CompileToAssembly steht in meiner MSDN aber nichts. Kannst du mir verraten, wo du das her hast?

Im übrigen bin ich nach der Beschreibung von Compiled bereits davon ausgegangen, dass der Ausdruck fest ins Assembly einkompiliert wird, daher war ich über den enormen einmaligen Aufwand zur Laufzeit, der oben beschrieben wurde, jetzt doch sehr überrascht. Allerdings verstehe ich deinen Beispielcode auch nicht.

--- edit
Argh, okay, ich sollte nicht so schnell lesen. Du meintest natürlich nicht RegexOptions. Aber auch diese Methode schaut verwirrend aus. Bedeutet das, dass ich zur Laufzeit des Programms einen Regex in eine zusätzliche Datei kompilieren lassen kann, die dann wie genau verwendet wird? Gibt es denn keine Methode, einen Regex fest in das Programm einzukompilieren? Ich mein das jetzt so wie z.B. in den Programmiersprachen der 70er Jahre SQL statisch kompiliert wurde, um die Performance zu steigern.

12.07.2007 - 01:04 Uhr

Oh, danke für den Hinweis, das kannte ich noch nicht, schaut aber gut aus.

12.07.2007 - 00:51 Uhr

Wenn du Microsoft InfoPath kennst, kannst du da ja ein paar Ideen abschauen. Ich selbst hab nur in der Arbeit mal kurz reingeschaut, da ist es halt auf den PCs installiert. InfoPath ist wohl prinzipiell so ein Formularprogramm, in dem man in etwa sowas designen kann, wie du es auch haben willst.

12.07.2007 - 00:46 Uhr

"String-Gehampel"... =)

Wenn du reguläre Ausdrücke verwenden möchtest, kannst du ja mal versuchen, die RegexOptions.Compiled-Option zu verwenden. Laut Dokumentation soll dabei der reguläre Ausdruck bereits vorkompiliert werden, was weniger Ausführungszeit aber mehr Ladezeit erfordern soll. In deinem Fall kann das interessant sein. Ich selbst hab es noch nicht ausprobiert/verwendet/gemessen.

12.07.2007 - 00:41 Uhr

Geht in Ordnung.

Ich habe mittlerweile noch eine kleine Optimierung am Code vorgenommen. Anstatt zu Beginn nur zu prüfen, ob beide Strings gleich null sind, prüfe ich einfach, ob sie gleich sind (also s1 == s2). Der null-Fall ist dabei mitinbegriffen, und exakt gleiche Zeichenketten können so sehr viel schneller als gleich behandelt werden. In meinem Dateinamen-Benchmark hat das eine deutliche Beschleunigung gebracht (150 ms statt 200 ms), da ein Dateiname öfter vorkam; in anderen Szenarien können die Ergebnisse unterschiedlich sein, da es eigentlich geringfügig länger dauern sollte, wenn keine identischen Zeichenketten vorkommen.

Da ich momentan nicht dazu komme, weitere Tests durchzuführen, erwähne ich hier schonmal die mögliche Änderung, vielleicht nutzt sie derweil ja jemandem.

12.07.2007 - 00:36 Uhr

Hat schon jemand dieses Programm erwähnt?

http://www.sellsbrothers.com/tools/#regexd
RegexDesigner.NET

Wäre in einem zentraleren Tutorial-/FAQ-Beitrag vielleicht auch ganz gut untergebracht, um eigene weiterführende Experimente mit dieser IMO sehr nützlichen Technik zu unterstützen. 🙂

11.07.2007 - 12:32 Uhr

Ich hab die Doku grad nicht da, aber die meisten Xml-Funktionen (XmlReader etc.) nehmen in einem weiteren Parameter eine Encoding an. Schau dir einfach mal alle Methodensignaturen durch, dann findest du was passendes.

Ohne Angabe lesen die meisten .NET-Funktionen Dateien scheinbar als UTF-8 ein. Wenn jetzt eine Latin1-Datei kommt, kann das zu genanntem Problem führen. Dann solltest du explizit eine andere Singlebyte-Kodierung angeben, z.B. einfach Encoding.Default (also die aktuelle vom System, falls ich grad nicht den richtigen Namen genannt hab).

11.07.2007 - 11:51 Uhr

Schade, dass die Elefanten-Story noch nicht um C# erweitert wurde. 🙂

11.07.2007 - 11:42 Uhr

Tipp: Dictionary-Klasse

11.07.2007 - 00:12 Uhr

Bitte richtig abschreiben, Compiler sind sehr penibel, was Rechtschreibung angeht.

Ansonsten hier die komplette Lösung: (ungetestet, bin mir aber ziemlich sicher, dass es so geht)

DateTime[] datum = new DateTime[] {
new DateTime(2007, 02, 01),
new DateTime(2006, 03, 01),
new DateTime(2006, 12, 08) };

(Edit: verdammte Smileys, dass die aber auch keins der großen Boards vernünftig implementieren kann)

10.07.2007 - 23:50 Uhr

Hast du mal in der MSDN-Bibliothek unter dem Indexeintrag "DateTime" nachgeschaut? Das ist in .NET der Datentyp, der Datum und Uhrzeit definiert.

Okay, und jetzt müsste ich nur noch genauer lesen. Ein Array von dem ganzen kannst du entweder von fester Länge mit DateTime[] erstellen, oder von variabler Länge als Liste: List<DateTime>.

10.07.2007 - 23:46 Uhr

Also die ganzen using-Zeilen am Anfang ignorieren wir jetzt mal. Das sind eh viel zu viele, aber die Schaden glaub ich auch nicht.

Die Klasse Form1, ein normales Windows-Fenster, ist hier teilweise definiert. D.h., dass du die Methoden am besten in ein neues Windows-Forms-Projekt reinkopierst. Alleine ist der gepostete Code nicht lauffähig.

Die Instanzvariable lngResult vom Typ IntPtr ist an dieser Stelle nicht nötig und sollte in den beiden Methoden, die sie verwenden, lokal definiert werden.

Die beiden Konstanten machen die Zahlen, die die Win-API-Funktionen erwarten nur lesbarer. In C++-Programmen hatte man dafür normalerweise bereits vordefinierte Bezeichner.

Die beiden static extern Methoden stellen Win-API-Funktionen in C# bereit. Die genauen Deklarationen kann man der MSDN-Bibliothek entnehmen oder auf pinvoke.net nachschauen.

Die beiden Methoden an_Click und aus_Click sind Event-Handler für Buttons, die sich im Fenster befinden müssen. (Die werden halt normal im Designer eingefügt.) Die machen nichts weiter als die beiden Win-API-Funktionen aufzurufen. Nähere Informationen zu denen stehen auch in der MSDN-Bibliothek. Die erste suche das Fenster der Taskbar und liefert dessen Window-Handle zurück. Die zweite blendet das Fenster dann ein bzw. aus, wenn ich den Code jetzt richtig interpretiere und der so tatsächlich funktioniert. Ich hätte für diesen Zweck jetzt eher die ShowWindow-API-Funktion verwendet, aber es führen ja bekanntlich viele Wege nach Rom.

10.07.2007 - 22:28 Uhr

Ähm, ja, das schaut so aus, als könnte es funktionieren. Aber es tut nicht ganz das, was du oben beschrieben hast. Du kannst damit die Taskleiste aus- und wieder einblenden. Das ist einer der schönen Tricks, die die Remote-Controlling-Programme der 90er anboten, um Mitschüler im Computerraum zu ärgern. 😉 Aber wenn du die Taskleiste nicht wieder einblendest, wird es wohl niemand anderes tun, und der Benutzer darf sich neu anmelden oder den PC neustarten - wenn er das ohne Startmenü schafft. Automatisch [beim Annähern mit der Maus] erscheint die Taskleiste nach diesem Verfahren auch nicht.

10.07.2007 - 18:23 Uhr

Gute Frage, wie das gehen soll. In die Registry wird jedenfalls nichts geschrieben, hab ich grad mal beobachtet. Du könntest vielleicht den Dialog öffnen und die Oberfläche mit entsprechenden Window-Messages "fernsteuern".

10.07.2007 - 17:17 Uhr

Die Microsoft-Media-Center-Fernbedienung lässt sich ganz gut verwenden in eigenen Anwendungen. Ich hab letztens eine C#-Klasse gefunden, die die Events der Fernbedienung über die diversen Windows-APIs einsammelt und einheitlich bereitstellt. Hab das ausprobiert und die Demo-Anwendung hat gut funktioniert. Bei Interesse such ich mal den Link raus.

10.07.2007 - 17:14 Uhr

Ja, die Mausgesten sind was tolles! In Opera sind sie auch vernünftig integriert, richtig flott. Die Firefox-Erweiterung lässt sich dafür frei konfigurieren (ich hab mir ein User-Skript geschrieben, mit dem statt "Zurück" auch das Tab geschlossen wird, falls es nicht zurück geht. Und wenn es das letzte Tab und nicht das letzte Fenster ist, wird das Fenster geschlossen (sehr praktisch für Pop-Ups!). Das letzte Fenster wird dagegen einfach nur minimiert. Leider hakt die Sache im Firefox etwas, man kann nur weiter zurück, wenn die "zurückte" Seite ansatzweise fertig geladen ist.

In der Arbeit muss ich gelegentlich einen IE6 nutzen, und ich bin erstaunt darüber, wieviel Werbung es doch im Internet gibt. (Und wie schlecht der IE6 eigentlich manche Seiten darstellt... 8o) In meinem Firefox daheim (und in dem in der Arbeit) hab ich die schon fast alle wegkonfiguriert. 🙂 Auf den IE6 in der Arbeit hab ich aber keinerlei Einfluss... Sogar die Internetoptionen sind da weggesperrt.

09.07.2007 - 19:47 Uhr

Ups, stimmt, da war was. Ich ziehe meine pessimistische Behauptung hiermit zurück. 🙂

09.07.2007 - 02:13 Uhr

Firefox!!! (um das mal so fortzusetzen 😉)
Hier noch ein Link für euch. 🙂

Zu den Umlaut-Domains (auch als IDN bekannt): Ohne jetzt eigentlich ein gutes Wort für den IE6 einlegen zu wollen, sprechen solche Eigenschaften für mich eher gegen IDNs als gegen den IE6. Auch wenn IMO sonst so ziemlich alles gegen den IE6 spricht... Man überlege sich nur mal die Milliarden Tastaturen auf der Welt, die einfach kein "ü" unterstützen! Was sollen diese armen Menschen nur machen, wenn sie sich für den deutschen TÜV interessieren. Und in dem Fall hilft selbst ein Firefox nicht mehr weiter. 😁

09.07.2007 - 02:06 Uhr

Naja, 33% "A" und 10% "B" ist nicht ganz das, was ich meinte.

Ich hab jetzt nochmal mit dem .NET Reflector in nLite reingeschaut und die ganzen einzelnen Rechtecke (die 100% der Bezeichner ausmachen) rauskopiert, um sie im Hex-Editor anzuschauen. Das Ergebnis hätte simpler nicht sein können: Die Bezeichner erhalten ASCII-Werte ab 1 beginnent, also heißt der erste Namespace 0x01, der nächste heißt 0x02, usw. Mit den Methodennamen ist es wohl ähnlich. D.h. dass sich diese Umbenennung vieler Methoden auf vermeintlich den gleichen Namen mit Obfuscator-Technik auch wieder in sichtlich unterscheidbare Namen ändern ließe, was den zunächst enorm scheinenden Vorteil wieder relativiert. Aber der Effekt ist dennoch gut, und auf die Schnelle haben es auch Gedächtniskünstler schwer, den Code nachzuverfolgen.

09.07.2007 - 01:47 Uhr

Nachdem sich das mit .NET-Snippets ja mittlerweile erledigt hat, liegt der Code wie gewohnt zuerst auf meiner Seite:

http://beta.unclassified.de/code/dotnet/naturalsort/

Dort gibt's auch eine ausführlichere Beschreibung, worum es geht, was mein Code kann, was nicht und wie schnell er ist. Kurz gefasst braucht er im Vergleich zum einfachen Zeichenkettenvergleich etwa 6,7-mal so lange, was der CodeProject-Version sehr ähnlich ist (die hab ich gleich mit gemessen).

Ich bitte um Feedback und ggf. Fehlerberichte, sollte jemand diese Funktion verwenden.

08.07.2007 - 15:31 Uhr

Viele der Animationen/Videos sind im Verzeichnis C:\Programme\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary in der Datei VS2005ImageLibrary.zip zu finden. Schau doch da einfach mal rein. Wie man die jetzt konkret in eigenen Dialogfenstern anzeigen kann, hab ich noch nicht ausprobiert. Vielleicht reicht für die animierten GIFs ja eine PictureBox. Dass man die Explorer-Dialogfenster direkt selbst von außen verwenden kann, halte ich für unwahrscheinlich.

08.07.2007 - 15:29 Uhr

Ich hab mir jetzt die Mühe gemacht, alle im FAQ angegebenen Quellen auszuwerten. Zusammenfassend geht es darum, was Obfuscating ist, kann, nicht kann, und dass es kein kostenloses Produkt gibt (außer Dotfuscator CE), das bei mir aber nun nicht funktioniert.

Von der Möglichkeit, gleiche Bezeichnernamen mehrfach zu verwenden, wodurch Obfuscating erst richtig interessant wird, ist dort nirgendwo etwas erwähnt. Das Programm nLite wird als ein solcher Fall erwähnt, und es hat tatsächlich (laut .NET Reflector) keine lesbaren Bezeichner. Hat hier jemand Ahnung davon, wie sowas funktioniert? Oder hat sich jemand generell schonmal damit beschäftigt, wie solche Programme funktionieren? Lösungen, die den Code verschlüsseln, unportabel übersetzen oder komprimieren, finde ich jetzt nicht so interessant, da sie teilweise wieder erhebliche Nebenwirkungen haben.

08.07.2007 - 01:57 Uhr

Hallo,

also wie es aussieht, gibt es keinen kostenlosen Code Obfuscator für .NET 2.0, außer dem Dotfuscator, der beim VS 2005 dabei ist. Allerdings funktioniert der nicht. "Skater .NET Obfuscator Light Edition" (Freeware) sieht genauso "mächtig" aus, funktioniert aber auch nicht. In beiden Fällen lässt sich das Ergebnis nicht mehr starten. Dumm, jeder Compiler wird besser getestet und arbeitet zuverlässiger.

Was mich aber nun interessiert ist, manche Obfuskatoren werben damit, Methoden/...-Namen nicht mit dem üblichen "asdfg1" zu ersetzen, sondern mit "?" oder "$". Außerdem haben in den gezeigten Screenshots alle Bezeichner den gleichen Namen, weshalb sich das Ergebnis auch nicht wieder rekompilieren lassen soll. Dadurch werden Bezeichner nicht mehr identifizierbar und eine Code-Analyse wird (bei gleicher Methodensignatur) vollends unmöglich (im Gegensatz zu "asdfg1", wo eine Analyse nur erschwert wird).

Wie soll das funktionieren? Wenn alle Bezeichner den selben Namen bekommen, kann doch auch IL-Code nicht mehr funktionieren. Oder gibt's da einen Trick? Eigentlich sollte es doch keine große Zauberei sein, mit .NET-Mitteln ein Assembly zu laden, die Bezeichnernamen zu verändern und das ganze wieder zu speichern. Hat sich schonmal jemand an sowas versucht? Ich hab mit dieser Art von Reflection (?) leider noch keine praktische Erfahrung und muss daher etwas in Blaue hineinraten. Aber so ein einfacher "$ifyer" wär schonmal ein interessantes Projekt.

07.07.2007 - 23:40 Uhr

Mhm, aber die EXE-Datei, deren Größe sich ändert, enthält ja IL-Code und der wird zur Laufzeit je nach Ausführungspfad in Native Code übersetzt. Ob das dann noch soviel mit der Speicherseitengröße von Windows zu tun hat...

07.07.2007 - 22:01 Uhr

Hallo,

in den Projektoptionen in Visual Studio kann man u.a. die Segmentgröße des erzeugten Assemblys angeben. Zu finden ist das auf der Seite "Erstellen", unter "Erweitert" als Option "Dateianordnung". Der csc-Parameter heißt /filealign. Gültige Werte liegen zwischen 512 und 8192. Wenn man einen kleineren Wert einstellt, wird die erzeugte Datei etwas kleiner. Soweit steht das ja auch in der MSDN-Bibliothek. Aber warum ist gerade 4096 voreingestellt? Welche weiteren Auswirkungen hat es, diesen Wert zu verändern? Der Code wird wohl in mehr dieser Segmente unterteilt, wenn diese kleiner sind. Ist das schlimm?

07.07.2007 - 01:50 Uhr

Man kann auch direkt im RTF-Quelltext arbeiten, wie hier z.B.:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=506435&SiteID=1#687746
Ist schon ne Weile her, dass ich den Code angeschaut hab.

07.07.2007 - 01:38 Uhr

Original von Sebastian.Lange
Ich habe ein paar Buttons mit Beschriftung wo ich das "&" Zeichen verwenden will.
Leider macht er mir daraus immer einen Unterstrich.
In VB hatte ich eine Eigenschaft "UseMnemomic" die ich abschalten konnte dann war Ruhe und ich konnte "&" verwenden. Ich finde im Eigenschaftsfenster vom FormsDesigner erstmal keine Option dafür. Wie stelle ich das ab?

Ich habe diese Eigenschaft in meinem Visual Studio für Buttons. Weiß nicht, wo du gesucht hast. Vielleicht hilft dir auch die alphabetische Sortierung der Eigenschaften weiter. Ansonsten solltest du das &-Zeichen einfach doppelt eingeben können, um die Unterstreichung zu verhindern, das ging glaub ich auch in VB schon.

Ein anderes Problem das ich habe ist, wenn ich einer MultiLine-TextBox
"Zeile1\nZeile2\nZeile3&quot; zuweise kommt bei \n statt des Zeilenumbruchs
so ein Viereck, offenbar ein Interpretationsfehler, irgendwie weiss er damit nichts anzufangen.

Unter Windows ist der offizielle Zeilenumbruch \r\n, unter Linux und im Rest der Welt ist es \n. Manche Windows-Funktionen (ich glaube auch MessageBox.Show sowie [C++] ::MessageBox) akzeptieren auch ein \n, aber andere nicht. Die TextBox könnte eine davon sein. Environment.NewLine liefert dir übrigens die genannten Zeichenfolgen je nach Plattform zurück. (Sollte es jedenfalls, ich hab noch nicht viel mit C# unter Mono/Linux gemacht.)

07.07.2007 - 01:27 Uhr
  1. ^[1-9]{1}[0-9]{3}$

Das {1} hat keinen Effekt, kann man auch weglassen.

  1. Zahl zwischen -750 und 750 (wenn Zahl positiv, dann kein Vorzeichen;
    längenmäßig nicht beschränkt) (Bsp: 4374344)

Dein Beispiel passt aber nicht so ganz zur Aufgabe und zur Lösung. 😉

Außerdem hast du die Lösungen für Aufgabe 9 und 10 verwechselt, kann das sein?

  1. ^[a-zA-Z0-9_]{2,}@[a-zA-Z0-9_]{2,}.[a-z]{2,4}$ (Hierzu gibt es sehr viele verschiedene Lösungen; bei meiner weiß ich nicht, ob ich alles berücksichtigt habe.)

Punkte im localpart fallen mir grade noch ein. Übrigens muss man . schreiben, um nur einen Punkt zu matchen. . selbst ist ein Sonderzeichen und steht für ein beliebiges Zeichen (mit Einschränkungen, siehe RegexOptions.SingleLine), wie du offensichtlich bereits weißt und wohl nur grad übersehen hast.

  1. ^(http~~?://)?(www[2]?.)?[a-z0-9&-()$/]*.[a-z]{2,4}/?$ (Ebenfalls sehr viele Lösungswege; auch hier habe ich nicht kontrolliert, ob alles berücksichtigt wurde.)
    Du kannst auch https? schreiben, das ~~ ist unnötig, da sich das ? nur auf die "Einheit" davor auswirkt, in dem Fall ein einzelnes Zeichen. Ebenso bei www[2]?.
  1. ^[0-9]{1,3}(.[0-9]{3})*(,[0-9]{2})?[ ]?€$

Auch hier steht wieder ein "unescapter" Punkt. Übrigens gibt es eine Reihe sehr praktischer Zeichenklassen, \d steht z.B. für [0-9] und \s für alle Leerzeichen, also [ \t\n\r] (wenn ich mich nicht irre). Für diese Aufgabe wäre anstelle des [ ]? z.B. auch ein \s* oder \s+ interessant, je nachdem, ob man einen Leerraum erfordern möchte.

  1. ^[:;]-[()|]$

Ich glaube recht arg, dass man das | in einer Zeichenklasse nicht "escapen" muss/soll/darf. Korrekt wäre demnach: ^[:;]-[()|]$

07.07.2007 - 01:05 Uhr

Original von dr4g0n76
Es ist nicht ohne weiteres möglich bei (generischen) Listen für Add und Remove Events auszulösen.

Kann man sich den Listentyp nicht ableiten und einfach die Add-/Remove-Methoden mit solchen überschreiben, die den Aufruf an die Basisklasse weiterreichen und dabei ein Ereignis auslösen? Oder meintest du das mit "nicht ohne weiteres"? Oder bin ich jetzt nur zu blauäugig und dieses Vorgehen wäre in der Praxis nicht machbar oder zu kompliziert?

07.07.2007 - 00:41 Uhr

Ich hab den Witz auch auf Anhieb verstanden, und musste schon schmunzeln. Letztens wollte ich selbst erst eine kleine Anwendung in Java programmieren (soll nämlich auch unter Linux laufen) - nachdem ich in der ersten Klasse nichtmal wusste, wie ich ne Liste deklarieren soll, hab ich mir ein Linux installiert, Mono drauf und dann mit C# weitergearbeitet. Läuft (bis auf das misslungene GUI, ist aber nur nebensächlich) wunderbar.

Zu den 80 Jahren: Wer hat behauptet, dass sich die Geschichte in der Gegenwart abspielt? Etwas mehr Phantasie, Leute! 😁

BFreakout, trotzdem wäre es dem Verständnis deiner Beiträge zuträglich, wenn du mal ein bisschen auf syntaktisch korrekte Beiträge achten würdest. Üblicherweise enthalten deutschsprachige Texte ausreichende Fehlerkorrekturinformationen, aber es liest sich halt deutlich schwerer. 😉

04.07.2007 - 19:34 Uhr

Wenn die Batch-Datei auf das Beenden des Programms wartet, hast du halt die ganze Zeit über ein Konsolenfenster offen. Könnte u.U. störend sein.

03.07.2007 - 23:44 Uhr

SQLite ist ein relationales Datenbanksystem wie jedes andere auch. Der einzige herausragende Unterschied ist der, dass es kein Server ist, der die Datenbank-Dateien für sich behält und die Daten nur über eine spezielle Netzwerk- oder IPC-Schnittstelle bereitstellt, sondern sich diese Abstraktionsstufe spart. Anstelle einen Server zu fragen, der den Code enthält, der auf den Dateien arbeitet, enthält bei SQLite die Client-Bibliothek gleich den Code, der auf den Dateien arbeitet. Der ist aber trotzdem mehrbenutzerfähig, sodass Transaktionen und gleichzeitige Zugriffe mehrerer Anwendungen auf die selbe Datei unterstützt werden. Ansonsten kannst du mit SQLite genauso SQL als Abfrage- und Definitionssprache verwenden, wie mit MySQL oder SQL Server auch. Es werden zwar noch nicht alle Merkmale von SQL-92 unterstützt, aber das macht im Einsatz kaum etwas aus. Weitere Angaben über die SQL-Syntax in SQLite und die nicht unterstützten Funktionen aus SQL-92 findest du mit wenigen Klicks auf der Webseite von SQLite.

Als Beispiele bekannter Anwendungen, die auf SQLite setzen, sind Apple Mail zu nennen, das sämtliche Nachrichten in einer SQLite-Datenbank speichern soll, sowie Firefox 3, der u.a. Bookmarks in einer Datenbank ablegt.

02.07.2007 - 20:20 Uhr

Hat schonmal jemand an SQLite gedacht? Das ist ein Datenbanksystem, das direkt auf den Dateien arbeitet, also nicht in der sonst sehr verbreiteten Client-Server-Architektur. Für kleinere bis mittlere Desktop-Anwendungen würde ich diese Datenbank sehr empfehlen, da sie einfach ohne jeden Installationsaufwand funktioniert. Eine DLL zum Programm packen und die Sache läuft. Gibt's für nativen Code auf allen möglichen Plattformen oder als .NET-Version. Ich setze SQLite jetzt in 5 eigenen Anwendungen problemlos ein.

01.07.2007 - 21:59 Uhr

Also ich hab das jetzt mal ausprobiert. Die Ergebnisse sind gleich deutlich besser. Mit einer Größe von 7x7 erreiche ich in 2 Durchläufen einen schönen Schatten für kleine Fenster. Nach einem Durchlauf sieht es noch nicht so schön aus, was aber an meiner Matrix liegen kann: Ich hab einfach überall eine 1 gesetzt.

Für mehrere Durchläufe braucht man die n-fache Zeit, größere Matrizen erfordern dagegen deutlich mehr Zeit, da für jeden Punkt im Zielbitmap quadratisch viel mehr Punkte im Ursprungsbild gelesen werden müssen. Wenn man nur bestimmte Bereiche des Bilds unschärfen will, kann man den Arbeitsbereich aber auch durch eine Region eingrenzen, was Zeit spart.

29.06.2007 - 23:01 Uhr

Ich hab mich jetzt doch dazu entschieden, das selbst zu implementieren, nachdem ich genug darüber gelesen hab, wie es funktioniert. Dabei hab ich mich vom ersten Artikel aus meiner obigen Liste, dem CodeProject-Ansatz, inspirieren lassen, ohne ihn direkt als Vorlage zu nehmen.

Meine Funktion unterstützt jetzt
* Zeichenkettenvergleiche
* ohne Berücksichtigung der Groß-/Kleinschreibung
* ignoriert dabei ' und " (Liste leicht erweiterbar, auch um ganze Unicode-Kategorien)
* verwendet eine korrekte Sortierung für regionale Sonderzeichen (deutsch: Umlaute)
* sortiert Zahlen an jeder Position nach ihrem Wert
* wobei mehr führende Nullen bei gleichem Wert zuerst kommen
* negative Zahlen werden korrekt einsortiert, aber nur am Anfang der Zeichenkette (Aufwand einer Erweiterung unbekannt, ich hab es von Anfang an konzeptionell auf den Anfang begrenzt)
* bei gleichen Ergebnissen werden unterwegs gesammelte Präferenzen (Großschreibung vor Kleinschreibung, oben erwähnte ignorierte Sonderzeichen, Anzahl führender Nullen usw.) als Entscheidungsgrundlage verwendet, sodass das Ergebnis deterministisch ist

Bevor ich das Ganze auf .NET-Snippets veröffentliche, werd ich es noch ein wenig testen. Bislang hat der Entwurf und die Implementierung ca. eine Stunde gedauert, Unterstützung für negative Zahlen und Ignorieren von Sonderzeichen nochmal eine Stunde. Benchmarks gibt's noch keine, ich weiß also nicht, wie schnell mein Code ist. Mit 30 Zeilen in Verwendung als SQLite-Sortierfunktion merk ich zumindest keine Verzögerung. 🙂 Ohne die zahlreichen Kommentare sind es ca. 90 Code-Zeilen in einer einzigen Funktion. Am Wochenende bin ich aber erstmal offline. 😉 Mehr gibt's dann also nächste Woche.

29.06.2007 - 22:40 Uhr

Danke für den Link, ich werd mal reinschauen. An sich sieht das Control schon sehr mächtig aus, mit Editier-Funktionen usw.

Beim Querlesen der Seite hab ich auch das hier gefunden:
http://www.codeproject.com/cs/miscctrl/ExScrollableControl.asp
Da hat auch schon jemand versucht, ein ScrollableControl durch einen Column-Header zu erweitern, der immer genau mitscrollt. So in der Art hätte ich mir das dann wohl auch vorgestellt. Jetzt hätte ich schonmal weitere Implementierungsdetails für diesen Weg. 🙂

29.06.2007 - 15:45 Uhr

Also bei CodeProject hab ich nichts gefunden, was dem o.g. Projekt nahekommt. Weiß also nicht, was dort gemeint ist.

Das einzige, was ich in den letzten 6 Monaten von Programmierhans gefunden habe (einmal verlinkt, der ursprüngliche Beitrag ist viel älter), ist das hier:
MultiColumnListBox
Meinst du das? Scheint mir aber nicht zum Bearbeiten der Daten geeignet zu sein. Und wie es da mit dem horizontalen Scrollen aussieht, müsste ich jetzt erstmal ausprobieren.

Und wie man nun ein scrollbares owner-drawn control macht, bei dem ich ganz allein die volle Kontrolle darüber hab, was auf dem Bildschirm gezeichnet werden soll, weiß das jemand?