Laden...
Avatar #avatar-2316.jpg
JuyJuka myCSharp.de - Experte
Fachinformatiker: Anwendungsentwicklung Deutschland Dabei seit 30.11.2005 2.187 Beiträge
Benutzerbeschreibung
Ich liebe OO und vor allem OOD. Mit Klassen, Interfaces, Assoziaitonen, Vererbung, Kapselung, Patterns und und und verbring ich meine Arbeits- und meine Freizeit. *stahl*

Forenbeiträge von JuyJuka Ingesamt 2.187 Beiträge

08.02.2013 - 00:52 Uhr

Hallo,

vor einiger Zeit hatte ich ein ähnliches Problem und folgende Beiträge haben mir geholfen:
Mdi Child Forms functionality does NOT work correctly in Windows Forms
MDI child form does not activate when clicked in client area

Gruß
Juy Juka

08.02.2013 - 00:05 Uhr

Hallo sindibad,

für den Datenbankzugriff verwende ich immer einen Objekt-Relationalen Mapper. Dies ist nicht der einzige Weg aber ich finde es empfehlenswert da es so viel einfacher ist objektorientierte Technicken (Patterns, usw.) anzuwenden und deren Vorteile zu nutzen.

NHibernate und EntetyFramework sind bekannte ORMs, es gibt aber auch viele weitere (und auch viele die sich nur so nennen).
Ich empfehle dier einen bestehenden ORM zu wählen und sich mit einem Tutorial einzuarbeiten.

Gruß
Juy Juka

19.09.2012 - 11:26 Uhr

Hallo kruprecht,

mit der Foren-Suche findest du jede menge Treffer zu Namenskonventionen.
Und hier Richtlinen für Namen von Microsoft.

Gruß
Juy Juka

03.09.2012 - 01:00 Uhr

Hallo @All,

hab diesen Thread total vergessen. Das Problem hat ein Kollege von mir gelöst.
Damit Spalten angezeigt werden müssen sie beim C1TrueDBGrid nicht nur dem Grid sondern auch den Splits (sieh Property Splits) hinzugefügt werden.

Gruß
Juy Juka

27.08.2012 - 12:00 Uhr

Hallo SaschK,

System.Type.GetType(string) sollte dir bei diesem Problem helfen können.

Gruß
Juy Juka

26.08.2012 - 14:31 Uhr

Hallo Sareth,

genau kann ich es nicht sagen, aber ich denke du hast InitialCatalog und DataSource nicht korrekt gefüllt.

Wenn der SQL-Server die Standard-Installtion ist muss es wie folgt sein:


conBuilder.DataSource = "IP";
conBuilder.InitialCatalog = "Datenbank-Name";
conBuilder.UserID = "Hostname\\Username";
conBuilder.Password = "Passwort";

Wenn er nicht die Standard-Installation ist, bekommt der SQL-Server einen eigenen Namen (der Instanz-Name) und muss wie folgt angegeben werden.


conBuilder.DataSource = "IP\Instanz-Name";
conBuilder.InitialCatalog = "Datenbank-Name";
conBuilder.UserID = "Hostname\\Username";
conBuilder.Password = "Passwort";

Gruß
Juy Juka

25.08.2012 - 10:21 Uhr

Hallo florian0,

100%ig kenne ich mich nicht mit AppDomains aus, aber du müsstest 2 Probleme haben:

  1. So bald du Unwrapp auf das Objekt aus der anderen AppDomain anwendest wird dieses Objekt in die aktuellen AppDomain geladen. Das bedeutet, dass dein ganzer Schöner plan mit entladen und so weiter hinfällig wird, da die Assembly des PlugIns dann in der "Haupt"-AppDomain ebenfalls geladen ist!

  2. Um MdiParent des PlugIns zu setzen muss die Form die du dort übergibst in die PlugIn-AppDomain übertragen werden. Das ist eventuell nicht möglich und löst Exceptions aus, die man fälschlicher weise mit Typen aus den PlugIn-AppDomains assoziiert stadt mit dem MdiParent aus der Haupt-AppDomain.

Ich denke dass man mit C# hier nicht so einfach zum Ziel kommt.
Auf CodeProject gibt es einen Window-Tabifier der das ganze über die Windows-API löst. Das hat seine eigenen Nachteil, löst aber das Laden und Entladen der Assemblies, in dem jedes PlugIn einen echten eingenen Windows-Prozess hat.
Ein anderer Ansatz der mir einfallen würde ist, dass man zum Übertragen der PlugIn's keine eigenen Form-Klassen verwendet (so wie der Windows-Forms-Designer) sie anlegt, sondern eine 0815 System.Windows.Forms.Form instanziiert und füllt (diese kann dann ja direkt in der Haupt-AppDomain erstellt werden). Wie man diese Form füllt ist aber eine gradwanderung zwischen Komplexität und Funktionalität und man müsste sich das gut durchdenken.

