Laden...
B
bitstream myCSharp.de - Member
Softwareentwickler Hannover Dabei seit 28.07.2004 189 Beiträge
Benutzerbeschreibung

Forenbeiträge von bitstream Ingesamt 189 Beiträge

05.07.2005 - 18:27 Uhr

Die Elemente einer Hashtable haben immer einen Schlüssel, den du entweder bei Add() als ersten Parmeter oder an den Indexer als Index übergibst. Im Beispielcode ist das immer der Wert der in strId drinsteht. Mit _htAlleObjekte[strId] greifst du also immer auf das Element zu, welches durch den Schlüssel strId identifiziert wird.

Der Schlüssel ist vom Typ System.Object, kann also beliebig sein. Der Schlüssel ist keine bestimmte Property deines Objekts, da die Hashtable die Logik deiner Objekte bzw. deren Klassen nicht kennt. Es ist also deine freie Entscheidung, woher dieser Schlüssel kommt und wo du diesen speicherst. Der Einfachheit halber bietet es sich logischerweise an, diesen in einem Instanzfeld des Objekts zu speichern und als Property ohne Setter zur Verfügung zu stellen. Es obliegt dann aber immer noch dir selbst, der Hashtable zu sagen, welcher Schlüsselwert zu verwenden ist, da die Hashtable diesen Umstand nicht kennen kann.

30.06.2005 - 09:46 Uhr

Original von RIDI2oo5
@bitstream: dein code könnte aber auch noch optimiert werden. etwa so:

Das würde ich nicht als Optimierung ansehen. Und besser finde ich es auch nicht, da es (zumindest für meinen Geschmack) es schlechter lesbar ist. Kurz gesagt, es war Absicht, das aktuelle Relation-Objekt in einer separaten Variable zu halten.

Xgene schrieb ausserdem: "oder wäre vielleicht eine hashtable eine bessere wahl?". Das wäre wirklich zu überlegen, eine Collection einzusetzen, bei der du den Relation-Namen als Schlüssel verwendest. Dann brauchst du gar keine Schleife mehr...

30.06.2005 - 09:19 Uhr

Ich würde folgendes vorschlagen, das auch das (bei einer grossen Anzahl von Einträgen) unperformante foreach() durch for() ersetzt.

public void DeleteRelation(string relationName)
{
	for (int i = 0; i < this.relations_.Count; i++)
	{
		Relation r = (Relation) this.relations_[i];
		if (r.RelationName == relationName)
		{
		    this.relations_.RemoveAt(i);
		    break;
		}
	}
}
28.06.2005 - 17:03 Uhr

Du kannst für die verschiedenen Ansichten auf der rechten Seite UserForms erstellen, die du bei einem Buttonklick gegeneinander austauschst. Damit hast du den gewünschten "Effekt", und es spricht auch nichts gegen so ein Vorhaben.

27.06.2005 - 18:32 Uhr

Original von RIDI2oo5

  1. was meint ihr, wenn ihr von der 'mangelnden sicherheit des IE' redet? in welche richtung? ist dies auch für einen 'standard-user' relevant?

Was mir spontan einfällt: ActiveX, VBScript, das sogenannte Sicherheitszonenmodell, die vielen Bugs, die feste Verdrahtung von Browser und Betriebssystem und nicht zuletzt die häufigeren Attacken wegen seiner grossen Verbreitung.

27.06.2005 - 15:37 Uhr

Original von SimonKnight6600
Bei manchen Seiten gibt es Probleme, ich hatte sogar schon mal ne Firmenseite(!) auf der Stand:

Sie nutzen einen Browser mit der Gecko Engine. Diese Browser werden nicht unterstützt.

Dagegen hilft die "User Agent Switcher"-Erweiterung. 😉 (Vorausgesetzt die Anzeige ist danach noch zu gebrauchen...)

27.06.2005 - 15:02 Uhr

