Laden...

Forenbeiträge von winSharp93 Ingesamt 5.742 Beiträge

09.05.2012 - 15:40 Uhr

Mein erster Gedanke wäre einfach selbst ne neue Form machen, die nur die Wechselmedien anzeigt.

Bzw. eine Combobox reicht auch schon; dann kannst du evtl. sogar Laufwerke ohne Laufwerksbuchstaben erfassen.
Hierarchische Darstellung, wie sie der FBD bietet, brauchst du ja nicht.

09.05.2012 - 13:39 Uhr

Richtig - aber meine Grafiken sind nicht komplex. Es ist beispielsweise ein simples 2D Tetris Spiel.

Soweit ich weiß bieten inzwischen alle aktuellen Grafikschnittstellen (DirectX, OpenGL) auch 2D-Varianten an.

Wichtig ist vor allem der Unterschied des Aufbaus der Anwendung:
WinForms / AWT / Swing sind ereignisorientiert; bei DirectX / OpenGL rendert man in einer Schleife und somit größtenteils unabhängig von der Windows-Nachrichtenverteilung (die eben nicht auf geringe Eingabeverzögerungen - wie sie Spielen benötigen - optimiert sind).

09.05.2012 - 13:24 Uhr

Hallo akunz,

Binding .,

sieht in meinen Augen irgendwie falsch aus.
Probiere mal explizit ein "Path=." einzufügen bzw. testweise mal gar nichts anzugeben (also keinerlei Path).

09.05.2012 - 13:20 Uhr

An sich funktioniert das auch - zur Zeit nutze ich .refresh() dafür -

Auf was rufst du das Refresh auf?

09.05.2012 - 13:19 Uhr

die vorbereiteten Templates sollen immer neu geladen werden.

Designe deine Templates besser so, dass sie statuslos sind bzw. ihren Status vollständig aus den gebundenen Daten beziehen.

Die WPF "recycelt" automatisch Controls, um die Performance zu verbessern.

05.05.2012 - 12:32 Uhr

Hallo RalfSuerig,

Man kann es Java mit repaint() mitteilen, dass man das nun gerne jetzt hätte - ob nun aber erstmal ein paar andere Prozesse vorher kommen, entscheidet es dann aber selbst.

AWT / Swing-Komponenten sind für komplexere Spiele / Echtzeitanwendungen (genau wie WinForms) ungeeignet.

Meine Empfehlung an dich wäre eher, dass du dich z.B. mit OpenGL unter Java beschäftigst.
Das nötige "Umdenken" sollte bereits fordernd genug sein; da musst du nicht auch noch im gleichen Zug die Programmiersprache wechseln. 😉

Tutorials solltest du einige finden; z.B. auf Jogl.info (ein OpenGL Wrapper für Java).
Stelle vorher aber unbedingt sicher, dass du aktuelle Grafikkartentreiber verwendest; sonst ist die OpenGL Performance schnell hinüber

29.04.2012 - 21:52 Uhr

Hallo Llamar,

herzlich willkommen hier auf myCSharp.de!

Wie schreibe ich einen Webcrawler objektorientert, also in welche Klassen soll ich aufteilen? Und wie können diese Objekte die GUI aktualisieren?

Sorry - aber diese Frage ist viel zu allgemein.
Wie in [Hinweis] Wie poste ich richtig? beschrieben helfen wir gerne bei allen Arten von Fragen - so lange ein ordentliches Maß an Eigeninitiative erkennbar ist und nicht der Eindruckt entsteht, dass lediglich versucht wird, Arbeit auf das Forum abzuwälzen.

Und letzteres ist bei dir leider der Fall.
Daher ==> geschlossen.

24.04.2012 - 15:48 Uhr

Hallo chrizstone,

herzlich willkommen hier auf myCSharp.de!

Ich würde es aber gerne haben das der Punkt mit 1,1 nicht nach unten geht sondern nach oben! Kann ich den Ursprung des Panels irgendwie anders setzen?

Wozu?
Passe doch einfach die Berechnung der Koordinaten entsprechend an.

Ansonsten kannst du versuchen, mit Transformationen irgendwie dein Koordinatensystem umzudrehen; wie gesagt sehe ich jedoch den Sinn dahinter nicht.

22.04.2012 - 15:36 Uhr

Siehe WPF: Remove dotted border around focused item in styled listbox.

Statt x:Null musst du dann halt deinen benutzerdefinierten Style übergeben.

22.04.2012 - 15:34 Uhr

