Laden...
Avatar #avatar-1590.jpg
Fabian myCSharp.de - Member
Student & Fachinformatiker - Anwendungsentwicklung Dortmund Dabei seit 09.12.2004 1.985 Beiträge
Benutzerbeschreibung

Forenbeiträge von Fabian Ingesamt 1.985 Beiträge

09.10.2007 - 14:04 Uhr

Hallo zusammen,

ich schreibe immer this. Warum auch immer ich mir das angewöhnt habe. Ein auch schon genannter Grund wird wohl Intellisense sein, da man dadurch dann etwas schneller zum Ziel kommt.

Gruß,
Fabian

09.10.2007 - 12:31 Uhr

Hallo fantinger,

vertauschen kann man die nicht so einfach. Zumindest fällt mir keine Lösung ein.

Du kannst aber die Controls, die Du zu den Panels hinzufügst, auf UserControls platzieren und dann die UserControls zum Splitter hinzufügen. Dann brauchst Du nur die UserControls zu tauschen, was wohl recht wenig Aufwand ist.

Gruß,
Fabian

08.10.2007 - 15:18 Uhr

Hallo ihr beiden,

danke für den Link und die Antworten.

Gruß,
Fabian

08.10.2007 - 13:59 Uhr

Hallo zusammen,

am Anfang der Diskussion wurde als Nachteil von Events erwähnt, dass sie, im Vergleich zum Observer-Pattern, eine schlechte Performance haben. Wie groß ist dieser Unterschied denn und wie kommt der zustande?

Gruß,
Fabian

04.10.2007 - 21:49 Uhr

Hallo sbertl000,

das hat aber nichts mit dem Veröffentlichen des Quellcodes zu tun. Wenn man einen Fehler im Framework vermutet, baut man ja auch jetzt schon einen Workaround, der dann nach einem Update evtl. nicht mehr funktioniert.

Ganz im Gegenteil: Wird der Quellcode veröffentlicht, geht es meistens schneller, da man viel schneller von einem Fehler erfahren kann.

Gruß,
Fabian

04.10.2007 - 09:27 Uhr

Hallo zusammen,

sehr coole Sache. Vor allem die Möglichkeit, mit VS 2008 in das Framework debuggen zu können, ist sehr nett.

Gruß,
Fabian

03.10.2007 - 15:25 Uhr

Hallo hobo,

Willkommen im Forum.

Visual Studio setzt nicht automatisch die Klammern. Soweit ich weiß, kann man das auch nicht aktivieren. Dazu müsstest Du auf Erweiterungen Dritter in Form von AddIns zurückgreifen.

Gruß,
Fabian

01.10.2007 - 18:32 Uhr

Hallo derott,

Du kannst die Select Methode verwendet und dort den Suchstring übergeben. Beispielsweise "ID_Spalte = " + deineID. Du bekommst dann ein Array von DataRows zurück, die diese ID enthalten. Ist das Array leer, gab es keine Treffer.

Gruß,
Fabian

28.09.2007 - 08:49 Uhr

Hallo Cookiie,

ohne Grund wird eine Anweisung nicht von heute auf morgen ignoriert. Kannst Du mal den enstsprechenden Code-Abschnitt posten?

Gruß,
Fabian

27.09.2007 - 18:56 Uhr

Hallo ECP,

falls Du wirklich doc-Dateien schreiben willst, geht das wohl nur über eine Word-Ansteuerung. Alternativ kannst Du auch RTF schreiben, dass Du dann schon in C# formatieren kannst (Stichwort: RichtTextbox).

Gruß,
Fabian

26.09.2007 - 13:59 Uhr

Hallo Haggy,

ich weiß nur von der Möglichkeit, dass man es einfach im Designer-Code ändern. Nach einem erneuten Aufruf des Designers zeigt auch er dann die neue Basisklasse an.

Eine Variante direkt über den Designer ist mir nicht bekannt.