Gruß
Juy Juka

14.08.2012 - 16:24 Uhr

Hallo Gogeta,

Wilkommen auf mycsharp.de 😃
Dein Vorsatz freut mich und ich wünsche dir viel Erfolg damit! 😃

Gruß
Juy Juka

13.08.2012 - 16:20 Uhr

Drem yol lok Rabban,

ich will die Sprache sprechen können 😃 da brauch ich keinen Volltextübersetzer.

Es ist eine künstliche Sprache für eine Computerspiel, daher dürfte sie nicht sehr vollständig sein aber mit ein paar Einschränkungen sicher nutzbar. ((Nur als Beispiel haben die Drachen in Skyrim eine andere Verbindung mit der Zeit als Sterbliche und daher hat ihre Sprache keine Zeiten!))

Und als Quellen (mehr gerne willkommen):
http://www.uesp.net/wiki/Lore:Dragon_Language
http://elderscrolls.wikia.com/wiki/Dragon_language

Lok, Thu'um
Juy Juka

13.08.2012 - 14:11 Uhr

Hallo @All,

die Sprache der Drachen aus Skyrim gefällt mir und ich würde sie gerne lernen.
Alleine ist das aber schwer und man kann nicht üben, daher suche ich jemand der mit macht.

Ich stell mir das so vor, dass man über InstantMessenger oder so einfach mit einander spricht und versucht die Drachensprache zu verwenden.
Am Anfang wird das natürlich reichlich zerhackt und unschön sein, aber dafür versucht man's ja.

Wäre jemand interessiert?

Gruß
Juy Juka

Dream yol lok,

thinvaakdovahii nol Skyrim brit wah zu ahrk Zu'u laan unt daar.
Vomu kos lot komeyt ahrk nis unt, Zu'u laan naan dreh.

Zu'u hahnu, mu thinvaak ahrk unt dreh thinvaakdovahii.
Saraan meyz pogaan krent ahrk vobrit, nuz daarii unt mu. Geh?

Naanii hind?

Lok, Thu'um
Juy Juka

@Moderatoren/Admins: Ich hoffe/denke, dass ein Computerspiel nicht zu weit weg ist für Smalltalk.

13.08.2012 - 14:07 Uhr

Hi,

schau doch ruhig mal |Aisys| O/R Mapper an.

Gruß
Juy Juka

10.08.2012 - 14:00 Uhr

Hallo bi0s,

warum verwendest du Reflection um die FireBird-DLL zu benutzen?
Du könntest eigentlich ganz normal die Typen verwenden. ???

Gruß
Juy Juka

10.08.2012 - 00:44 Uhr

Hallo mctimotheus,

also Typensicher geht es nur wie Rabban es vorgeschlagen hat (so weit ich sehe).
Wenn man aber auf die Typensicherheit verzichtet, kann man mit Reflection hier etwas machen.
Dazu muss man die Properties übergeben und nicht deren inhalt (so wie in deinem Code).

  1. Als strings (einfach aber unschön).
  2. Als Expressions (etwas schöner, aber trotz Intellisense und so weiter nicht typensicher).

Gruß
Juy Juka


IUser x = null;
IEnumerable<IUser> userList = null;
userList = repository.FindAll(()=>x.Orders, ()=>x.Roles);
userList = repository.FindAll();
userList = repository.FindAll(()=>x.Roles);


  ...

  using System;
  using System.Linq.Expressions;
  using System.Reflection;  

  ...

    public virtual void IEnumerable<IUser> FindAll(params Expression<Func<object>>[] properties)
    {
      ...
      foreach(Expression<Func<object>> zwi in properties)
      {
        PropertyInfo property = Helper.PropertyOf(zwi);
        // jetzt wie auch immer das Property "eager fetch" markieren/machen/laden/...
        ...
      }
      ...
    }

  ...

  internal static class Helper
  {
    public static PropertyInfo PropertyOf(Expression<Func<object>> property)
    {
      PropertyInfo propertyInfo = null;
      MemberExpression memberExpression = property == null ? null : property.Body as MemberExpression;
      UnaryExpression unaryExpression = property == null ? null : property.Body as UnaryExpression;
      if (memberExpression != null)
      {
        propertyInfo = memberExpression.Member as PropertyInfo;
      }
      else if (unaryExpression != null)
      {
        propertyInfo = ((MemberExpression)(unaryExpression).Operand).Member as PropertyInfo;
      }

      if (propertyInfo == null)
      {
        throw new ArgumentException(Properties.Resources.LambdaFehler);
      }
      return propertyInfo;
    }
  }
}

08.08.2012 - 06:25 Uhr

Hallo Raynex,