Ich arbeite schon aus Prinzip und aus Sicherheitsgründen ausschliesslich mit dem Firefox. Darüber hinaus hat er einige nette Features, hinzu kommen viele praktische Extensions und eine deutlich bessere CSS-Unterstützung. Dass Firefox langsam sein soll, kann ich keineswegs bestätigen. Einzig bei komplexen Tabellenkonstrukten (sehr gross und/oder mehrfach verschachtelt) gibt's hier und da Probleme, aber sowas tut man sich auch nicht freiwillig an. Ich sehe also keinen Grund, warum ich mir den IE antun sollte. Selbst vor Firefox habe ich eine Alternative genutzt, damals Opera.

24.06.2005 - 08:57 Uhr

Original von MSuthe
Dabei habe ich festgestellt, dass beim ersten Auslösen der Exception diese eine beachtliche Laufzeit benötigt. Bei einem erneuten Auslösen nicht mehr.

Das ist zwar ärgerlich aber normal und wohl auch nicht zu ändern. Das passiert aber nur im Debug-Modus in der IDE. Wenn du die EXE separat startest, ist das Problem verschwunden. So, who cares? Btw, bei mir dauert das Catching nur ca. 2-3 Sekunden.

24.06.2005 - 08:48 Uhr

Im Framework gibt es leider keine Möglichkeit hierzu. Du kannst dir aber bei The Code Project ein fertiges Control für die Eingabe von IPv4-Adressen heraussuchen.

24.06.2005 - 08:45 Uhr

Original von Quest
Hmm, das ganze geht noch weiter, wenn ich "192.169.020.010" Parse krieg ich "192.169.16.8" raus - irgendwie verstümmelt der jedes mal bei führenden Nullen...

Vorausgesetzt die Teile mit führenden Nullen werden als Oktalzahl gewertet, wäre das ja auch korrekt: 010 oct = 8 dez. Merkwürdig wird es eigentlich nur, wenn bei Voranstellen einer 0 eine ungültige Oktalzahl wie 019 notiert wird. Da würde ich einen Fehler erwarten.

In dem Link von bitsream gehts ja um genau dasselbe...

Den habe ich mir selber nochmal angeschaut. Dort geht es zwar um das Compact Framework, aber wenigstens habe ich überhaupt etwas dazu gefunden... 😉

23.06.2005 - 19:49 Uhr

Bei mir funktionieren auch alle vier (Fx 1.1) ohne Fehler.

Allerdings passiert etwas merkwürdiges bei den führenden Nullen: Der String "192.169.20.018" bspw. wird in die IP-Adresse 192.169.20.16 umgewandelt.

Bei führenden Nullen und Merkwürdigkeiten denke ich immer sofort an das Oktalsystem, vor allem, wenn die Merkwürdigkeiten nahe 7 und 8 auftreten. Das stimmt auch, sofern es korrekte Oktalzahlen sind. Beispiel: Aus "192.169.20.017" wird 192.169.20.15.

Merkwürdig wird's aber wirklich bei ungültigen Oktalzahlen wie dem 018 aus dem ersten Beispiel oben. Das müsste eigentlich zu einem Fehler führen; stattdessen bekommen wir die gänzlich unpassende Adresse 192.169.20.16 für "192.169.20.018".

Dann habe ich mal kurz ins Netz geschaut und zumindest folgendes gefunden: Neil Cowburn - IPAddress.Parse() Gotcha

22.06.2005 - 09:55 Uhr

Original von herbivore
Im Englischen hat 'instance' dagegen viele Bedeutungen und tatsächlich ist die richtige Übersetzung von 'instance' im Zusammenhang mit OOP 'Exemplar'.

Bekannt ist mir das schon, zumal in vielen sprachunabhängigen, vor allem älteren Texten eher von 'Exemplar' die Rede ist. Dennoch sage und schreibe auch ich normalerweise 'Instanz', um Unverständnis zu vermeiden.

