Laden...
L
Benutzerbeschreibung

Forenbeiträge von Lord Hessia Ingesamt 497 Beiträge

01.09.2006 - 21:26 Uhr

Den aufgebrachten Worten von Borg kannst Du entnehmen, dass solch "böser" Code unter .NET-Programmierern nicht gern gesehen ist. Das liegt nicht unbedingt daran, dass es sich hier um bessere Menschen handelt, sondern daran, dass C# solche fiesen Tricks nahezu unterbindet und die Programmierer diese Einschränkungen - so blöd es klingt - zu schätzen gelernt haben.
Aufgrund dieser Einschränkungen wirst Du, nach einem C#-Einzeiler (ohne Methodenaufruf), der Deinem C++-Code entspricht, wohl vergeblich suchen. Es gibt zwar auch noch den unmanaged Code, aber von dem lassen wir ja alle schön brav die Finger...

01.09.2006 - 20:49 Uhr

Uff. Und ich hatte gehofft, so etwas nie wieder sehen zu müssen. Selbst in einem .NET-Forum ist man da nicht sicher vor 🙂

Na gut, nachdem mir der Abend jetzt schonmal versaut ist, kann ich ja auch was tun:
Was soll denn das hier bringen?
(DWORD&)data[0] = 0xFFFFFFFF;

Ich würde das folgendermaßen interpretieren:
Weise beginnend mit data[0] 0xFFFFFFFF zu

D.h. data sieht dann so aus: 0xFF | 0xFF | 0xFF | 0xFF | ab hier undefiniert .....

Aber wofür steht dann das (DWORD&) ? Wenn Du data als DWORD interpretieren wolltest, müsstest Du dann nicht Klammern um beide machen?

01.09.2006 - 17:22 Uhr

Ist die 20 nicht die Maximallänge?

01.09.2006 - 15:53 Uhr

In der WinApi gibt's die Funktion - wär hätte es gedacht - MessageBox(). Die nimmt die vier Parameter ParentWindow, Text, Ueberschrift, Style. Über Style kann man das Aussehen beeinflussen (Buttons und Icon).
Den Text musst Du aber schon selber schreiben...
Gibt's da nichts entsprechendes in .NET?

01.09.2006 - 12:40 Uhr

nils hat aber Recht. Wenn Du einen Pfad zu einer XML-Datei angeben willst, dann ist Load() Dein Freund. Mit LoadXML() gibst Du direkt den XML-Code als Parameter an.
Du kannst Dir ja einfach mal den Names von "root" ausgeben lassen oder im Debugger verfolgen, so wirst Du vermutlich auf den Fehler kommen.

BTW: Wenn Fehlermeldung so aussagekräftig sind, wie die, die Du bekommen hast, dann hilft es manchmal, statt ex.Message ex.GetBaseException().Message zu verwenden.

01.09.2006 - 11:43 Uhr

Das ist ALLES, was als Fehlermeldung ausgegeben wird?

31.08.2006 - 17:50 Uhr

Musst Du nicht einfach alle Reader/Writer auf das Laufwerk schließen nachdem Du sie benutzt hast?
Oder willst Du HArdware entfernen, die von anderen Programmen benutzt wurden?

31.08.2006 - 12:51 Uhr

Original von tomtom62
Ich denke auch nicht, dass diese Werbeanzeigen ein besonderes Indiz für Fehleranfälligkeit sind.

Im Gegenteil: Wenn der "Reparaturservice" so gut laufen würde, dann müsste man ja nicht werben 😉

30.08.2006 - 17:18 Uhr

Wenn das Buch Visual C#2005 heißt, dann geht's vermutlich um .NET 2.0. Ich glaube auch nicht, dass man Bücher nach einem Jahr wegschmeißt. Sollte das wirklich so sein, dann werde ich mir umgehend ein paar Amazon-Aktien kaufen 😁

30.08.2006 - 17:15 Uhr

Du gibts doch beim Anlegen Deines Projekts einen Ordner an, wo sich das Projekt befinden soll. In diesem Ordner wird, wenn Du nicht an den Projekteinstellungen rumfummelst, beim Kompilieren ein Unterordner bin erzeugt. In dem befinden sich Debug- und Releaseordner.

30.08.2006 - 16:08 Uhr

hab = haben. Dort

Dort = in dem Release-Ordner