Gruß,
Fabian

26.09.2007 - 09:59 Uhr

Hallo spidermike,

was heißt "nicht gespeichert wird"? Wenn Du in die nächste Zeile gehst, bleibt dann die davor editierte bestehen, also siehst Du die Werte weiterhin? Stehen die Daten also nur nicht in der Datenbank?

Wenn ja, aktualisierst Du denn auch die Datenbank? Das macht das DataGridView nicht automatisch. Du musst noch ein EndEdit() aufrufen und mit einem TableAdapter die entsprechende DataTable wegschreiben.

Gruß,
Fabian

25.09.2007 - 11:09 Uhr

Hallo zerberos,

wenn es geht, guck Dir die Struktur der Tabelle "ALL_TABLES" an. Evtl. ist dort eine Spalte enthalten, die angibt, ob es sich um eine User- oder um eine System-Tabelle handelt.

Wenn Du an diese Info nicht kommst, muss Du es manuell machen. Also beim Durchgehen des Resultsets abragen, ob eine Systemtabelle dabei ist.

Gruß,
Fabian

25.09.2007 - 10:11 Uhr

Hallo Caesarll,

wenn ich heute Abend zu Hause bin, gucke ich mal in meinen Code, da ich so etwas auch schon mal gemacht habe (allerdings mit einer MSSQL 2005 Datenbank im Hintergrund).

Ich poste dann mal meinen Code. Evtl. ist er hilfreich.

Gruß,
Fabian

25.09.2007 - 09:30 Uhr

Hallo Caesarll,

ich kann mir gut vorstellen, dass die Zeichen, die in Access als Platzhalter fungieren, mit der BindingSource nicht funktionieren.

Laut Access-Forum sind es die beiden Zeichen "*" und "?" für beliebig viele bzw. ein Zeichen.

Vielleicht findest Du im MSDN-Forum etwas dazu.

Gruß,
Fabian

24.09.2007 - 14:16 Uhr

Hallo JLL,

hat vielleicht das permanente Deaktivieren der beiden Scrollbars den gewünschten Effekt, dass gar nicht mehr gescrollt wird?

Gruß,
Fabian

24.09.2007 - 14:15 Uhr

Hallo Pegasus2003,

Willkommen im Forum!

Zugriff hast Du über das TreeView. Dort gibt es die Eigenschaft "Nodes". Jede Node ist ein TreeNode, dass wiederrum eine Eigenschaft "Nodes" besitzt.

Auf der TreeNodeCollection kannst Du dann beispielsweise die "Add"- und "Remove"-Methoden anwenden.

Gruß,
Fabian

24.09.2007 - 14:13 Uhr

Hallo haxXxy,

erste Anlaufstelle sollten Tests, wie beispielsweise der von herbivore genannte, sein. Da bekommt man fundierte Messungen und Fakten zu den Programmen.

Ich persönlich benutze TrendMicro. In der Firma wird Kaspersky eingesetzt.

Hallo el_panter,

grundsätzlich richtig. Erst denken, dann klicken!

Allerdings würde ich trotzdem einen Scanner einsetzen. Nicht jeder Virus macht sich bemerkbar, in dem er Dateien löscht oder sonst wie beeinflusst. Gibt genug Trojaner etc. pp., die einfach munter im Hintergrund Daten sammeln und die man nicht so einfach bemerkt.

Gruß,
Fabian

24.09.2007 - 14:05 Uhr

Hallo spidermike,

Du hast das DataGridView doch an eine DataTable gebunden oder? Dort kannst Du dann neue Zeilen hinzufügen. Wenn Du es lieber über den BindingNavigator machst, kannst Du auch einen zweiten anlegen, der das Binding von der DataTable zu dem DataGridView übernimmt.

Gruß,
Fabian

24.09.2007 - 10:42 Uhr

Hallo Caesarll,

Willkommen im Forum.