und wenn ich es mir recht überlege, scheib ich in Zukunft wieder 'Exemplar', wie ich das in Vor-MyCSharp-Zeiten getan habe.

Wäre eine Überlegung Wert. Unnötige Anglizismen und falsche Übersetzungen sind mir eigentlich auch ein Dorn im Auge. Die 'Umwelt' verleitet einen selbst dann aber doch oft dazu, es auch falsch zu machen...

Und wo wir gerade bei dem Thema sind, gibt es noch zwei Informatik-Standard-Fehlübersetzungen: 'control' wird oft/meistens mit 'Kontrolle' übersetzt, obwohl es 'Steuerung' heißen müsste. Ein Indiz dafür haben wir alle vor der Nase. Das 'Ctrl' der Control-Taste ist ja auf deutschen Tastaturen korrekt mit 'Strg' für Steuerung übersetzt.

Was ich in diesem Zusammenhang noch viel schlimmer finde: Vielen ist offenbar nicht bewusst, dass 'Strg' eine deutsche Abkürzung ist und lassen sich dabeu auch nicht dadurch beirren dass alle anderen Tasten mit deutschen Worten bzw. Abkürzungen beschriftet sind. Allzuoft höre ich, dass die 'Strg'-Taste mit 'String'-Taste oder -- noch viel schlimmer -- als 'Strong'-Taste bezeichnet wird. Da rollen sich mir die Fussnägel...

Dass das hier keine Moralpredigt sein soll, mag daran klar werden, dass ich selbst mein halbes Leben fälschlicherweise davon ausgegangen bin, dass Stati die korrekte Mehrzahl von Status ist. Vor ca. einer Woche wurde ich eines Besseren belehrt. Korrekt ist Status - mit langen u gesprochen. Anfreunden kann ich mich damit immer noch nicht. 🙂

Lustigerweise wurde mir von einem Lehrer mal der Plural-'Status' als falsch angekreidet, da musste ich ihn erst einmal davon überzeugen, dass es das Wort 'Stati' nicht gibt. Alternativ kann man im Plural auch von 'Statuswerten' oder 'Zuständen' sprechen.

21.06.2005 - 15:16 Uhr

Original von svenson

[field:System.Reflection.FieldAttributes.NotSerialized]  
public event ......  
  

Mir ist allerdings schleierhaft, warum das nicht [event:System.Reflection.FieldAttributes.NotSerialized] heißt.

Warum dem so tut, ist ganz einfach: Der "field:"-Modifier soll explizit ausdrücken, dass sich das eben nicht auf das Event selber bezieht, sondern auf das "darunterliegende" Feld, in welchem die EventHandler registriert wurden.

16.06.2005 - 10:08 Uhr

Kleiner Tipp: Wenn du nun weisst, dass es eine Klasse namens BitConverter gibt, warum schaust du nicht einfach mal in deren Dokumentation, um den umgekehrten Weg selber herauszufinden?

16.06.2005 - 09:30 Uhr

Ja, diese Möglichkeit gibt es und hört auf den Namen BitConverter.GetBytes().

15.06.2005 - 11:38 Uhr

Original von SuperThoms
Allerdings will ich z.B. nur die ersten 500.000 Datensätze haben.

Dann würde ich das gleich im SQL-Statement so mit angeben:

SELECT TOP 500000 ... FROM ...

Aber bitte nicht mit WHERE id < 50000, denn niemand kann und darf garantieren, dass die IDs "lückenfrei" sind.

11.06.2005 - 13:29 Uhr

Da gibt's nichts fertiges für im Framework. Aber du kannst z.B. bei The Code Project schauen, ob da schon jemand was gebastelt hat.

10.06.2005 - 20:04 Uhr

Es reicht, wenn du im Designer im Eigenschaften-Grid unten rechts bei "Icon" die Icon-Datei auswählst. VS.NET fügt dann den passenden Code ein und legt für die Icondatei einen Ressourceneintrag an. Das musst du also nicht händisch zusammenfummeln.