Hallo Coffeebean,

in dem Fall würde ich wohl eher mit Visibility oder einem DataTemplateSelector (der dann je nach Wert eines der beiden Bilder liefert), arbeiten.

Werden denn die anderen Setter ausgeführt, d.h. scheiter es wirklich nur am Setzen der Source?

Du meinst DrawingImage und nicht DrawingImageSource, oder?

18.04.2012 - 21:49 Uhr

Hallo stocki,

herzlich willkommen hier auf myCSharp.de!

Mir geht es hier hauptsächlich um die Funktion "Punkte setzen und verschieben".

Siehe hierzu [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) sowie [Tutorial] Gezeichnete Objekte mit der Maus verschieben

Evtl. gibt's solche Komponenten aber auch schon fertig - guck mal, ob das manche Chart-Libraries evtl. schon können.

15.04.2012 - 21:04 Uhr

Nur der Vollständigkeit halber: Die DLR ist nur eine Laufzeitumgebung für Skriptsprachen unter .NET (eine Art Erweiterung der CLR).
Somit ist die Bezeichnung "DLR" für "ein Programm[, das] ein Script ausführen kann" schlichtweg falsch.

15.04.2012 - 20:55 Uhr

Hallo squadwuschel,

ich würde das ganz "primitiv" mit einer Schleife und indexOf lösen; in Richtung von:


function containsAll(toSearch, words) {
   for (var i = 0; i < words.length; i++) {
      if (toSearch.indexOf(words[i]) === -1)
         return false;
   }
   return true;
}
//Aufruf:
if (containsAll("Hallo Welt", [ "Hallo", "Welt", "Test"] ))
  //...

15.04.2012 - 20:48 Uhr

Hallo kokokeko,

eine Möglichkeit, die wirklich bei allen Anwendungen funktioniert, ist mir allerdings nicht bekannt.
Du musst wohl mehre Ansätze kombinieren.

BTW: Ein (wie ich finde) tolles Feature hatte Windows mal während der Betaphase: Accelerators for Windows 7: Missing in Action - evtl. hatten die ja auch Probleme, das mit allen Anwendungen zum Laufen zu bringen.

15.04.2012 - 20:44 Uhr

Hallo Marcel#,

erhöhe testweise mal den Zeitraum des ersten Sleeps und stelle sicher, dass der Fokus auch wirklich im richtigen Fenster liegt.

09.04.2012 - 13:48 Uhr

Mein Problem ist, dass nun beim Wechseln der Tabs immer wieder der InitializeComponent der View aufgerufen wird, was dazu führt, dass mein Control immer wieder neu geladen wird.

Eigentlich sollte das aber nicht stören - der gesamte Zustand des Controls sollte ja im ViewModel hinterlegt sein.

09.04.2012 - 13:47 Uhr

Hallo skelle,

Was ich allerdings möchte, ist dass der Text umgebrochen und nicht abgeschnitten wird.

das lässt sich ganz einfach mit der TextWrapping Property bewerkstelligen.
Alternativ kannst du auch mit TextTrimming arbeiten, sodass beim Abschneiden drei Punkte angezeigt werden.

Am besten sollte die Sache auch bei resizen konsistent bleiben.

Das passiert - bei Verwendung eines geeigneten Layoutcontainers - ganz von alleine.

04.04.2012 - 20:56 Uhr

Hallo Joetempes,

kannst du evtl. eine eigene Ableitung der ComposablePartCatalog-Klasse erzeugen, die das übernimmt?
Alternativ kannst du deinen Katalog auch aus einem AggregateCatalog selber bauen.

Letztlich wirst du die Infos über die zu ladenden XML-Dateien aber irgendwo speichern müssen; die Metadaten der Assemblies scheiden da ja leider aus (da man die nicht wirklich vernünftig lesen kann, ohne die Assembly zu laden).

04.04.2012 - 20:43 Uhr

Da ich aber nicht weiß wo auf welcher seite er kollidiert (oben unten rechts links)

Mit Wänden auf horizontaler Achse (je nach horizontaler Geschwindigkeit "links" oder "rechts") und mit dem Boden auf vertikaler Achse (je nach vertikaler Geschwindigkeit "oben" oder "unten").

Oder wo liegt dein Problem?

04.04.2012 - 20:37 Uhr

Jetzt frage ich mich allerdings, ob es nicht ausreichend ist, die Klasse einmal bei Variablendeklaration zu instantiieren und vor Event -Aufruf einfach nur die Werte zu initialisieren?!