Das Thema gab es schon ein paar mal im Forum.
[erledigt] AssemblyResolve - einbinden dlls in die exe
Benutzer Programm generieren lassen
Entwurf eines eigenen Frameworks
...
(suche nach "netz dll")

Es gibt auch eine fertige Software die das kann (selber nie ausprobiert):
.Netz

Gruß
Juy Juka

01.08.2012 - 13:42 Uhr

Hallo chillic,

also genau dieses Verhalten ist im SplitContainer implementiert, da er seine Teil-Panels automatisch ein und Ausklappen kann.

Genauso einfach kann man das mit einem Pannel auf Dock=Fill und einem zweiten Panel auf Dock=Left/Right machen, das Doch=Fill-Panel nimt automatisch den Platz des anderen mit ein, wenn man das Doc=Left/Right auf Visible=False setzt.

Den Inhalt in den Panels kann man mit einem TableLayoutPanel sauber gestalten oder (wenn man will) innen dann mit Anchor arbeiten.

Also insgesamt hätte man 0-3 Controls extra (je nach dem wie es jetzt schon aufgeteilt ist und welche ContainerControl man verwendet).

Gruß
Juy Juka

31.07.2012 - 18:48 Uhr

Hallo chilic,

so weit mit bekannt ist Anchor nicht sehr performant/effektiv, daher vermeide ich es wan immer möglich. Das geht, da .Net auch noch eine zweite automatische Größenfunktion hat. Diese ist manchmal etwas umständlicher aber meistens (gefühlt) verständlicher und weniger Fehleranfällig.

Ich spreche über Dock, welches in Kombination mit Padding und Margin wunder bar funktioniert und im Designer eingestellt werden kann.
Man muss die Form nur mit Container-Controls (die unsichtbar sein können) sauber unterteilen (Panel, TableLayoutPanel, SplitContainer, ... etc.).

Also ich würde das ganze mal mit Dock=Fill und Margine={0,0,0,10} ausprobieren. ((Ich habs jetzt selber nicht versucht.))

Gruß
Juy Juka

30.07.2012 - 11:24 Uhr

Hallo bigeddie,
*EinwegSchutzProxy *WriteOnlyOnceProxy *EinmaligeAenderungProxy

Gruß
Juy Juka

30.07.2012 - 11:20 Uhr

Hallo Diablo,

wie Abt schon sagte ist hier in einem Forum-Post eine ausreichende Antwort zu geben so gut wie unmöglich. Aber wenn du die gegebenen Links durch liest, hast du gute Chancen die Antwort zu verstehen.

Einen Teil deiner Frage kann ich aber Beantworten: Forms + Klassen
Die Form ist in den meisten Fällen (nicht immer) die Präsentation zu einem oder mehreren Objekten, was bedeutet, dass Sie den Zustand der Objekte (aka. Properties) darstellen soll - Positionierung, Formatieren, etc.
Das Problem daran ist meistens aber mitzubekommen wann die Form "veraltet" ist, d.h. sich der Zustand der Objekte geändert hat. Hierzu verwendet .Net das Observer-Pattern im .Net-Framework durch INotifyPropertyChanged dargestellt. Und in Windos-Forms und in der WindowsPrestentationFoundation durch Databinding implementiert/verwendet.
Ob das Verhalten/Methoden der Objekte jetzt von der Form angestossen wird oder anders ist und was für ein Objekt dargestellt wird ist nicht so wichtig.

Gruß
Juy Juka

26.07.2012 - 09:22 Uhr

Hallo Rabban, Halo Abt,

* Einheitliche Abfragen, Applikations-weit standardisierte Abfragen (Sortierung & Co)

Dann hätte ich aber lieber die Abfragen als Objekt (siehe DetachedCriteria/ICriterions) und so eine Schnittstelle zum einhacken in den ORM sollte besser im ORM sein und nicht "außernherum" gebaut. Aber dafür können die Leute die den ORM verwenden nichts. 😃

* Direktes Kompilieren der Queries -> Performance-Steigerun

Gilt ja nicht für jeden ORM.

•Man kann relativ einfach die Repositories austauschen wenn man die DB oder den OR-Mapper wechseln muss.

Also DB wechseln sollte der ORM können! Aber ORM wechselen ist ein Argument.

•das Repository Läd/Speichert immer nur mit Transaktionen, somit muss man das nicht immer expliziet bei jeder Aktion angeben.

Also das Transaktions-Handling sollten die Entwickler schon im Auge behalten, trotz aller Einfachheit und Abstraktion ist das so wichtig, dass mir es lieber ist wenn man es nicht ignoriert.

•Standardisierung beim Speichern von ApplicationNames wenn sich mehrere Anwendung die gleiche DB teilen.

Das ist jetzt aber schon sehr spezielle, oder?

Gruß
Juy Juka

25.07.2012 - 14:49 Uhr

Hallo Rabban, Hallo Abt,