10.06.2005 - 14:43 Uhr

Original von budy1234

byte [] testbyte = new testbyte[2];  

Bist du sicher, dass du nicht meintest:

byte [] testbyte = new byte [2];
testbyte[0] = 4;  
testbyte[1] =  3;  
  
string ergebnis = Convert.ToBase64String(bytespeicher) + Convert.ToBase64String(testbyte);  

Die Zeichen mit dem ASCII-Code 4 und 3 sind in einem Base64-String ganz sicher nicht erlaubt, zumal sie keine darstellbaren Zeichen sind. Der Sinn von Base64 ist es doch gerade, Nicht-ASCII-Zeichen zu kodieren!

10.06.2005 - 12:53 Uhr

Ich bezweifle einfach mal ganz stark, dass die Year-Spalte als VARCHAR deklariert wurde, du gibst aber OleDbType.VarChar für den Parameter an.

09.06.2005 - 19:30 Uhr

Bist du als TheRealHawk bei Spotlight.de unterwegs? Die Frage liest sich sehr nach dieser hier, auf die ich dir gestern schon geantwortet habe.

08.06.2005 - 20:38 Uhr

Wie wäre es mit einem kostenlosen eBook? Unter Galileo Computing – <openbook> gibt's einen Titel zu C# zum Downloaden und Online-Lesen.

02.06.2005 - 22:58 Uhr

Original von Quallo
@bitstream: Ich denke, dass Kraft recht hatte: Ich habe bei einer Stelle drei Zustände also drei Möglichkeiten.
Dass macht also ZuständeStelle = 31 = 3.
Wäre es StelleZustände, dann wäre es 13 = 1.

Stimmt, ich habe mich geirrt. Ich bin da wohl mit den Begriffen Felder und Zustände durcheinander geraten...

Es verhält sich ja so wie bei den Zahlensystemen! Wenn man eine vierstellige Binärzahl hat, gibt es 24=16 Kombinationen. Übertragen auf KRAFTs Frage haben wir also eine vierstellige Ternärzahl, also 34=81 Kombinationen.

02.06.2005 - 21:58 Uhr

Original von KRAFT
Ich habe ein Schema mit 4 Feldern. Jedes dieser Felder kann einen von 3 Zustanden annehem (1,2,3). Die Anzahl der Möglichen Kombinatioen ist also 3 hoch 4 also 81 wenn ich das richtig sehe.

Nein, die Anzahl möglicher Kombinationen ist immer StellenZustände, in deinem Fall also 43 = 64.

Den Rest deiner Frage habe ich nicht verstanden... 😕

02.06.2005 - 13:22 Uhr

Man kann char nach int casten, dann erhält man dessen Zeichencode. Beispiel:

char c = 'A';
int i = (int) c;
 
Console.WriteLine("{0} = {1}", c, i);

Beachte aber, dass .NET mit Unicode arbeitet, ASCII ist nur ein kleiner Teil (0-127) davon.

02.06.2005 - 13:08 Uhr

Alle URL-Parameter bei einem GET-Request müssen korrekt kodiert werden. Erlaubt sind nur bestimmte Zeichen des US-ASCII-Zeichensatzes. Alle Details dazu findest du in RFC 1738. Im Framework gibt es dazu System.Web.HttpUtility.UrlEncode.

31.05.2005 - 16:45 Uhr

DataView.Sort kann nur Spaltennamen als Wert annehmen (ggf. mit "ASC"/"DESC"), keine Ausdrücke.

30.05.2005 - 13:27 Uhr

Kurze Antwort: Nimm C#. Lange Antwort:

