Warum verwendest du dann überhaupt ein GUI-Control (DataGridView), wenn du die Daten nur intern bearbeitest?
Ansonsten müßtest du mal einen Memory-Profiler verwenden, um herauszufinden, warum der GC die Altdaten nicht löscht (evtl. sind noch Referenzen darauf irgendwo gehalten).
Hallo!
Also ich habe einen Feldversuch gestartet und kam zu folgenden Ergebnis:
WPF (XAML) ist vorzuziehen, MS hat die Weiterentwicklung von WinForms zu Gunsten XAML bereits eingestellt.
Also ich habe einen komplizierten Layout-Container aus Grid, Dock-Panel, Stack-Panel, Panel-Splitter, Grid-Splitter und einem Frame im Hauptfenster mit XAML erstellt und quer über das Fenster mal eine Canvas mit einer Linie gezogen. Grafisch scheint hier Keiner Keinen zu stören. Auch der VS 2012-Generator für Xaml stört sich nicht an Formentwicklungen.
WindowsFormsHost-Klasse implementiert und im Grid einfach ein Formelelement zu setzen funzt easy. Auch ein triviales using mit der Form-Klasse im Code stört WPF nicht.
Edit: Mit Ausnahme sich gelegentlich überlagenden Namensräumen.
Mein altes Form-Layout habe ich mit einer trivialen Page in einem Frame gesetzt und funzt ebenfalls prima. Ja, der Datenaustausch muss neu gecodet werden, weil der Sichtbarkeitbereich durch das Frame beschnitten wird.
XAML ist viel prozessdualer als Form-Code (OO). Deshalb muss man mehr die Reihenfolge beachten. Auch kann man die Container-Layout Elemente nicht wahlfrei ineinander stecken. Muss man ein wenig fummeln.
Apropros Fummeln - Ein banales Problem bekomme ich im Moment nicht gelöst:
Ich habe in einer Zelle eines Grids das Frame eingebedded. Aber wenn ich die Zelle mit der Mouse verkleinere, überlagert es immer den Frame. Eine Koppelung mit dem Grid<->Frame<->Page gelingt mir irgendwie nicht.
Hat einer Ideen dazu?
Edit: Hat sich erledigt. Aus unerklärlichen Gründen wird bei einer RichTextbox Width="auto" nicht ausgeführt, Height="auto" aber schon - It's not a bug, it's a feature.
http://connect.microsoft.com/VisualStudio/feedback/details/354442/wpf-richtextbox-wrapping-fails-in-listboxA - Loser. :p
Saxo schrieb:
Jo, gute Frage. Ich meine keine Hobby-Anwendungen (weil damit sein Geld verdienen können ist wichtig) und hoher Logik-Anteil...
Also eher keine Geschäftsanwendungen (ja, auch da kann es einen hohen Logikanteil geben, aber nach meiner Erfahrung ist dieser verhältnismäßig gering* und nicht selten ist tatsächlich der Datenbankanteil hoch).
* heißt aber nicht, das Geschäftsanwendung wirklich nur dummes einlesen und zurückschreiben bedeuten, sondern nur das aus meiner Sicht andere Bereiche häufiger einen höheren Logikanteil haben.
Saxo schrieb:
..., also nicht einfach Daten einlesen, Benutzer verändert diese, und wieder in die DB abspeichern...
Ich glaube gerade in den Bereichen die viel Logik enthalten (Wissenschaftliche Anwendungen, Spiele usw.) sind andere Sprachen mit größeren Anteil verbreitet.
Saxo schrieb:
...Kann es sein, dass C# eher für lokale Anwendungen aka Fat Clients verwendet wird und weniger für Web-Server (weil hier Tomcat & Co. regieren)?...
Ich würde sagen das C# (zumindest nach meiner Erfahrung) sehr stark im Bereich Geschäftsanwendungen vertreten ist. Dies heißt aber nicht Zwangsweise Fat Client, ASP.NET ist durchaus auch vorhanden und wird genutzt. Sofern man mehrere Welten bedienen will, wird der "Fat Client" schnell etwas schlanker, und die Logik mehr zum Server hin verlagert...
Hmpf. Doof.
Vielleicht geht's mit DeviceInformation.FindAllAsync
----
Brauchst du denn eine App Store kompatible Lösung?
Die WMI Sache sollte sonst nämlich zuverlässig funktionieren.
Die sieben Karten sollten vor der Betrachtung in ein Array rein kopiert und sortiert werden.
Ich nehme hustbaers Ansatz.
for(Rank r=R2;Rank<=Ace;++r){
int anzahlGleiche=0;
for(int i=0;i<7;++i)
if(karte[i].Rank==r)
++anzahlGleiche;
if(anzahlGleiche==2)
MessageBox.Show("Pärchen von"+r);
else if(anzahlGleiche==3)
MessageBox.Show("Drilling von"+r);
else if(anzahlGleiche==4)
MessageBox.Show("Vierling von"+r);
}
for(Suit s=Hearts;s<=Spades;++s){
int anzahlGleiche=0;
for(int i=0;i<7;++i)
if(karte[i].Suit==s)
++anzahlGleiche;
if(anzahlGleiche>=5)
MessageBox.Show("Flush in "+s);
}
for(Suit s=Hearts;s<=Spades;++s){
int straßenlaenge=0;
for(int i=6;i>=1;++i)
if(karte[i-1].Rank==karte[i].Rank){
++straßenlaenge;
if(straßenlaenge==5)
MessageBox.Show("Straße in endend mit "+karte[i+4]);
}
}
Aber das ist ja erst der Anfang. Dann mußte noch die Kombinationen wie Zwillung UND Drilling packen, fürchte ich.
Hi hustbaer
Danke für die schnelle Antwort das war die Lösung
Ich musste VS2012 erst aktualisieren danach war dann das XP Toolchain verfügbar.
Ist ja verrückt auf was man mittlerweile alles achten muss
Du hast aber schon verstanden was µ geschrieben hat, oder?
Du musst deine beiden DateTimePicker mit DateTime.Now.Date initialisieren, und nicht mit DateTime.Now .
Hi x-men,
nunja, dass ist eigentlich total einfach
Aber ich weiß nun nicht wo Du Kenntnismäßig bei WPF stehst.
Hast Du schon mal eigene Control-Templates definiert?
Das Basis-Template für die Checkbox findest Du hier:
http://msdn.microsoft.com/de-de/library/vstudio/ms752319.aspx
Auf Basis dieses Templates kannst Du problemlos aufbauen.
Verweise in Deiner app.xaml mittels ResourceDictionary auf ein eigenes Template. Dieses setzt Du mittels Style TargetType auf {x:Type CheckBox} und dann schaut jede Checkbox in Deiner Application gemäß Deiner Vorgaben aus. Wenn nur manche Checkboxen Deinen speziellen Look erhalten sollen setze zudem die x:Key Property, dann kannst Du jeder Checkbox diesen Style zuweisen, wenn Du willst.
Und um den Haken gegen einen Border konkret zu tauschen: Schmeiß den Glyph-Krempel raus und zeichne einfach einen Border mit Deiner gewünschten Farbe
Falls Du da Detailfragen hast, gib laut, ich helfe Dir da gerne
Viele Grüße
Mnenomic
Das ist ja im Ascii-Bereich nichts anderes als ein direkter Cast nach byte . Wobei auch nicht klar ist was der OP wollte aber wtf cares ... er meldet sich sowieso nicht mehr
Wird die Bitmap jetzt doppelt so groß, oder wird der "restliche Teil"
// weiß aufgefüllt? 2 * rect.Width, 2 * rect.Height,
Der Screenabschnitt der kopiert wird ist jetzt 200x200. Das zu probieren war ne Sache von 30 Sekunden..
Das sollte es klarer machen:
Bitmap bmp = new Bitmap(2 * 100, 2 * 100, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(0, 0, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
Geht es etwas performanter?
Zum Beispiel indem du wie hier DirectX verwendest.
Aber zuerst würde ich probieren ob die unperformantere Lösung nicht reicht.
Robert1996 schrieb:
Ich will ganz ehrlich sein, ich verstehe den Code nicht.
Woran liegts? Es ist imho die sauberste Variante also würde ich vorschlagen, gehen wir den Code mal durch wenn Du Verständnisprobleme hast.
Robert1996 schrieb:
Aber das mit den Threads nochmal aufgreifend; Ich brauche doch bestimmt 2 Threads, einem lasse ich den BubbleSort ausführen, und während ich den BubbleSort ausführe, lasse ich parallel dazu permanent das Array zeichen..oder geht das dann nicht, wenn beide auf das selbe Array zugreifen?
Zwei Threads ja. Aber einer ist der GUI-Thread, den Du nicht extra erstellen musst. Der andere ist nur für das Sortieren und warten zuständig. Allgemein: Gleichzeitig auf ein Objekt Zugreifen ist Heikel und muss synchronisiert werden.
Ganz ruhig.
Nein, zu spät ich flippe gerade voll aus. *Tilt*
Dann ändere halt das Template.
Der versteht mich.
Links:
Das sieht doch gut aus jetzt muss es nur noch funktionieren.
Dank dir.
Hallo.
Danke für deine Antwort.
Habe das nun mit einem Attribut über der Klasse gelöst:
[DataContract(IsReference = true)]
Löst auf jeden Fall die Exception. Was das für nebenwirkungen hat kann ich momentan nicht sagen,
Hallo µ,
danke für deine Antwort, habs jetzt auch selber gefunden. Hatte
einfach ein bisschen zu großes Array, d.h. es gab Elemente die
NULL waren daher hat er diese mitgezeichnet. Jetzt hab ich einfach mit
einer Schleife diese aus meinem Array in ein neues kopiert und schon
funzt es.
Vielen Danke
Danke,
das ist genau was ich suche.
Th69 schrieb:
Beispiele/Tutorials mußt du dir selber suchen...
Mit dem richtigen Suchbegriff kein Problem ...
Dann findet man es sogar auf Codeproject Tutorial Part 1 und Tutorial Part 2.
Damit habe ich einen neuen Spielplatz .
Anbdreas