Und was, wenn ein Abonnement sich die EventArgs eines Aufrufs merkt und das Event ein zweites Mal gefeuert wird (oder das Event nochmals gefeuert wird, während es weiter oben im Stack noch behandelt wird)?
Dann ändern sich die Werte auch in diesem gemerkten Objekt (d.h. du hast Nebeneffekte in anderen Programmteilen), was zu sehr "interessanten" Bugs führen kann.

Daher: Lass' besser die Finger von derartigen "Optimierungen".
EventArgs sollten (bis auf ein paar Ausnahmen) wenn es geht immutable, d.h. unveränderlich nach ihrer Erzeugung sein.

BTW: Bei EventArgs.Empty sieht das ganze anders aus: Dort sind in einer Instanz ja keine spezifischen Werte gespeichert; ein "Recycling" kann also keinerlei Nebeneffekte haben.

Angenommen ich würde es so lassen. Handelt es sich um ein Speicherleck, oder räumt der GarbageCollector in diesem Fall auf?

Ja, macht er - dafür ist er ja auch da 😉

Wenn du es genauer wissen willst: Durch die Generationen, welche die Implementierung des GCs verwendet, werden kurzlebige Objekte recht performant entsorgt; um EventArgs-Instanzen aufräumen zu können, ist also im Normalfall keine vollständige Garbagecollection nötig.

01.04.2012 - 20:49 Uhr

Hallo InfoStudent86,

einem Control zwei ViewModels zuzuordnen, ist sehr unüblich.

Packe das erste ViewModel besser in eine Property des ViewModels, das du sowieso schon an das Control weitergibst.

01.04.2012 - 10:51 Uhr

Hallo amorph,

sind es wirklich "Fehler" oder eher "Warnungen"?

Bei "echten" Fehlern schließe ich mich herbivore und talla an; sonst (wenn du z.B. rekursiv ein Dateisystem durchsuchst und dabei auf auf ein zugriffsgeschütztes Verzeichnis stößt, etc.) ist evtl. auch ein Event (oder ein der Methode übergebener Callback) eine gangbare Alternative.
Wichtig ist dann allerdings, dass der Aufrufer die Warnungen einfach ignorieren kann.

01.04.2012 - 10:46 Uhr

Problem habe ich, wenn XML automatisch generiert wird und damit viele Knoten verschoben werden bzw. anders sortiert. So zeigen alle diff Applikationen, dass sich vieles geändert hat, obwohl letztendlich ein Eintrag hinzugekommen ist.

Beyond Compare behilft sich damit, erstmal alle Elementknoten und Attribute alphabetisch zu sortieren und dann zu diffen; das klappt schonmal in vielen Fällen.

31.03.2012 - 13:19 Uhr

Nun gut....deswegen habe ich mich jetzt einfach mal nach einer Alternative umgeschaut, mit der man vielleicht ein neues Projekt angehen kann, welches keine Plugin-Installation benöigt.

Da würde ich an deiner Stelle auf HTML(5), SVG, Javascript, etc. setzen.
Mithilfe von Javascript-Libraries (jQuery, Knockout, ...) kannst du relativ schnell auch komplexere Projekte umsetzen und bist unabhängig von einem gewissen Hersteller.

Als Backend kannst du dann eine ASP.NET Single Page Application nutzen.

Dieses Visual WebGui scheint ja irgendsoeine Art Konvertertool zu sein, das selbstständig HTML-Code etc. generiert. Ansonsten bietet es eigentlich nur eine Sammlung kostenpflichtiger jQuery Bibliotheken, die vermutlich auch nicht mehr können als die kostenlosen Pendants.

Das führt dann dazu, dass man beim Erstellen eines Projektes komplett von diesem WebGui abhängig ist.
Besser halte ich es daher, in dieser Situation auf solche proprietären Dinge zu verzichten und es stattdessen direkt selber (unter Verwendung der OS-Projekte) zu schreiben; für mehr Aufwand halte ich das auch nicht.

26.03.2012 - 19:47 Uhr

und auf so etwas ähnliches will ich eben auch aus.

Dann verwende entweder das als Grundlage oder Databinding in Kombination mit Templates.

26.03.2012 - 19:24 Uhr

Ich will eine Klasse die von Canvas ableitet. Das ist ja alles noch kein Problem.

Vermutlich schon 😉
Verwende besser ein Template - von Layoutcontainern abzuleiten ist äußerst selten eine gute Idee.