Bei .NET ist es eigentlich relativ egal, welche .NET-Sprache du verwendest, da alle auf das selbe Framework zugreifen und in die selbe IL transformiert werden. Lediglich in der Syntax gibt es Unterschiede. Da du bereits Kenntnisse in Java und C++ hast, dürfte dir der Einstieg in C# sicherlich deutlich leichter fallen, da hier grosse Verwandtschaft in der Syntax besteht; VB.NET ist da völlig anders.

Und meine ganz persönliche Meinung: Die Syntax von VB (egal ob 6 oder .NET) ist hässlich, unübersichtlich und schlecht lesbar. C# hingegen ist schlank, elegant und leicht lesbar. Auch wenn man vorher mit VB6 gearbeitet hat, VB.NET ist doch zu anders, als dass einem das grossartig helfen würde.

27.05.2005 - 19:01 Uhr

Doch: DateTimePicker und Format auf DateTimePickerFormat.Time stellen.

27.05.2005 - 16:44 Uhr

Bei Galileo Computing / OpenBooks findest du u.a. welche zu ASP.NET, VB.NET und C#.

27.05.2005 - 16:09 Uhr

Du musst BorderStyle auf None, WindowState auf Maximized und TopMost auf true stellen. Falls der Fensterrahmen so noch nicht gänzlich verschwunden ist, evtl. noch Systemmenü/-Buttons ausblenden und Titel entfernen.

27.05.2005 - 11:16 Uhr

Gute Zusammenfassung, Svenson! Als Ergänzung: Wenn man die Assemblies in eine neue AppDomain lädt, kann man diese sogar zur Laufzeit wieder entladen, z.B. um Plugins zu deaktivieren. Mittels FileSystemWatcher kann man auch das Plugins-Verzeichnis überwachen, um neue Plugins zur Laufzeit zu erkennen und automatisch nachzuladen.

26.05.2005 - 16:58 Uhr

An sich ist das kein Problem. Kuck dir auf CodeProject.com mal die vielen Beispiele zum Thema Plugins an.

25.05.2005 - 22:23 Uhr

Es kann sich ja auch um MP3-Dateien handeln, die vor Inkrafttreten des verschärften Urheberrechts erstellt wurden, wo also Privatkopien in gewissem Rahmen noch erlaubt waren. Und sofern mich meine Erinnerungen nicht täuschen, gibt es keine rückwirkenden Strafvorschriften. Das hiesse, damals legal erstellte Kopien werden nicht plötzlich rückwirkend illegal. Er darf sie nur nicht mehr weitergeben oder gar verbreiten. Sollten mich meine Erinnerungen doch täuschen, möge man mich korrigieren. 😉

25.05.2005 - 20:20 Uhr

Aus dem Artikelanfang schliesse ich, dass die Berechnung der Disc-ID aus Informationen des TOC beruht. Da man diese bei MP3-Dateien nicht hat, ist meine Schlussfolgerung: es geht nicht. Es sei denn du schaffst es, diese Informationen irgendwie aus dem Dateiheader nachzubilden, da hilft wohl nur probieren...

25.05.2005 - 19:12 Uhr

Normalerweise erstellt man in einer Schleife jedes ListViewItem einzeln und fügt dieses per Add() hinzu. Es ist aber wesentlich schneller, wenn man zuerst alle ListViewItems in einem Array erstellt und diesen dann mit AddRange() hinzufügt. Also in etwa so:

SuspendLayout
Schleife
{
    ListViewItems erstellen
}
AddRange
ResumeLayout

Anstatt:

SuspendLayout
Schleife
{
    ListViewItem erstellen
    Add
}
ResumeLayout
25.05.2005 - 17:57 Uhr

Das @ vor einer Zeichenfolge ist nur nötig, wenn ein Backslash darin vorkommen soll. Dann braucht man diesen nicht zu verdoppeln, da ein Backslash ja sonst ein Entwertungszeichen ist.

Statt "D:\Dies\ist\ein\Ordner" kann man auch @"D:\Dies\ist\ein\Ordner" schreiben.