30.08.2006 - 13:33 Uhr

Dann darfst Du es nicht in eine Zahl wandeln (als Zahl in der DB speichern) sondern als String/varchar.

30.08.2006 - 12:55 Uhr

Nix. Es handelt sich ja um ein Ausgabeproblem. 15,2 ist nunmal genau das gleiche wie 15,200. Von daher wäre es bescheuert, wenn intern 15,200 gespeichert würde. Du kannst aber mit Ausgabeformatierung (string.Format) arbeiten - das ist sehr einfach und Du musst nicht händisch Nullen anhängen. Siehe zu string.Format auch Einlesen und Bearbeiten von Daten aus einer Txt-Datei

29.08.2006 - 20:19 Uhr

Hier ein kleines Beispiel, wie die Formatierung ungefähr aussehen könnte:

DateTime date = DateTime.Now;
string formatstring = "{0:10} {1,15:F} {2,15:F}";
float number1 = 10.2f;
float number2 = 1111.323f;
float number3 = 33333333333.3f;
float number4 = 111123.323f;
Console.WriteLine(formatstring, date.ToString("hh:mm:ss"), number1, number2);
Console.WriteLine(formatstring, date.ToString("hh:mm:ss"), number3, number4);

Console.WriteLine nimmt dabei exakt die gleichen Parameter an wie string.Format. Ich habe erste Variante gewählt, weil man da auch gleich etwas sieht. Das kannst Du ja leicht für Deine Bedürfnisse umbauen.

29.08.2006 - 19:00 Uhr

In (Text-)Dateien würde ich das nicht speichern, wenn es sich um viele strukturierte Daten handelt, diese besonders geschützt werden soll oder schneller Zugriff möglich sein soll.

Wie gesagt, ich meine mal gehört zu haben, dass man den abgespeckten SQL Server mit ins Projekt packen kann bzw. dass er eh im Framwrok integriert ist oder so - da kannst Du aber bestimmt mit einer Suche nach "SQL Server ins Projekt integrieren" oder so einiges hier finden.

Außerdem gibt es ja noch SQLite und evtl. embedded Firebird, die klein und leicht und automatisiert zu installieren sind.

Wenn es wirklich nur Dateien sein sollen, in denen Du Daten ablegst, dann sollte es eher XML sein anstatt einfachen Textdateien.

29.08.2006 - 18:19 Uhr

Original von Söckchen
Noch mal eben eine Frage zwischendurch:

Angenommen ich programmiere ein Programm welches auch eine Datenbank nutzt (nehmen wir mal die von MS): muss ich dann davon ausgehen, dass der Nutzer, der mein Programm nutzt, MS SQL Server installiert hat?

Ja klar.

Original von Söckchen
Und welche Dateien muss ich ihm geben, damit das Programm auch bei ihm funktionstüchtig wäre?

Das hängt von der DB ab. Mich würde es nicht wundern, wenn man einen (abgespeckten) MS SQL Server irgendwie ins Projekt packen kann. Alternativ kann man auch embedded Firebird oder SQLite verwenden, die nur aus einer Datei bestehen (zumindest letzteres) und deren Installation darain besteht, diese Datei auf die Platte des Benutzers zu kopieren. Wenn Du Dich aber gerade erst mit Datenbanken beschäftigst, so solltest Du diese Frage vielleicht erst einmal etwas nach hinten schieben.

29.08.2006 - 17:34 Uhr

Der erste Parameter von String-Format ist ein String, der die gewünschte Formatierung angibt.

Kannst Du mal ein kleines Beispiel machen, wie Textdatei aussehen soll, die Du erstellen willst?

29.08.2006 - 17:27 Uhr

Ich verwende VS nicht mehr, aber gab es da nicht eine Maske, mit der man den SQL Server administrieren konnte?

29.08.2006 - 16:50 Uhr

Du kannst den SQL Server über Visual Studio administrieren. Außerdem vermute ich, dass es einen extra Eintrag im Startmenü für SQL Server 2005 gibt.

29.08.2006 - 16:43 Uhr

Wenn Du nix dafür bezahlt und sie nicht über ne Tauschbörse geladen hast, dann ja.

29.08.2006 - 16:20 Uhr

Solche Handarbeit musst Du für Formatierungen in C# nicht mehr machen. Verwende stattdessen string.Format();

29.08.2006 - 16:18 Uhr