danke für die Hilfe mit einer ICollection hat NHibernate es korrekt erkannt und nicht in der Datenbank aktualisiert.

... eine virtual IList<T> oder etwas vergleichbares nutzt ...

Richtig erkannt, wir wissen garnicht was für eine Collection da eigentlich drin steckt.

...keine Repositories..

... Am sinnigsten wäre es aber wohl wirklich, wenn ihr euch ein Repository schreibt das die Collection zu dieser Entität in der Sortierung zurück gibt, wie ihr es braucht.
Somit wäre die neue Collection auch Lazy und ihr könnt darin wild rumsortieren oder verändern wie ihr wollt, ohne die Versionsnummer von Entität A zu verändern.

Wie Rabban sagte muss man keine Repositories in NHibernate verwenden. Aber dank der ganzen Optionen von NHibernate (Selekt-Bedingungen auf Typen-Ebene, Sortierkriterien, Vererbung, ...) und dem OO-Prinzip der Kapselung ist das ganze Konzept von Repositories eigentlich überflüssig! Weil:

  • der Großteil aller Abfragen auf die Objekte sowieso dynamisch, je nach Benutzerwunsch/-eingabe, ist.
  • nur wenige komplexe Bedingungen wiederverwendet werden müssen.
  • die komplexen Bedinungen einfacher als eigene Implementationen von ICriterion (bzw. in den jeweiligen alternativen Abfrage-Syntaxen)* umgesetzt werden und so dynamisch an den passenden Stellen verwenden** werden können (statt Methoden aus Repositories).

Sehr viel Erfahrung mit NHibernate im speziellen und Repository-Pattern im Allgemeinen habe ich aber nicht. Falls jemand gute Gründe für das Repository-Pattern hat, würde es mich freuen sie zu lesen.

Gruß
Lecrell & Juy Juka

* wir verwenden nur DetatchedCriteria als Abfrage-Syntax, der Einfachkeit halber.
** dank Mikrokern/ServiceLocator kann man dies dann global Konfigurieren/Austauschen.

23.07.2012 - 17:08 Uhr

Hallo pinki,

gern geschehen.

Gruß
Juy Juka

18.07.2012 - 09:05 Uhr

Hallo Dust Sings,

Das Thema gab es schon ein paar mal im Forum.
[erledigt] AssemblyResolve - einbinden dlls in die exe
Benutzer Programm generieren lassen
Entwurf eines eigenen Frameworks
...
(suche nach "netz dll")

Es gibt auch eine fertige Softwar die das kann (selber nie ausprobiert):
.Netz

Gruß
Juy Juka

18.07.2012 - 08:53 Uhr

Hallo burkut,

es ist wie herbivore schon gesagt hat:

  1. Das Browser-Steuerelement muss in einer Maske liegen.
  2. Man kann weitere Steuerelemente in diese Maske einfügen.
  3. Um dein Ziel zu erreichen fügst du am einfachsten ein Button-Steuerelement* ein und reagierst auf dessen Click-Event.
  4. Wie du (im Click-Event) das Browser-Steuerelement zurück navigierst findest du in der Dokumentation des Browser-Steuerelements.

* Button-Steuerelemente: Button, MenuButton, ToolBarButton, ...

Gruß
Juy Juka

17.07.2012 - 22:35 Uhr

Hallo burkut,

deine Sätze oben haben eineige böse Fehler/Lücken, du solltest das besser Korrigieren. Tipp: Texte immer noch mal komplett selber lesen, bevor man sie abschickt.
Am einfachsten geht das, in dem du auf die Maske in der das Browser-Steuerelement ist eine ToolBar und/oder MenuBar einfügst und dort einen Knopf einbaust der den Browser auf die Anfangsseite zurück navigiert. (Wie das geht findest du in der Dokumentation des Browser-Steuerelements.)

Gruß
Juy Jua

09.07.2012 - 18:33 Uhr

Hallo ModelViewPresenter,

anstelle der Delegaten gehen natürlich auch Interfaces.

Und wegen "Single Responsibility Prinzip": Sie es doch ehr so, dass die Klasse nicht für das Schließen verantwortlich ist, sondern für die Steuerung des Ablaufs, also der Klasse die wiederum für das Schließen verantwortlich ist rechtzeitig bescheid geben muss (ob über Methodenaufruf oder Event oder etc. ist hier dann ehr eine Frage wie lose oder eng man koppeln möchte).

Gruß
Juy Juka

06.07.2012 - 14:49 Uhr

Hallo @All,

seit heute plötzlich ist mein Visual Studio extrem langsam beim Start des Debuggers.
Gestern habe ich einen Symbolserver eingebunden um NHibernate zu debuggen und das hat auch funktioniert, daher vermute ich, dass er immer noch versucht Sysmbole online nachzuladen.