Versuch mal das Prozentzeichen. Ich meine, dass ist bei Access der Ersatz für das "?".

Gruß,
Fabian

24.09.2007 - 10:12 Uhr

Hallo romu2000,

die Möglichkeiten, wie Du das Problem lösen kannst, sind vielfältig.

Ich habe bis jetzt immer die Variante bevorzugt, dass bei Programmstart ein Login-Dialog erscheint, der eine ComboBox enthält (Benutzername und Passwort kannst Du ja weglassen).

Aus dieser ComboBox kann der Benutzer eine DSN (ODBC-Verbindung) auswählen, die man in Windows anlegen kann. Dadurch ist man absolut flexibel, da es ausreicht, eine weitere DSN anzulegen, um sich auf eine ganz andere Datenbank zu verbinden.

Gruß,
Fabian

24.09.2007 - 09:26 Uhr

Hallo 84ernie,

foreach (DataGridViewRow row in dataGridView1)

das kann ja auch nicht gehen. Woher soll die foreach-Schleife denn wissen, dass sie die Rows des DataGridViews benutzen soll?

Versuch es mal so:

foreach (DataGridViewRow row in dataGridView1.Rows)

Gruß,
Fabian

23.09.2007 - 18:56 Uhr

Hallo Letitia L.,

warum machst Du es Dir so schwer?

bool wert = ListView1.SelectedItems.Count > 0;

Ich gehe bei dem Code davon aus, dass die Variable "wert" true sein soll, wenn mindestens eine Zeile selektiert ist.

Der Hintergrund, warum das Parsen nicht klappt, ist der, dass bool.Parse() "true" oder "false" erwartet, und eben nicht "1" oder "0".

Gruß,
Fabian

22.09.2007 - 22:18 Uhr

Hallo itfreak,

es gibt doch die SetModified() Methode einer DataRow. Die aufzurufen sollte reichen.

Gruß,
Fabian

21.09.2007 - 13:08 Uhr

Hallo maro,

das kannst Du für das PropertyGrid einstellen. Es gibt bestimmte Attribute, die nur für die Ansicht im PropertyGrid gelten. Such mal in der MSDN nach PropertyGrid. Da sollte es einen Hinweis / Verweis auf die Informationen geben.

Gruß,
Fabian

20.09.2007 - 16:50 Uhr

Hallo zusammen,

Original von T-Rip
Bei mir ist das Problem, dass ich im Betrieb eine firmeneigene Sprache lerne und die mir danach nicht weiterhilft, außer vielleicht was im Bezug auf Programmierung allgeimein.

so ähnlich war es bei mir auch. Ich habe eine recht alte Sprache gelernt. Das ist allerdings kein Problem, bzw. sollte zumindest keins sein.

Mir hat mal jemand gesagt: "Lerne zu programmieren. Alles andere ist Syntax". Wenn man genug in Bezug auf die Programmierung im Allgemeinen lernt, ist das genau so viel Wert.

Gruß,
Fabian

20.09.2007 - 16:47 Uhr

Hallo gabifi,

die von Dir genannten Events müssten schon richtig sein. FormClosing tritt auf, bevor geschlossen sind. Dort kannst Du das andere Form schließen.

FormClosed ist das Event, dass nach dem Schließen auftritt.

Gruß,
Fabian

20.09.2007 - 15:50 Uhr

Hallo v.wochnik,

herzlich Willkommen im Forum!

Den Form-Designer bekommst Du beispielsweise über das Kontextmenü einer Datei wieder auf. Wenn Du auf eine Form-Datei im Solution-Explorer mit der rechten Maustaste klickst, kannst Du den Eintrag "View Designer" anklicken. Das gleiche funktioniert, wenn Du den Code einer Form-Datei offen hast. Dort kannst Du auch mit der rechten Maustaste reinklicken und den gleichen Eintrag auswählen.