26.03.2012 - 19:22 Uhr

Hallo ganzegal111,

herzlich willkommen hier auf myCSharp.de!

Verwendest du BeginDrag zum Verschieben des Controls?
Ansonsten sind die Manipulation-Events evtl. besser für dein Problem geeignet; siehe z.B. Introduction to WPF 4 Multitouch (weiter unten).

16.03.2012 - 13:34 Uhr

Das Problem habe ich auch als - der Workaround ist zwar nervig, aber so oft tritt es ja auch wieder nicht auf...

16.03.2012 - 12:56 Uhr

Ja - aber kannst du (evtl. durch ein paar mehr Messungen oder besser durch einen Profiler) herausfinden, was genau innerhalb von InitializeComponent so lange braucht (z.B. Setzen einer DataSource, Zugriff auf Resourcen, ...)

16.03.2012 - 12:37 Uhr

das InitializeComponent() im DEBUG Modus 1,9 Sekunden benötigt und im RELEASE Modus 3,9

Kannst du das Problem noch weiter eingrenzen?
Zum Beispiel auf eine gewisse Methode, Codezeile etc.?

15.03.2012 - 15:50 Uhr

der Druck, immer die aktuellste Browser-Version zu verwenden, ist allerdings - vor allem aus Sicherheitsgründen - sowieso relativ hoch

😁 - IMHO fällt das leider nur in den Bereich der Theorie...
IE6 ist leider noch allzuoft Standard...

15.03.2012 - 14:18 Uhr

Richtig Buffern oder Richtig im Hintergrund zeichnen ?

Beides.

Aber wie gesagt: Mein Rat ist, es gleich richtig zu machen, da sich so viele Probleme erst gar nicht stellen.

15.03.2012 - 13:28 Uhr

Zum Skallieren etc / man merkt schon das Windows Forms nicht dafür gemacht ist, trotz Zeichnen in einem Buffer fängt das ganze relativ schnell zu flimmern an wenn man viele OnPaint aufrufe hat.

Wenn man es richtig macht, tritt dieser Fall allerdings erst recht spät ein.

sobald sich ein wert ändert muss ich den Bereich des Hintergrunds über den ich Zeichne erstmal neu zeichnen(damit die "veralteten" linien Verschwinden) und dann muss ich wieder meinen gesamten Drehgeber neu Zeichnen ?

Nein, es reicht in diesem Fall, nur die geänderten Bereiche neu zu zeichnen.
Zudem kann der DoubleBuffer dann auf die gesamte Zeichnung angewandt werden.

15.03.2012 - 13:19 Uhr

Hallo FranzBeckenbauer,

Siehe hier.
Verwende z.B. Xml-Serialisierung oder LINQ To Xml.

Wie in [Hinweis] Wie poste ich richtig? beschrieben, erwarten wir Eigeninitiative vor dem Stellen von Fragen.
Daher: ==> geschlossen

15.03.2012 - 12:44 Uhr

Zum Thema Dropbox muss man bedenken, dass dort die Daten auf einem US-amerikanischen Server mit all den sich daraus ergebenen Rechtsfolgen liegen (z.B. möglicher Zugriff durch Regierungsbehörden, etc.) - ob das bei den Berichtsvorlagen ein Problem darstellt, sollte folglich eure Rechtsabteilung unbedingt prüfen.

Wie wäre es, wenn ihr den "Spieß quasi umdreht" und selbst (z.B. auf einer Webseite, per Webservice etc.) die Dateien auf euren Servern (kundenspezifisch) bereitstellt und die Installation beim Kunden die Dateien dann regelmäßig updatet?
Das Vorgehen, Änderungen direkt auf Kundenservern vorzunehmen, ist IMHO etwas ungewöhnlich.

15.03.2012 - 11:00 Uhr

Hallo trib,

ich schätze mal, dass das Problem bei "this.Close();" liegt.

BTW: Verwende besser den ThreadPool oder die TPL, statt Threads manuell zu erzeugen.

15.03.2012 - 10:48 Uhr

Hallo ARO,

ich würde es mal mit Graphics.ResetTransform probieren.

15.03.2012 - 10:46 Uhr

Den Parameter kann man z.B. als state an den Konstruktor public Task(Action<Object> action, Object state) übergeben.

Oder sogar typsicher als Closure.

15.03.2012 - 10:45 Uhr

Wenn ich noch verstehen darf warum, mach ich es gerne anderes.