Ich habe alle "Orte für Symboldateien" unter Extras -> Optionen -> Debugging -> Symbole deaktiviert, kontrolliert dass ich keine _NT_SYMBOL_PATH oder _NT_ALT_SYMBOL_PATH Umgebungsvariable habe und Extras -> Optionen -> Debugging -> Allgemein -> Nur eigenen Code aktivieren (nur verwaltet) aktiviert.
Scheinbar lädt er aber immer noch Symbole von irgend wo her (außer dem Ausführungsverzeichniss).

Weis jemand wie ich Symbolserver wirklich lösche?
Kennt jemand einen anderen Grund warum das Debugging so langsam startet?

Gruß
Juy Juka

06.07.2012 - 10:12 Uhr

Hallo herbivore,

stimmt, wenn die Unterklasse neu ist, ist es kein BreakingChange, weil die Unterklasse ja noch nicht verwendet wird.

In meinem Fall ist es aber ein BreackingChange da die Unterklasse nicht neu ist, sondern die Warning durch das vergessene new/override nicht aufgefallen war. Es wird die Klasse also schon sehr oft verwendet und auch als Konkreter Typ.

Und gefühlt ist es das auch in den überwiegenden Fällen ein BreackingChange, da man ja nicht weiß wo/wer auf das Property/die Klasse zugreift so bald man es einmal Veröffentlicht hat und sich (wie Sarc gezeigt hat) das Verhalten ändert.

Gruß
Juy Juka

05.07.2012 - 17:38 Uhr

Hallo Siedlerchr,

man muss im DataGridView die Spalten definieren, dann kann man Reihenfolge, Formatierung und noch viel viel mehr beeinflussen.
Wenn man den DataGridView einfach alles automatisch machen lässt, hat man da sehr wenig einfluss.

Gruß
Juy Juka

05.07.2012 - 13:18 Uhr

Hallo Sarc, Hallo ujr, Hallo Console32,

danke für eure Posts.

Dank Sarc ist jetzt klar, dass es ein BreakingChange ist und ich werde es nicht ändern.
new werde ich einfügen, da es die Warnung "behebt" aber eh keine Auswirkung auf den Programmablauf/die Auflösung der Member hat, danke ujr.
Tja, Console32, hat recht, dieses Verhalten war sowieso keine Absicht und wurde leider übersehen. Da es aber trotzdem Funktioniert und ich im Notfall auch an das Property der Basis-Klasse komme, kann ich es so belassen.

Gruß
Juy Juka

05.07.2012 - 11:25 Uhr

Hallo @All,

hoffentlich habe ich ein solche Thema nicht mit/in der Suchfunktion übersehen.

Ich habe ein Property* in einer Klasse und in einer davon erbenden Klasse mit dem gleichen Namen* deklariert, was ja nur eine Warnung im Compiler verursacht. Die Assembly mit diesen beiden Typen ist raus und in verwendung. Wenn ich jetzt diese Warnung beheben will müsste ich das virtual des Properties in der erbenden Klasse in ein override ändern.
Wäre das ein Bracking-Change? Und wenn ja warum? Und was würde das hinzufügen von new vor das virtual verursachen?

Gruß
Juy Juka

* es könnte genauso gut eine Methode sein, dann müsste halt Name und Signatur übereinstimmen.

05.07.2012 - 10:06 Uhr

Hallo ModelViewPresenter,

zuerst musst du einen Datentyp wählen um die Zeile zu repräsentieren. Ich Empfehle string[] oder eine eigene Klasse/Interface das einen Indexer hat der string zurück gibt. (Bei den Beispielen nehm ich string[] an.)

Als nächstes brauchst du eine Lise für die Bedingungen. Je nach dem ob du die auszuführen Aktion je Bedinung festlegen willst oder immer die gleiche Ausführst ein Dictionary oder eine Liste.
Man sollte die generische Variante der Liste/Dictionary verwenden, also muss man auch den Typ der Bedingung festlegen. Das .Net-Framework bietet hier zu System.Predicate<T> an aber eine eigen Klasse zu schreiben wäre auch nicht verkehrt.


IDictionar<Predicate<string[]>,Action<string[]>> dictionary = new Dictionar<Predicate<string[]>,Action<string[]>>();
...
foreach(string zeile in File.ReadAllLines(...))
{
  string[] array = Split(zeile); // Trenner, Leerzeilen, etc.
  foreach(Predicate<string[]> predikat in dictionary.Keys)
  {
    if(predikat(array)) dictionary.Value(array);
  }
}

Der interesantere Teil ist die Bedingungen zu laden. Ich würde hier auf die *.config-Datei gehen und es selbst generieren. Und man sollte sich vorher überlegen ob man eine kleine Boolsche-Algebra (Nicht, Und, Oder) in die Konfiguration einbaut oder nicht.

Gruß
Juy Juka

03.07.2012 - 18:48 Uhr

Hallo driftking,