Du benötigst eine Datenbank und eine Möglichkeit, auf die Datenbank zuzugreifen. Für beides gibt es viele mögliche Optionen.

Die einfachste und automatisierteste ist die Verwendung des SQL Server 2005, der in .NET 2.0 und Visual Studio 2005 integriert ist. Da lassen sich dann viele Helferlein wie DataTables verwenden und Du kommst mit nativem SQL kaum noch in Berührung.

Wenn Du eher ein bisschen im "Dreck wühlen" willst oder einfach grundsätztlich was gegen den SQL Server hast, dann kannst Du auch andere Datenbanken einsetzen z.B. PostgreSQL, Firebird, mySQL, SQLite usw. Hier gibt es dann in der Regel eigene Treiber, die sich verwenden lassen, um die jeweiligen Features der Datenbanken zu unterstützen.

Hilfreiche Suchbegriffe zum Thema: ADO.NET, C# und Datenbanken

29.08.2006 - 15:00 Uhr

Installier Dir doch einfach vbtricksMyTools , das dürfte den gleichen Effekt haben wie Visual Studio aufzulassen...

BTW: Was sind schon 10 Sekunden? Ich versuche mich gerade an einem WebService für den WebSphere AppServer mit Rational Application Developer - DA lernt man die Zeit mit ganz neuen Maßstäben zu messen.

26.08.2006 - 01:48 Uhr

Ok, und ich dachte es gäbe triftige Gründe... 🤔

25.08.2006 - 19:45 Uhr

@Borg: 😁 Wieso darf man beim Programmieren keine Musik über Kopfhörer hören?

25.08.2006 - 13:58 Uhr

Ich arbeite mich gerade erst in Generics ein, aber ein paar allgemeine Tipps:

  • value muss nicht in T konvertiert werden, es hat automatisch diesen Typ.
  • nicht die privaten Attribute sondern die Properties beginnen nach C#-Coding-Guidelines mit einem Großbuchstaben
  • bei Fehlern immer die Fehlermeldung posten und wann diese auftritt
25.08.2006 - 12:58 Uhr

Hi TiTime. Ich glaube, dass man als Programmieranfänger erst einmal in ein paar Probleme reinlaufen muss, um dann irgendwann mal Patterns einzusetzen. Das alles auf einmal gleich am Anfang zu versuchen, wird wohl keiner schaffen. Außerdem ist es halt so, dass man Schmerzen selber gespürt haben muss, um diverse Workarounds auch wirklich anzunehmen - s. Kind und Herdplatte.

25.08.2006 - 12:05 Uhr

Ein guter Ansatz wäre es, in Main eigentlich nix zu tun, als allerhöchstens Eingabeaufforderungen auszugeben, die eingegebenen Daten zu lesen und dann an Methoden weiterzureichen. Als Beispiel das Laden der Kundendaten

static void Main(string[] args) {
    Console.WriteLine("Bitte geben Sie die Telefonnummer des Kunden ein: ");
    String phoneNumber = Console.ReadLine();
    String address = loadCustomerAddress(phoneNumber);
    ...
}

// Lädt Daten des über die Telefonnummer spezifizierten Kunden aus Kundendatei
private String loadCustomerData(String phoneNumber) {
  ...
}

Die Kundenadresse wird einfach als String zurückgegeben. Schöner wäre natürlich ein Adress-Objekt, aber für den Anfang reicht der String.

Das Wichtige ist ohnehin etwas anderes: Es hilft - und so macht es eigentlich jeder gescheite Programmierer - die Aufgabe in viele kleine Teile zu zerlegen, um sie einfacher lösen zu können. Ich würde Dir daher auch raten, zunächst einmal die Main komplett zu vervollständigen mit allen Ein- und Ausgaben sowie Methodenaufrufen. Dann besteht die Komplexität nur noch darin, die einzelnen Methoden mit Leben zu füllen. Da wirst Du dann wieder auf Probleme stoßen, z.B. wie man eine Datei einließt, etwas in einem Array speichert usw., aber das sind dann einzelnen kleine Probleme, die sich mit Hilfe eines Buches oder der Suche oder ggf. einer kurzen Frage erledigen lassen.

Wie gesagt, zunächst ist es wichtig, das Problem strukturiert anzugehen - und das Aufteilen in Methoden ist hier ein gangbarer Weg.