Ein Raster ist automatisch aktiv. Die Werte dazu kannst Du unter "View -> Options -> Windows Forms Designer -> General -> LayoutMode" umstellen. Dort muss SnapToGrid aktiviert werden.

Gruß,
Fabian

20.09.2007 - 15:43 Uhr

Hallo mbk_chilli,

so einfach kannst Du den Dialog glaube ich nicht als Panel verwenden. Ein weiteres Control gibt es auch nicht.

Evtl. findest Du aber auf www.codeproject.com gute Komponenten, die Dir das Nachprogrammieren abnehmen.

Gruß,
Fabian

20.09.2007 - 12:37 Uhr

Hallo Arthuro,

nach dem Benutzen des Bitmaps die Methode .Dispose() aufrufen, damit die Ressourcen wieder freigegeben werden.

Gruß,
Fabian

19.09.2007 - 22:33 Uhr

Hallo Feivel,

das nennt sich, wenn ich mich recht erinnere, SmartTags. Zu dem Suchbegriff solltest Du hier und/oder bei Google einige Treffer erhalten.

Auf www.codeproject.com gab es auch mal einen guten Artikel, den ich aber gerade nicht finde.

Gruß,
Fabian

19.09.2007 - 14:38 Uhr

Hallo Piko1977,

ich denke, dass e.ToolTipText der Text ist, der als ToolTipp angezeigt wird. Wenn Du jetzt den ToolTipp der Zelle abfragst, wird das Event wieder ausgelöst und das Ganze beginnt von vorne.

Original von Piko1977
Wenn ich das Richtig verstanden habe, dann müsste ich für jede Zelle z.B. eine Value setzen und dann in der _ToolTipTextNeeded dem e.ToolTipText diese Value übergeben. Habe ich das so richtig verstanden?

genau, das meine ich. Evtl. kann man beim DataGridView auch einstellen, dass automatisch ein bestimmter Wert für den ToolTipText benutzt wird. Da bin ich mir aber nicht sicher. Musst Du vielleicht noch mal die Doku durchgucken.

Gruß,
Fabian

19.09.2007 - 13:48 Uhr

Hallo Piko1977,

kann es evtl. sein, dass der Aufruf von

row.Cells[col.Index].ToolTipText;

wieder das Event auslöst, da Du ja den ToolTipp einer Zelle anforderst? Dann hast Du eine Rekursion. Die hat die von Dir beschriebene Exception zur Folge.

Ich denke, Du hast da noch ein gerenelles Verständnisproblem. Du greifst mit dem oben genannten Ausschnitt direkt auf den ToolTipp einer Zelle zu. Wenn Du das kannst, warum willst Du dann den ToolTipp noch mal setzen?

Ich denke, Du musst dem "e.ToolTipText" den neuen Text übergeben, also beispielsweise den Wert, der in der Spalte steht.

Gruß,
Fabian

18.09.2007 - 15:13 Uhr

Hallo schaedld,

wird es die überhaupt geben? Ich meine beispielsweise ein DataGridView als WPF-Version. Soweit ich gehört und es verstanden habe, wird es diese nicht mehr von MS geben, oder bin ich da falsch informiert?

Gruß,
Fabian

17.09.2007 - 16:14 Uhr

Hallo spidermike,

das kannst Du auf mehrere Arten lösen:

  1. Du kannst das Datum mit in die zweite Form übergeben und dort ein zweites DataSet, dass an ein DataGridView gebunden ist, befüllen. Dazu musst Du in der DataTable eine neue Abfrage erstellen, die ein Datum als Parameter annimmt. So kannst Du das Datum, dass Du in die Child-Fom übergeben hast, direkt als Parameter der Abfrage benutzen. Dadurch werden auch nur Spalten aus der Datenbank geladen, die Du haben möchtest.

  2. Du kannst das komplette DataSet in die Child-Fom übergeben, dort an ein neues DataGridView binden und einen Filter über die BindingSource einstellen.