25.05.2005 - 14:24 Uhr

Ich habe mit der FreeDB zwar noch nicht gearbeitet, aber über den CodeProject-Artikel findest du diesen Artikel, der hier zutreffend sein sollte.

25.05.2005 - 14:17 Uhr

Funktioniert es vielleicht, wenn du ".\SQLExpress" als Data Source angibst, oder läuft die DB auf einer anderen Kiste? Benutzt du eigentlich 2.0? Habe folgenden Hinweis gefunden:

"You have to use the 2.0 providers to connect directly to SQL 2005 (as opposed
to OLEDB or ODBC, which can connect from .NET 1.x). The reason has to do with
the changes in internals. This may change before release (it is a beta, afterall)."

25.05.2005 - 12:01 Uhr

Ist dir bewusst, was ein einzelner Backslash in einem String bewirkt?

24.05.2005 - 19:04 Uhr

Richtig, DateTime hat kein TotalSeconds. Das hat herbivore aber auch nicht geschrieben. Er hat zwei DateTimes voneinander subtrahiert; das Eregbnis davon ist ein TimeSpan, das eine TotalSeconds-Eigenschaft hat.

24.05.2005 - 18:03 Uhr

Das DataSet ist in System.Data.dll definiert.

24.05.2005 - 14:32 Uhr

Ob du eine Datenbank brauchst, musst du selber entscheiden (Umstände, Datenmenge). Zwingend notwendig ist sie aber nicht. Du könntest die Daten intern in einem DataSet halten und mit diesem deine ListView füllen. Das DataSet hat den Vorteil, dass du für dieses keine DB brauchst, laden/speichern geht auch von/in eine Datei mittels WriteXml() bzw. ReadXml(). Eine Umstellung auf eine DB ist dank des bereits vorhandenen DataSet keine grosse Sache mehr.

23.05.2005 - 12:20 Uhr

Ja. Der Inhalt der TabPages bleibt unverändert.

23.05.2005 - 11:35 Uhr

Original von st@tic
echt? ich kann ein tabpage entfernen und alle controlls die da drauf sind bleiben bestehen?

Ja, denn niemand "fasst" diese an. Du darfst nur nicht die Variable zerstören/überschreiben, in der die Instanz der TabPage abgelegt ist.

23.05.2005 - 10:58 Uhr

Original von st@tic
hmm und geht das mit wenig aufwand?

Einfach deinTabControl.TabPages.Add() bzw. ...Remove(). Einfacher geht's nicht, oder?

weil wenn ich jetzt jedes einzelne feld neu instanzieren muss positionieren muss und alles was mit visual studio so schön vorarbeitet, dann ne dann deaktivier ich es lieber 😄

Ich verstehe nicht, was du mit "jedes einzelne Feld" meinst? Auf den Inhalt der TabPages hat das Entfernen/Hinzufügen keinen Einfluss, der bleibt ja da.

23.05.2005 - 10:22 Uhr

Hide(), Show() und Visible werden von TabPage nicht unterstützt. Die einzige Lösung ist es, die TabPage(s) bei Bedarf aus dem TabControl zu entfernen und später wieder hinzuzufügen.

15.05.2005 - 14:09 Uhr

Wie Noodles schon schrieb, steht das in der Fehlermeldung drin. Die Ursache ist auch leicht erklärt: Innerhalb der while-Schleife benutzt du ja den DataReader, um die Datensätze auszulesen. Währenddessen ist die daran gebundene Connection belegt, so dass du mit der selben Connection kein anderes Kommando ausführen kannst.

14.05.2005 - 13:58 Uhr

"Funktioniert nicht" ist keine Problembeschreibung, mit der irgendjemand etwas anfangen könnte. 😦 Wie lautet die Fehlermeldung bzw. wie weicht das erreichte Verhaltem vom erwarteten ab? Wichtig wäre auch zu wissen, wie das Schema der Tabelle "test" aussieht.