Das Vorgehen passt einfach nicht zu dem, was Windows vorsieht:
Controls zeichnen sich (vereinfacht gesagt), wenn sie WM_PAINT erhalten. Dabei sorgt das Betriebssystem dafür, dass diese Nachricht automatisch gesendet wird, wenn z.B. verdeckte Bereiche des Fensters wieder sichtbar werden etc.
Dabei erfolgt das Zeichnen unmittelbar aufgrund der erhaltenen Nachricht und der Bereich, der tatsächlich neugezeichnet wird, wird auf eben diesen nun sichtbaren Bereich beschränkt.

Selbst auslösen kann man das Zeichnen (letztlich durch den Aufruf von Invalidate) beispielsweise, wenn sich der Inhalt komplett geändert hat.
Dann wird aber der gesamte Bereich des Controls neu gezeichnet.

Probiere mal testweise, den Interval des Timers ein wenig hochzsetzen (um die Effekte besser erkennen zu können), und platziere dein Control z.B. in einem scrollbaren Bereich und scrolle etwas herum.
Oder verschiebe das Fenster aus dem sichtbaren Bereich des Bildschirms heraus und wieder herein und beobachte, was passiert.

Ich bin sicher, die Transparenz sieht nicht so einwandfrei aus, wie sie aussehen könnte, wenn du es "richtig" machen würdest.

Kurzum: Es ist einfach unsauber, das gesamte Control jede halbe Sekunde komplett neu zu zeichnen, obwohl das eigentlich überhaupt nicht nötig ist.

15.03.2012 - 08:45 Uhr

Benutze doch Defaultwerte in den parametern

Oder Konstruktorüberladung:


public Class(int property1, string property2)
{
  //...
}
public Class()
   : this(12, "FooBar")
{
}

BTW: Die Verwendung der Default-Parameter würde ich auf null als Default-Wert begrenzen, also bezogen auf den Code von pdelvo:


public Class(int? property1 = null, string property2 = null, ..., string propertyN = null)
{
   Property1 = property1 ?? 12;
   Property2 = property2 ?? "";
   Property3 = propertyN ?? DefaultValue;
}

Hat dann auch den Vorteil, dass man explizit null übergeben kann, wenn man den Standardwert meint und die Defaultwerte nicht mehr bei Aufrufer fest einkompiliert werden.

15.03.2012 - 08:40 Uhr

Hallo rejoice,

verwende besser DataBinding und das Problem löst sich von selbst.

eine Idee wäre, Deine Spalten IDs und die Bezeichnungen zunächst in eine List<string> zu lesen, z.B. der Gestalt "45: bezeichnung", und dann damit die comboBox zu füllen

Wozu?

15.03.2012 - 08:36 Uhr

undzwar habe genau das selbe gemacht wie in diesem guide

Damit hast du wohl so ziemlich eines der schlechtesten Tutorials in diesem Gebiet erwischt...

Siehe besser den genannten [FAQ] Warum blockiert mein GUI?

14.03.2012 - 20:41 Uhr

dass sich jeder task dort mittels kernel[Task.CurrentID] nur an seinem eigenen kernel bedient.

Wobei du da evtl. mit einem DI-Container und einem Per-Thread-Lifecycle oder alternativ einem ThreadStatic-Field besser fährst.

14.03.2012 - 19:52 Uhr

Hallo TM_87,

verwende den Threadpool oder besser die TPL (u.a. System.Threading.Tasks.TaskFactory.StartNew und Parallel.ForEach) anstatt Threads manuell zu erzeugen.

Dann kannst du besipielsweise schreiben:


var classes = enumerable.Select(a => new ClassA { Property1 = a, Property2 = /*...*/ });
Parallel.ForEach(classes, a => a.threading());

14.03.2012 - 18:45 Uhr

Ein Interface bringt mir leider nichts, da es sich um eine reine Datenklasse handelt, die außer Konstruktor, getter und setter keine weiteren Methoden enthält.

Da sehe ich kein Problem.

Wenn du zwei unterschiedliche Klassen (z.B. in einem Algorithmus) gleich behandeln können willst, hilft der besagte Adapter. Dieser kann die Semantik dann auch gleich vereinheitlichen.

14.03.2012 - 18:43 Uhr

vorschlag?

Kommt darauf, was du letztlich bezwecken willst.

Verwende z.B. TaskFactory.ContinueWhenAll, Task.ContinueWith, ein Dictionary<Task, CustomData>, ...

Welche Informationen sollte dein Array ursprünglich aufnehmen?