Je nachdem, was in Deinem Fall besser ist, kannst Du dann umsetzen.

Gruß,
Fabian

17.09.2007 - 12:55 Uhr

Hallo jaensen,

das Decorator-Pattern ist dafür da, einem Objekt neue Funktionen zu geben, also es zu dekorieren. Dabei muss das alte Objekt in das neue Objekt übergeben werden, wenn ich das richtig verstanden habe.

Beispiel: KlasseA, KlasseB, KlasseC.

Instanziiert wird KlasseA. Jetzt soll diese Klasse um die Möglichkeiten der KlasseB erweitert werden. Also rufe ich den Konstruktor der KlasseB auf und übergebe KlasseA. Mit KlasseC mache ich das gleiche, indem ich dem Konstruktor KlasseB oder die KlasseA übergeben, je nachdem, wie ich dekorieren will.

Dadurch ist es zu jeder Zeit möglich, sich aus einem Objekt das vorherige rauszuholen und damit eine Schicht zu entfernen.

Gruß,
Fabian

17.09.2007 - 11:02 Uhr

Hallo longjohnsilva,

soweit ich weiß, musst Du das manuell machen, indem Du die Position und Länge des Zeichens im String ermittelst und darunter eine Linie zeichnest.

Gruß,
Fabian

17.09.2007 - 11:00 Uhr

Hallo freeman_sb,

was möchtest Du denn genau erreichen? Willst Du nur die angehakten Items wieder zurücksetzen (den Haken entfernen)? Das kann mit Deinem Code nicht funktionieren. Du gehst in der Schleife über alle Items in der CheckedListBox (beispielsweise 5).

Pro Schleifendurchlauf entfernst Du dann ein selektiertes Item. Wenn Du jetzt aber nur 2 selektiert hast, fällt er mit Deiner genannten Exception aufs Gesicht. Außerdem hebst Du nicht den Haken auf, sondern entfernst das Item komplett (ist das so gewollt?).

Nur zum Entfernen der Häkchen reicht es, über die CheckItems-Collection zu gehen und den Checked-Status auf false zu setzen.

Gruß,
Fabian

15.09.2007 - 16:12 Uhr

Hallo herbivore,

danke für den Tipp. Genau das war es!

Gruß,
Fabian

15.09.2007 - 14:57 Uhr

Hallo zusammen,

ich erstelle mir eine Matrix und rotiere diese um 45°. Das Zeichnen nach dem Rotieren klappt auch ohne Probleme, allerdings reagiert der HitTest immer noch auf das alte Rectangle. Eigentlich klar, da ich mir intern das Rectangle merke und darauf prüfe.

Wie kann ich jetzt die Rotation für den HitTest mit einbeziehen?

Gruß,
Fabian

14.09.2007 - 18:48 Uhr

Hallo zusammen,

ich trinke auch keinen Kaffee. Nicht weil ich ihn nicht mag (ich mag eigentlich sogar gerne Kaffee), sondern weil ich ihn in Kombination mit Arbeit und dem aufkommenden Druck/Stress für eine sehr schlechte Kombination halte.

Ich trinke beim Arbeiten ausschließlich Wasser und davon jede Menge. Das hat noch den Vorteil, dass ich öfter aufs Klo muss und somit eine Pause mache 🙂.

Gruß,
Fabian

14.09.2007 - 16:49 Uhr

Hallo quibb,

Du müsstest EventArgs mit in die Methode bekommen. Kannst Du da evtl. den RowIndex abfragen? Der sollte beim Header -1 sein.

Gruß,
Fabian

13.09.2007 - 18:47 Uhr

Hallo jaensen,

viel sinnvoller, als Bugs auf myCSharp zu sammeln, wäre die Seite von Microsoft zu verlinken, auf der man nach gemeldeten Bugs suchen bzw. nicht vorhandene nachmelden kann.