wilkommen im Forum.
Ich will nichts dagegen sagen sich selbst etwas beizubringen aber bei dir scheinen einige Grundlagen zu fehlen, weshalb du unbedingt ein (Einsteiger-)C#-Buch durcharbeiten solltest. Einige Beispiele findest du in den Resourcen hier auf der Webseite aber auch unter Buchempfehlungen.

Das Benennungs-Thema hat es sogar in die FAQs geschafft:
[FAQ] Variablennamen zur Laufzeit zusammensetzen

Ein anderes Problem dürfte das Lesen der Datei sein. Ich bin nicht 100%ig sicher aber du solltest die Datei nicht Schreibbar öffnen sondern expliziet nur lesend und ohne eine Blockierung darauf zu legen. Ebenfalls solltest du die Datei mehrfach öffnen, da du an unterschiedlichen stellen im Stream lesen musst und alle Threads würden sich das Stream-Objekt teilen und ihm unkontrolliert verschiedene Befehle geben (spring nach hier, spring nach da, lese jetzt 1000 bytes, ...) was ja nur zu chaos führen kann.

Gruß
Juy Juka

02.07.2012 - 13:31 Uhr

Hallo omega90,

folgendes Tutorial sollte dir helfen: [Tutorial] Konfigurationsmodell im .NET Framework

In Kürze:

  1. Doppel-Klick auf den "Properties"-Ordner im Projektmappenexplorer von Visual Studio.
  2. Den Reiter "Einstellungen" auswählen.
  3. Wenn hier ein Link (blau) zu sehen ist darauf klicken.
  4. Im Fenster (wie im Tutorial beschrieben) kann man jetzt entweder einen int oder long oder sogar TimeSpan anlegen, den man später konfigurieren kann.

Gruß
Juy Juka

30.06.2012 - 15:42 Uhr

Hallo Exodus1028,

oder du schreibst dir eine eigene Schnittstelle/Import, den du beim Update benutzt. Das ist natürlich aufwändiger als die DBMS-Funktionen zu nutzen, kann aber entsprechend auch optimiert werden.

Gruß
Juy Juka

28.06.2012 - 22:01 Uhr

Hallo tmase7,

bevor ich was sagen will würde ich gern noch etwas nachfragen.

  1. Hast du diese 4 Komponenten schon oder suchst du dazu etwas?
  2. Was meinst du mit "Zusammenstellen der Daten"? Das erstellen des Request an den Webservice? Den Webservice selber (also den Response aus sicht des Clients)?

Gruß
Juy Juka

28.06.2012 - 00:10 Uhr

Hallo hawwk66,

also eine Möglichkeit die (annähernd) gleiche Geschwindigkeit zu erreichen wie mit dem implementieren von IClonable wäre es den Code der in IClonable enthalten ist sich dynamisch zur Laufzeit zu compilieren (Reflection/Emit/CodeDom/DynamischeAssemblies).

1.

public interface IKopierer { object Kopierer(object obj); }
  1. ein Dicitionar<Type,IKopierer>
  2. Eine Funktion/Klasse die IKopierer-Implementationen erzeugt
  3. für Deep Cloning muss man dann einfach nur in der generierten "Clone-Methode" weitere Methoden aus dem Dictionary aufrufen.

Bei der/den generierten Methoden lässt sich dann natürlich sehr effizient optimieren und so weiter, da sich jede Optimierung sofort auf alle Clone-Methoden auswirkt. Es ist aber dem entsprechend komplexer alles zu schreiben.
optimierungen: Boxing vermeiden, das Dictionary vermeiden aka. Instanz oder Static Variablen, intrinische Datentypen expliziet behandeln, IClonable prüfen.

Gruß
Juy Juka

27.06.2012 - 15:26 Uhr

Hallo BloodyLove,

also mit VS-Express kenn ich mich nicht aus. Könntest aber probieren neben der *.resx eine *.de-De.resx anzulegen (usw.) und eventuell erstellt es automatisch Sateliten Assemblies.

Aber eigentlich meinte ich, dass du die Resourcen einfach in allen Projekten anlegen solltest und mit einer externen Software* die Bilder "von außen" synchronisieren kannst.

Gruß
Juy Juka

* selber schreiben ist da angesagt, aber der Compiler ist ja von C# aus verfügbar und kann dir die Satelliten-Assemblies generieren/überschreiben.

26.06.2012 - 23:49 Uhr

Hallo Rabban,

so gut bin ich mit NHibernate nicht, aber mit DetatchedCriteria konnte ich das lösen.


DetachedCriteria crit = DetachedCriteria.For<Transaction>();
crit.SetProjection(Projections.Sum<Transaction>(p => p.Amount));
crit.Add(Subqueries.PropertyIn("Id", DetachedCriteria.For<Transaction>()
                                          .SetProjection(Projections.Id())
                                          .SetFirstResult(0)
                                          .SetMaxResults(20)
                                          ));