25.08.2006 - 11:12 Uhr

Original von TiTime
Wie gesagt einen "schnelleren" Weg hab ich leider bislang nicht gefunden.

Ist natürlich eine Möglichkeit, aber warum benutzt Du nicht IntelliSense?

24.08.2006 - 15:54 Uhr

Original von Naffel9

Original von Lord Hessia
Eine statische Klasse kannst Du doch einfach in der anderen verwenden. Evtl. noch den namespace einbinden.

Aber kann ich dann auch außerhalt der Klasse Session Settings über Config ansprechen?

Also Config.SessionSettings.Proberty1

Ja, indem Du ein Attribut oder Property vom Typ SessionSettings in Config anlegst.

24.08.2006 - 15:47 Uhr

Eine statische Klasse kannst Du doch einfach in der anderen verwenden. Evtl. noch den namespace einbinden.

24.08.2006 - 12:11 Uhr

Was soll denn drauf auf Deine Website?

23.08.2006 - 12:24 Uhr

Was genau soll sich ändern können? Die Werte, die Du zuweist oder die Attribute, denen Werte zugewiesen werden?

23.08.2006 - 11:40 Uhr

Du kannst in eine Hashtable Objeckte packen. Niemand hindert dich daran, als Objekte wiederum Hashtables zu verwenden.

23.08.2006 - 11:00 Uhr

Ach so, die lange Leitung heute morgen mal wieder...
Bei String-Sortierung würde ja 1.10.0 vor 1.5.0 stehen - bei Sortierung nach Zahlen nicht.

23.08.2006 - 10:47 Uhr

Reicht es nicht, die Werte als Strings zu vergleichen und zu sortieren?

23.08.2006 - 10:46 Uhr

Du könntest z.B. das neu geöffnete Fenster in Mainform erzeugen und einen Event regeistrieren, der gefeuert wird, wenn der gewünschte Wert geändert wird.

22.08.2006 - 20:13 Uhr

Eigene Klasse oder eigene Struktur, wenn Du Dich damit nicht auskennst, dann ist der angegebene Link genau das Richtige.

22.08.2006 - 19:17 Uhr

Dieses Buch wurde ja schon oft hier verlinkt: http://www.galileocomputing.de/openbook/visual_csharp/visual_csharp_04_004.htm#Xxx999341

Hier mal ein direkter Link zum Abschnitt Konstruktoren. Wenn Du grundsätzlich mit OO unsicher bist, dann wäre das ganze 4. und 5. (und evtl. 6.) Kapitel sinnvoll.

BTW: Gibt es in Delphi keine Konstruktoren?

22.08.2006 - 17:42 Uhr

Zum Glück hast Du ein bisschen Code gepostet, sonst wäre Dein Anliegen nicht zu verstehen... Du willst in einem Text nach Text suchen?

Klar, dafür gibt's Stringfunktionen. Einfach mal hinter line einen Punkt eingeben und schauen, was Intellisense so anbietet. Alternativ in der MSDN die String-Klasse inspizieren. Wenn es komplizierter wird, dann kommen auch RegEx in Frage, aber bei so einer einfachen Abfrage reichen StartsWith() und co völlig aus.

22.08.2006 - 17:36 Uhr

Sorry Söckchen, aber ich muss frisch schon insoweit zustimmen, dass Du Dir zumindest zum Thema Konstruktoren mal ein Buch oder Tutorial antun solltest.

Aber nochmal kurz zu Deiner Frage, weil's schnell beantwortet ist: Mit new Form1(args[0]) wird der Konstruktor aufgerufen, den ich vorhin gepostet habe. Du musst den natürlich noch erstellen, denn sonst ist der nicht vorhanden und es gibt den von Dir beschriebenen Fehler.

22.08.2006 - 17:25 Uhr

Du musst in Deiner Form1-Klasse einen weiteren Konstruktor anbieten, der so aussieht:

public Form1(String appName) {
  // Die Datei öffnen
}
22.08.2006 - 15:53 Uhr

Mit ADO.NET hast Du ja jetzt einen Suchbegriff. Weitere wären .NET und Datenbanken oder auch Datenbankzugriff mit .NET - so viel Kreativität sollte schon drin sein. Bei google helfen natürlich oft auch die englischen Pendants

22.08.2006 - 15:01 Uhr