Damit erübrigt sich eine zweite Sammlung (die nie aktueller sein kann) und man kann auch gleich direkt etwas zur Behebung tun.

Gruß,
Fabian

13.09.2007 - 16:58 Uhr

Hallo saio,

guck Dir, sofern Du .NET 2.0 verwendest, das MaskedTextBox-Control an. Das macht genau das, was Du erreichen möchtest.

Gruß,
Fabian

13.09.2007 - 16:56 Uhr

Hallo dschenk,

herzlich Willkommen im Forum!

So ganz verstanden habe ich Dein Problem allerdings noch nicht. Welche Icons meinst Du genau? Kannst Du vielleicht ein Screenshot an den Beitrag anhängen/hochladen, damit man genau sieht, was gemeint ist?

Gruß,
Fabian

13.09.2007 - 16:27 Uhr

Hallo Loewchen0507,

ich glaube das musst Du manuell machen. Ein DataSet.Merge() bringt Dich ja nicht weiter, da Du nicht einfach sämtliche Daten von beiden DataSets in einem haben willst.

Also musst Du wahrscheinlich das Ziel-DataSet durchgehen, Dir die entsprechenden Daten aus dem anderen rausholen und aktualisieren.

Du kannst mit .Select() beispielsweise ein Select ausführen.

Gruß,
Fabian

11.09.2007 - 20:54 Uhr

Hallo vandango,

wenn die Daten untereinander Abhängigkeiten haben, sollte man Primary und Foreign-Keys verwenden und diese Constraints mit einer Delete-Cascade ausstatten. Dann werden Child-Datensätze automatisch gelöscht.

Gruß,
Fabian

10.09.2007 - 10:32 Uhr

Hallo m@crotron,

Original von m@crotron
lass das doch von deinem Programm hineinschreiben. Da hast du hoffentlich den aktuellen Benutzer in einer Variablen oder in einem FK.

gespeichert habe ich den aktuellen Benutzer natürlich in meiner Applikation, aber das Setzen der Information möchte ich eben nicht in dieser machen.
Wenn Daten direkt in der Datenbank gespeichert werden, soll das Feld auch gesetzt werden. Des Weiteren ziehe ich die Logik an einem zentralen Punkt zusammen.

Früher habe ich das mit einem Trigger gelöst. Ich hatte aber die Hoffnung, dass ich mir auch den sparen kann. Für alle Spalten außer dem LastUser wird das wahrscheinlich auch gehen.

Gruß,
Fabian

10.09.2007 - 09:53 Uhr

Hallo zusammen,

ich habe in meinen Tabellen vier Spalten, die zur Versionierung der Datensätze gedacht sind:

  • Creator: Wer hat den Datensatz erstellt
  • Created: Wann wurde der Datensatz erstellt
  • LastUpdate: Wann wurde er zuletzt aktualisiert
  • LastUser: Wer hat zuletzt aktualisiert

Das Setzen der Werte würde ich gerne mittels der Default-Einstellung der Spalten lösen. Für Creator nehme ich beispielsweise user_name(), für Created GetDate() und für LastUpdate einen Timestamp, der automatisch bei Änderungen gesetzt wird.

Jetzt Frage ich mich allerdings, wie ich LastUser implementieren soll. Die Funktion user_name() bringt mich hier ja nicht weiter, da die Spalte bei einer Änderungen aktualisiert werden muss.

Gibt es sowas ähnliches wie den Timestamp-Typ auch für den letzten Benutzer? Bis jetzt habe ich nichts entsprechendes gefunden.

Gruß,
Fabian

07.09.2007 - 09:59 Uhr

Hallo the_lmich,

einen Row- und Column-Span kannst Du nur selber implementieren, indem Du das Zeichnen der Rows selber übernimmst. Auf www.codeproject.com solltest Du dazu Beispiele finden.

Gruß,
Fabian