double d = crit.GetExecutableCriteria(session).UniqueResult<double>();

Für alle die kein "NHibernate" lesen können die SQL Variante:


SELECT COUNT(*) 
FROM transaction 
WHERE id IN (
    SELECT TOP (20) ta1.id 
    FROM transaction ta1 ) 

Gruß
Juy Juka

22.06.2012 - 19:32 Uhr

Hallo BloodyLove,

die lokalisierten Resourcen kann man unabhänig vom restlichen QuellCode compilieren, daher ist es möglich sie einfach mit einer komplett getrennten Software nachträglich über alle Projekte hinweg zu verwalten.

Gruß
Juy Juka

22.06.2012 - 07:02 Uhr

Hallo Shaarigan,

Danke für die Erklährung. Jetzt habe ich (glaube ich) verstanden was du mit "stacken" meinst.
Also für mich hört sich das sehr nach Dekorierer/Decorator-Patern an, warscheinlich unterstützt vom Abstrakte Fabrik/Abstract Factory-Patern (eventuel auch gleich die größere Variant Mikrokern/Microcernel/Inversion-of-Control).

Beispiel
z.B. würder das (I)Simulationsobjekt eine IAktionskomponente erwarten, man würde ihm aber einen Dekorierer geben, der IAktionskomponente implementiert und selbst wieder n IAktionskomponenten besitzt.

Das "geben" kann man in einer Fabrik machen oder mit einem Mikrokern/Inversion-of-Control-Framewokr. Die meisten dieser Frameworks haben auch global die Möglichkeit eine Klasse (z.B. Enviromental) gegen eine Ableitung davon auszutauschen.

Zusammenfassung
Ich denke nicht, das man um diese Problem zu lösen CLR Injection braucht. Und selbst das Compilieren der dynamischen Teile ist ein könnte man auslagern und erst mal "nur" schon compilierte Erweiterungen aus Assemblies (.dll/.exe) nachladen lassen.

Aber ohne die genauen Anforderungen ist das alles leider nur 50% geraten. 😄

Gruß
Juy Juka

21.06.2012 - 20:20 Uhr

Hallo Christoph1968,

etwas spät aber ich fand meine idee nicht so gut und hab deshalb nix geschrieben. Aber mti der "manuell nachpflegen"-Idee kann sie mit halten:

Ich würde die PictureBox einfach nicht binden. Der Benutzer kann ja darin eh keine Änderungen machen und wird (wenn er das Bild ändern will/kann) ja einen Button oder MenüEintrag nutzen um ein neues Bild einzulesen. Daher könntest du die Bytes bei CurrentItemChanged, CurrentChanged oder DataSourceChanged manuell in die PictureBox übertragen.

Ist weniger Fehleranfällig als manuelles Nachpflegen.

Gruß
Juy Juka

21.06.2012 - 20:16 Uhr

Hallo Shaarigan,

ich würde gern noch mal auf deine Anforderungen zurück kommen.

Das man Properties hinzufügt ist für mich noch nachvollziehbar, da diese ja einfach zum Selbstzweck (Informationen mitschleifen) existieren können. Aber wozu brauchst du dynamische Methoden? Irgend jemand muss diese ja auch aufrufen und das ist mindestens genauso kompliziert wie sie dynamisch anzuhängen, einfacher wäre ein Dictionary<string,Action> oder eine Skripting-Engine.

Des weiteren frag ich mich ob es on-the-fly sein muss, oder ob der Benutzer/DrittAnbieter es umkonfigurieren/neustarten kann. Mit einem neustart, könnte man dann sehr einfach über einen Mikrokern arbeiten und den dynamischen Teil einfach beim Systemstart compilieren und dann in den Mikrokern einkonfigurieren. ((so fern man einen Mikrokern verwendet.))

Und muss wirklich jedes Objekt anpassbar sein oder sind es spezielle Klassen auf die man das einschränken kann?

Last but not least: Ich hab leider nicht mal die Hälft von deinem vorletzten Post verstanden. Kannst du das ganze noch mal auf Deutsch schreiben?

Gruß
Juy Juka

21.06.2012 - 13:28 Uhr

Hallo bafla13,

bitte [Hinweis] Wie poste ich richtig? beachten.
Formuliere deine Frage bitte noch mal.

Entweder verstehe ich nicht was "strg drucken" ist oder du hast einen Schreibfehler.

Und noch wichtiger ist, dass der "Status" einer Forum das FormState-Property ist und nur beschreibt ob die Forum Minimirt/Maximiert/... ist.

Meinst du eventuell das du auf Events der Form reagieren willst?

Gruß
Juy Juka

21.06.2012 - 13:24 Uhr

Hallo weismat,