Ok, wenn nicht alle Daten im DataGrid angezeigt werden (sollen) - das hättest Du aber mal vorher sagen können... - dann kannst Du sie glaube ich auch unsichtbar machen. So etwas wie Cell.Visible = False
Entweder versteckst Du so zumindest den Primary Key und machst dann über den eine SQL-Abfrage oder Du versteckst gleich sämtliche Daten und zeigst Sie im Detailview dann an.

22.08.2006 - 14:15 Uhr

Original von Zocker
Naja so super ist das nicht. Für den Platzhalter Fall ist das zwar OK, wenn jetzt aber wirklich nur zwischen 0 und 5 und nicht zwischen 0* und 5* gesucht werden soll, ist das wiederum schlecht. Da werd ich dann wohl mit Or Verknüpfungen arbeiten müssen.

Das liegt vermutlich daran, dass es sich um Strings und nicht um Zahlen handelt. Hier befinde ich mich aber auf dem weiten Feld der Spekulation.

22.08.2006 - 13:46 Uhr

Wie gesagt, die Daten stehen doch schon in dem DataGrid. Wozu also noch ein Select? Du greifst mit der rowid einfach auf DataGrid.Rows zu.

22.08.2006 - 13:44 Uhr

Original von Zocker
Du schreibst selber auch LIKE '0%', also ist es beim Firebird wohl doch wirklich anders, denn wenn ich nicht irre wird im Access * für solche Sachen benutzt 😉
Naja die Einzelabfrage funktioniert jetzt.

Das % ist Standard-SQL. Das * ist Access-Syntax. Dass Firebird nicht damit kompatibel ist, was man in Access eingeben kann, liegt weniger an Firebird sondern daran, dass Access seine eigene Syntax verwendet.

Original von Zocker
Was die andere Sache betrifft... wenn ich 0 und 5 eingebe, im Select-Befehl also "Nummer BETWEEN '0' AND '5'" steht, dürfte ich eigentlich keine Datensätze angezeigt bekommen. Wenn ich die Abfrage aber durchführe bekomme ich alle Datensätze angezeigt bei denen die Nummer mit 0-4 beginnt

Ist doch super!

Original von Zocker
(Nummer die mit 5 anfangen werden wiederum nicht angezeigt, obwohl die mit angezeigt werden sollten)

Das liegt dann wahrscheinlich daran, dass ein String mit z.B. 5000 nunmal in einer Sortierung nach 5 kommt. Versuch es mal mit 59999999999999 wie ich geschrieben hatte. Oder Du erhöhst die eingegebene Zahl einfach um eins oder ...

22.08.2006 - 12:23 Uhr

Du zeigst in Deinem neuen Fenster z.B. den 5-ten Datensatz an. Jetzt klickt der Benutzer auf weiter, dann zeigst Du den sechsten Datensatz usw.

Anzeige: DataGrid.Rows[5]
Klick auf Weiter
Anzeige: DataGrid.Rows[6]
usw.

Damit reduziert sich Dein Problem auf zwei Fragen: Wie kann man an den Index kommen? Das hast Du ja offenbar schon beantwortet, wenn Du bereits einen Datensatz im Detailfenster anzeigst.
Wie kann Deine Detailanzeige auf das DataGrid des ursprünglichen Fensters zugreifen? Kommunikation von 2 Forms

22.08.2006 - 12:16 Uhr

Die zwei Dinge, die Du willst, sind aber zwei ganz verschiedene. Außerdem haben die nix mit Firebird zu tun, sondern mit SQL an sich:

Eingabe von 0* => Alle Einträge, die mit 0 beginnen anzeigen:
WHERE value LIKE '0%' müsste es eigentlich tun
(Sind Deine Typen eigentlich Strings oder Zahlen? Bei Strings funktioniert das LIKE - bei Zahlen bin ich nicht sicher)

Eingabe von 0* 4* => Alle Einträge, die mit 0,1,2,3,4 beginnen anzeigen:
Hier wirst Du wohl mehrere von den oben gezeigten WHERE-Klauseln mit OR verknüpfen müssen. Es gibt zwar auch ein BETWEEN 0 AND 4, aber ich glaube nicht, dass das auch mit unvollständigen Werten zurechtkommt - müsstest Du evtl. ausprobieren.
Evtl. kannst Du auch tricksen: WHERE VALUE BETWEEN 00000000 AND 499999999 oder so.