verwendetes Datenbanksystem: MS SQL Server 2008 R2
Guten Morgen liebe myCSharp Community.
Ich habe aktuell ein Problem mit einer, aus meiner Sicht, sehr simpen Code-Stelle, welche eigentlich nur Relations aus einem DataSet entfernen soll.
Hierfür nutze ich die Remove(DataRelation) Methode des DataSets. Leider hängt sich das Programm hierbei teilweise einfach auf (bzw. es braucht extrem lange, bis eine Relation entfernt wird). [Anm.: Mit "lange" meine ich hier ca. 11 Minuten für eine Relation]
Feststellen konnte ich bisher folgendes:
Das gleiche Phänoment hats auch bei DataSet.Relations.RemoveAt(int) (mit vorhergehendem IndexOf(DataRelation), wobei dieser selbst recht schnell durch läuft) und auch bei DataSet.Relations.Clear().
Folgend der Code:
int x = -1;
foreach(DataRelation drel in dsRelationsToRemove)
{
x = ds.Relations.IndexOf(drel);
if(x >= 0)
{
ds.Relations.RemoveAt(x);
}
//ds.Relations.Remove(drel)
}
Ich hoffe, jemand hier hat eine Idee, woher diese lange Laufzeit kommen könnte?!
//EDIT
Nach einer sehr intensiven Debug-Session wurde der Übeltäter gefunden:
Das DataSet ist als DataSource über eine BindingSource an ein UltraGrid (UltraWinGrid) (Infragistics) gebunden... beim Entfernen vom Relationen werden einige Events des Grids gefeuert, welche in einer anderen Komponente abgehandelt werden. Hier scheint es letztens zu einer Änderung gekommen zu sein, welche dieses Problem hervorruft.
Vielen Dank an alle, die sich bis jetzt schon Gedanken zu dem Thema gemacht haben.
Asche auf mein Haupt, das hätte ich rausfinden sollen ohne hier nachzufragen 😦
so far
Karill Endusa
Wahnsinn aber wahr:
Es scheint mit der ausgewählten Farbe zu tun zu haben...
Nehme ich Control als BackColor und TransparencyKey geht es, nehme ich LightPink für beides geht es nicht...
Ich werde hier noch ein wenig herumprobieren, aber logisch ist das für mich nicht mehr.
Danke für die bisher geleistete Hilfe... dann muss ich mal gucken, ob ich eine Farbe finde, mit der das geht, was ich vorhabe, welche ich sonst in der Form nicht brauche 😕
Hallo dN!3L,
danke für deine Anregungen, aber ein entsprechendes Testprojekt habe ich schon angelegt ... das Problem bleibt bestehen.
Ich habe in dem Testprojekt nur BackColor, TransparencyKey und TopMost gesetzt.
Es könnte natürlich jetzt an der Kombination mit TopMost liegen, da durch die Metro-Oberfläche, soweit ich gehört hab, eine (unsichtbare) Schicht dazu gekommen sein soll.
Guten Morgen liebe MyC# Community,
Ich habe hier eine Windows Forms Anwendung, welche mir auf dem Bildschirm verschiedene Informationen anzeigt.
Damit ich diese Informationen (fast) immer im Blick habe, ist das Fenster dafür TopMost = true.
Damit es mich möglichst wenig stört, habe ich über den Trick TransparencyKey = BackColor den Hintergrund entfernt (Form ist eh BorderStyle.None).
Bis vor einiger Zeit hatte ich noch Windows 7, mitlerweile nutze ich aber auch Windows 8.
Seit dieser Umstellung habe ich nun das nervige Problem, dass ich nicht mehr durch den durchsichtigen Hintergrund hindurch klicken kann, was insofern schlecht ist, wenn sich dort hinter Objekte befinden (z.B. Desktop Icons), an welche ich beizeiten heran muss... aktuell behelfe ich mir hier mit TAB + Enter, aber das kann ja schlecht die Lösung sein 😃
Ich hatte es schon mit SetWindowLong und WS_EX_LAYERED | WS_EX_TRANSPARENT probiert, aber dann verschwinden die in der Form enthaltenen Controls ja leider auch 😕
Meine Frage nun:
Gibt es auch unter Windows 8 eine Möglichkeit, dieses Verhalten zu erreichen? (Transparenter Hintergrund + hindurch klicken) (Und wenn ja, wie geht das?)
Ich muss hier FZelle zustimmen... was C# angeht, habe ich bisher nur schlechte Erfahrungen mit Galileo Computing gemacht.
Nicht nur, dass hier zu gern Anfängerfehler (mit voller Absicht) gemacht werden... einige Male bin ich dort auch schon auf Quelltext gestoßen, bei dem mir schon direkt beim Ansehen klar war, dass entweder der Compiler meckert oder eine Exception geworfen wird (je nach Beispiel halt).
Interessanterweise begeistern sich gerade Anfänger sehr stark für eben diese Bücher von Galileo Computing...
Womit ich jedoch gute Erfahrungen gemacht habe, sind die O'Reilly Bücher der "Heads First" / "Von Kopf bis Fuß" - Reihe.
Sowohl das OOP als auch das C# Buch haben mich von der Aufmachung her sehr begeistert... dass dann bei C# als 3. Projekt ein Spiel entwickelt werden soll auf Basis von Windows Forms Controls (Picturebox etc.) ist leider ein Manko 😕
so far
Derpy Hooves
Das ist nur ein Hinweis...
man kann (und darf) in der .Designer.cs schon Änderungen vornehmen, sollte sich aber darüber im Klaren sein, welches Ergebnis eine Aktion hat... mitunter meckert sonst der Designer rum, dass er die Form nicht mehr darstellen kann 😉 (oder sie funktioniert gar nicht mehr... je nach gemachtem Fehler)
In diesem Fall sollte das aber keinen unterschied machen, du änderst ja nur den "Parent Container" (wenn man so will ^^)
P.S.:
Der Designer soll den Anwender nur bei der Entwicklung unterstützen.
Man muss ihn nicht zwingend nutzen.
Du solltest dir ganz dringend noch einmal ansehen, was ein Referenztyp ist 😉
Solange du nicht explizit eine Kopie anlegst, wirst du immer* das Original verändern.
*Mit vorsicht zu genießen, denn teilweise kann es anders sein (siehe string, und den ersten von MrSparkle geposteten Link)
Du müsstest in deiner Form 2 eine Membervariable bereit halten, in welcher du dein Custom Objekt speicherst.
Auf diese kannst du dann aus dem normalen Click-EventHandler wieder zugreifen und so Änderungen an deinem Objekt vornehmen.
Da dein Objekt, wenn kein Struct sondern eine Class, automatisch ein Referenztyp ist, kannst du auf das ref-Schlüsselwort übrigens verzichten 😉
Zusätzlich: MrSparke hat noch ein paar sehr gute Links zu dem Thema dagelassen 😃
Beachte bitte:
Das gehört zu Grundlagen und wird somit von [Hinweis] Wie poste ich richtig? Punkt 1.1.1 (und 1.1) abgedeckt.
Antworten und Lösungen oder sogar fertiges Quizgame wäre hilfreich.
Bitte keine unverschämten und freche Antworten von euch.
Hallo free7umper,
zusätzlich zum Hinweis von ujr, welchem ich voll und ganz zustimme, nochmal ein Hinweis:
Ich persönlich, aber sicher nicht nur ich, empfinde es als eine Unverschämtheit (da du selbst darum bittest, dass es nicht zu unverschämten Antworten kommt), wie du hier dein Anliegen darbringst.
Zuerst einmal ist myC# kein Code-Generator, also um ein "fertiges Quizgame" zu bitten ist hier fehl am Platz.
Eigentlich helfen wir recht gerne bei Problemlösungen... aber selbst lösen wir deine Probleme eher ungern für dich, wenn du kein Eigenengagement zeigst. Schon gar nicht, wenn hier das gesamte Projekt (? ich nehme an es ist das Projekt, ich werde sicher bei Mega nichts runterladen) uns einfach so vor die Füße geworfen wird mit den (implizierten) Worten: "hier Projekt, hat Fehler, macht mal!"
Ich hoffe auf dein Verständnis und bedanke mich im Voraus schon einmal dafür.
so far
Karill Endusa
Kleine Anmerkung, da ich öfter selbst mit diesem oder ähnlichen "Problemen" zu tun habe:
Ist der Button selbst auf der gesamten Webseite nicht eindeutig, so ist er es meist innerhalb seines Blocks (also Form, Div oder Ähnlichem) ... wenn diese eindeutig identifizierbar ist, findet man dann auch den Button...
Der Gedankengang dahinter:
Man arbeitet ähnlich einem XPath und sucht sozusagen den ersten eindeutigen nicht variablen Pfad zum Button selbst 😃