bei sovielen Werten und da sich die Liste ja offensichtlich erweitert, ist ein Enum nicht sonderlich sinnvoll. Ein State-Patern ist da einfach gleichzeitig erweiterbar und lesbar.
Siehe auch meinen vorherigen Post und der Post von der-schlingel.

Gruß
Juy Juka

21.06.2012 - 00:52 Uhr

Hallo @All,

grinse gerade breit über die Patch-Notes von Black Mirror 3:

-Problem "Spiel funktioniert zwischen 0 und 1 Uhr nicht" behoben

Guckt mal wann ich den Post erstelle/erstellt habe. 😃

Gruß
Juy Juka

21.06.2012 - 00:26 Uhr

Hallo Rudy_Mentaire,

der-schlingel sagte es ja schon, aber ich wollte den Namen des Entwurfsmusters noch nachreichen: Zustand/State-Patern

Gruß
Juy Juka

13.06.2012 - 21:05 Uhr

Hallo Georg,

100%ig bin ich nicht sicher, aber so weit mir bekannt verwendet der DataGridView nur Steuerelmente, während die Zellen bearbeitet werden, d.h. so lange man nicht im Beabeiten-Modus der Zelle X ist, gibt es keine TextBox deren Scrollbalken aktiviert sein können.

Falls es nur im Bearbeiten-Modus reicht:
Ich hab jetzt auf die Schnelle nicht gefunden wie man an das "EditControl" kommt aber im zweifelsfall muss man von DataGridViewTextBoxColumn erben.

Alternativ kann man auch die Zeilen des DataGridView automatisch die größe anpassen lassen, so das mehrzeilige Texte ausgegeben werden. Dazu muss man aber DefaultCellStyle.WrapMode der betroffenen Spalte auf System.Windows.Forms.DataGridViewTriState.True setzen (geht auch im Designer).

Gruß
Juy Juka

13.06.2012 - 20:55 Uhr

Hallo Programmierhans,

ich denke man kann das noch ein bischen Optimieren, ohne die Lesbarkeit zu verringern:


  private bool AreAllChildNodesExpanded(TreeNodeCollection nodes)
  {
    foreach (TreeNode node in nodes)
    {
      if (node.Nodes.Count > decimal.Zero)
      {
        if (!node.IsExpanded || !AreAllChildNodesExpanded(node.Nodes))
          return false;
      }
    }
    return true;
  }

Gruß
Juy Juka

13.06.2012 - 20:47 Uhr

Hallo WPF_Noob,

war deine Frage wie folgt gemeint?

Kann man das Entity Framework zentral konfigurieren (ein Eintrag in der *.config) und gleichzeitig die gemappten Klassen in verschiedenen Assemblies schreiben und immer weiter ausbauen?

|Aisys| O/R Mapper bekommen die zu mappenden Klassen samt Metainformationen übergeben und erkennt diese auch dynamisch und nach und nach, hohlt den Connectionsstring und weitere DBMS spezifische Informationen aber aus der *.config und somit von einer stelle => d.h. ich kann in verschiedenen Assemblies verschieden von einander unabhänige Klassen schreiben und die Datenbankzugriffsschicht kann mit allen Umgehen.

Caste.ActiveRecord kann auch mit Klassen aus verschiedenen Assemblies gleichzeitig umgehen und hat auch eine zentrale Konfiguration für die DBMS spezifischen Informationen. Jedoch müssen alle Klassen beim start der Anwendung auf einmal bekannt gemacht werden. Das lässt sich aber mit vertretbarem Aufwand über Reflection oder die App.config lösen.

NHibernate im gegenzug muss die Klassen, Metainformationen und die DBMS spezifischen Informationen ** übergeben werden, was bedeutet, dass man in jeder Assembly diese neu konfigurieren könnte/müsste. Es lässt sich auch hierbei mit wenig Aufwand eine zentralle Stelle (konfiguration) schaffen.

Für's Entity Framework kann ich dir das leider nicht genauer sagen.

Gruß
Juy Juka

((** für NHibernate kenner die Session))

11.06.2012 - 23:01 Uhr

Hallo pinki,

ein MenuItem kann nur in einem Menü (Context oder Main-Menü ist da egal) enthalten sein, d.h. es entfernt sich selbst automatisch aus dem "alten Menü", wenn man es einfach wo anders hinzufügt.
Anstelle von "ctx.Items.Add(item);" müsstest du eigentlich eine Kopie von "item" anlegen, aber das wird ja schwierig.

Wenn ich ein Kontext-Menü dynamisch erweitern muss reagiere ich immer auf das ContextMenu.Popup-Ereignis und das ContextMenu.Collapse-Ereignis und füge meine speziellen Items hinzu bzw. entferne sie wieder (man muss nur sicher stellen die speziellen Items richtig zu erkennen und keins zu viel oder zu wenig zu entfernen).

Gruß
Juy Juka