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

21.02.2011 - 16:09 Uhr

Hallo Rainbird,

Ich hab kein VS2008, aber guck doch mal in die Resource-Datei der abgeleiteten Form, stehen dort eventuell für alle protected-Steuerelemente alle Resourcen noch mal drin?

Willst du die Steuerelemente im Designer ändern oder nur im QuellCode haben?
Für "im QuellCode" geht das auch über protected Properties.

Gruß
Juy Juka

18.02.2011 - 16:54 Uhr

Hallo @All,

*räuspern*


string[] ergebnis = str.Split("_".ToCharArray(),2); // der zweite Parameter bestimmt die maximale anzahl an ergebnissen.

Gruß
Juy Juka

[EDIT]
Da ich was übersehen habe, hier noch mal der Code, der alle Anforderungen lösen sollte:


public static string DateiNameFiltern(string input)
{
  input = System.IO.Path.GetFileNameWithoutExtension(string.Empty + input);
  string[] zwi = input.Split("_".ToCharArray(),2);
  return zwi.Length>decimal.One?zwi[(int)decimal.One]:zwi[(int)decimal.Zero];
}

[/EDIT]

17.02.2011 - 16:15 Uhr

Hallo @All,

Zeit heilt alle Wunden ... leider ist der VisualStudio Forms Designer nicht verwundet sondern einfach nur zu blöd meine Assembly zu laden.

Ich bräuchte wirklich noch immer Hilfe bei dem Thema.

Gruß
Juy Juka

17.02.2011 - 11:43 Uhr

Hallo PalPal,

So was wie "global" gibt es in .Net nicht.
Ich empfehle dir hier zu mal die Themen Instanz-Variablen, Klassen-Variablen, lokale Variablen, static, etc. (im allgemeinen Sichtbarkeit) zu lesen. (z.B. im OpenBook, siehe unter Ressourcen von mychsharp.de.)

Ich würde die Zeilen als Attribut in der Form-Klasse deklarieren und diese dann im Konstruktor nach InitalizeComponents füllen.

Gruß
Juy Juka

15.02.2011 - 00:45 Uhr

Hallo winSharp93,

Das ist gut 🙂 🙂
HTML ist der Abschuss!! rofl

Gruß
Juy Juka

14.02.2011 - 15:58 Uhr

Hallo halloman,

Das einfachste is über die UserConfig Datei von .Net.
Du kannst dir vom VisualStudio den Zugriff darauf generieren lassen.
Dort legst du ein Property an, dass die gewählte Sprache enthält (aber eben NULL am Anfang).
Wenn du das jetzt füllst und speicherst, ist es beim nächsten Start der Anwendung nicht mehr leer und du kannst die Auswahl von dort nehmen, stadt den User zu fragen.

Gruß
Juy Juka

14.02.2011 - 15:55 Uhr

Hallo PalPal,

Der 100%ige Weg wäre eben so komplex, dass ich ihn hier nicht Zeigen kann.
Ich kann es aber kurz Umreisen:

  1. Programm-Logik aus der Form in eine eigene DLL mit Klassen übertragen.
  2. Klassen in der DLL für DataBinding anpassen
  3. die sich wiederhohlenden Teile der Form in UserControls auslagern
  4. Die/Das UserControl per DataBinding mit der Klasse(n) aus der DLL verbinden.
  5. Alle sich wiederhohlende Teile aus der Form entfernen und dynamisch mehrer instanzen des UserControls erzeugen und jede mit den benötigten Instanzen der Klasse(n) aus der DLL befüllen.
  6. Form-Code so ändern, dass er die Klasse(n) benutzt und keine nicht-UI-Sachen mehr macht.

Das ganze ist kompliziert aber jeden Augenblick den man dafür Aufwendet wert. Sorry, dass ich es nicht genauer erklären kann, das ist aber einfach zu viel für ein Forum.

Gruß
Juy Juka

14.02.2011 - 15:23 Uhr

Hallo PalPal,

Das "richtige" Vorgehen wäre bei dir, erst mal UI und Programm-Logik zu trennen. Dann müsstest du die sich wiederhohlenden Teile der UI in UserControls auslagern und diese Dynamisch auf deiner Form erstellen.

Da du aber alles schon im Designer zusammen gestellt hast, will ich dir auch Zeigen, wie du deine geleistetet Arbeit noch weiter benutzen kannst (auch wenn das nicht der 100%ige Weg ist):

Zu erst solltest du dir eine kleine Klasse schreiben, die die UI-Elemente zusammen fasst:


... class ... : Form
{
  private class Zeile
  {
    public virutal ComboBox ProjektComboBox{get;set;}
    public virtual TextBox MontagTextBox{get;set;}
    public virtual TextBox DienstagTextBox{get;set;}
    ...
    public virtual TextBox SonntagTextBox{get;set;}
    public virtual TextBox SummeTextBox{get;set;}
    public virtual IEnumerable<TextBox> TagesTextBoxListe
    {
      get
      {
         yield return this.MontagTextBox;
         yield return this.DienstagTextBox;
         ...
         yield return this.SonntagTextBox;
      }
    }

    public Zeile(){}
    public Zeile(ComboBox projektComboBox, TextBox montagTextBox, ..., TextBox summeTextBox)
    {
      this.ProjektComboBox = projektComboBox;
      this.MontagTextBox = montagTextBox;
      ...
    }
  }
}

Als nächtes fasst du alle Steuerlemente aus deiner Maske in eine Verarbeitbare Liste zusammen:


Zeile[] alleZeilen = new Zeile[]{
  new Zeile(this.projektComboBox1, this.TBx_Mo1, ...),
  new Zeile(this.projektComboBox2, this.TBx_Mo2, ...),
  ...
};

Jetzt kannst du alle Steuerelemente mit dieser Liste durchgehen. 🙂 Viel Spass.

Noch mal:

  • Das ist nicht der 100%ige weg
  • Das geht viel einfacher über OO, Schichtentrennung und UserControls
  • Richtlinien für Namen => Diese Bezeuchnungen für die Steuerelmente verstossen gegen ziemlich jede der Empfehlungen von Microsoft.

Gruß
Juy Juka

14.02.2011 - 14:49 Uhr

Hallo PalPal,

Müssen es TextBoxen sein oder könnte es auch ein DataGridView werden?

Der Name des Controls ist eigentlich völligst egal, was willst du mit dem setzen von "textBox.Name" erreichen?

Hast du schon alle TextBoxen auf die Maske gezogen?

Gruß
Juy Juka

14.02.2011 - 09:50 Uhr

Hallo Abt,

Also von einem E vorne weg würde ich abraten.
Das ist nicht in den Richtlinein für Namen vorgeschlagen, sondern

Verwenden Sie für Enumerationen Namen im Singular, sofern ihre Werte keine Bitfelder sind.

Verwenden Sie einen Namen im Plural für Enumerationen, deren Werte Bitfelder sind. Diese Enumerationen werden auch als Flags-Enumerationen bezeichnet.

Einfach nur den Namen.

Gruß
Juy Juka

10.02.2011 - 11:27 Uhr

Hallo dN!3L,

Danke, funktioniert jetzt einwandfrei. 😃

Aber ich habe stadt

if (propertyInfo.PropertyType.IsValueType)  
        ilGenerator.Emit(OpCodes.Unbox,propertyInfo.ReflectedType);  
  

folgendes geschrieben

if (property.ReflectedType.IsValueType)
        ilGenerator.Emit(OpCodes.Unbox, property.ReflectedType);

War doch richtig, oder? Oder war PropertyType prüfen und ReflectedType verwenden absicht?

Mit freundlichem Gruß
Juy Juka

10.02.2011 - 10:02 Uhr

Hallo herbivore,

Das ganze hat zwei einfache gründe:

  1. Ich hab gestern beim besten willen AppDomein.DefineDynamicAssembly nicht gefunden, was der Einstiegspunkt für die C#-Ebene ist.
  2. Weil mir das mit DynamicMethod um einiges Schlanker vor kamm als ein Dynamisches Assembly.

Also wenn es möglich wäre, würde ich das ganze gern so klein halten wie möglich. Eine DynamicMethod mit C# wäre so der Königsweg.

Gruß
Juy Juka

10.02.2011 - 03:37 Uhr

Hallo @All,

Ich dachte mir gestern, dass ich mich endlich mit Reflection.Emit beschäftigen sollte, da ich einen dynamischen Zugriff auf Properties brauche.
Mit MSDN und Reflector (der mir einen Beispiel-Code von C# lesbar nach IL transformiert) hat es auch funktioniert.

Der erste Test mit System.Collections.Generic.List<object>Count hat auch funktioniert und immer den richtigen Wert ausgelesen. Aber der zweite Test mit System.DateTimeSecond funktioniert nicht immer. Bei einigen DateTime-Objekten bekomme ich immer total zufällige Werte zurück anstelle des Inhalts von Second.

        System.DateTime dt = new System.DateTime(2011, 02, 10, 01, 09, 51);
        System.Converter<object,object> zwi = PropertyEigenschaften.ConverterBuilder.Erzeugen(typeof(DateTime).GetProperty("Second"));
        System.Console.Out.WriteLine(zwi(dt));

    private static int counte;
    private static Type _This = typeof(ConverterBuilder);
    private static Type _Obje = typeof(object);
    private static Type _Conv = typeof(Converter<object, object>);

    private static Converter<object, object> CreateConverter(Type typ, PropertyInfo property)
    {
      DynamicMethod dynamicMethod = new DynamicMethod(
        string.Format("M{0:#0}",++counte), 
        MethodAttributes.Static | MethodAttributes.Public, 
        CallingConventions.Standard,
        _Obje, 
        new Type[]{_Obje}, 
        _This, 
        true);
      dynamicMethod.DefineParameter(
        (int)decimal.One,
        ParameterAttributes.In,
        dynamicMethod.Name);
      ILGenerator generator = dynamicMethod.GetILGenerator();
      generator.DeclareLocal(_Obje);
      generator.Emit(OpCodes.Ldarg_0);
      generator.Emit(OpCodes.Castclass, typ);
      generator.EmitCall(OpCodes.Callvirt, property.GetGetMethod(true), null);
      if (property.PropertyType.IsValueType)
        generator.Emit(OpCodes.Box, property.PropertyType);
      generator.Emit(OpCodes.Stloc_0);
      generator.Emit(OpCodes.Ldloc_0);
      generator.Emit(OpCodes.Ret);
      return (Converter<object,object>)dynamicMethod.CreateDelegate(_Conv);
    }

Sieht jemand ein Problem im mit Emit erstellten Code? Wenn ich es mit einem im Reflector umgewandelten C#-Beispiel verlgeiche sehe ich keine Unterschiede (außer nop die nicht da sind.)

Ebenfalls hilfreich wäre, wenn mir jemand sagen könnte, ob ich aus DynamicMethod irgend wie den lesbaren IL-Code erzeuge/ausgeben lassen kann.

Danke für's lesen so weit erst mal.

Gruß
Juy Juka

10.02.2011 - 02:39 Uhr

Hallo Reinhardtinho,

Gib nicht so schnell auf, es geht tasächlich.
Es enthält zwar ein paar eklige Hacks hier aber die Lösung:

  1. Schritt: Application.OpenForms hacken um an jeder Instanz von System.Windows.Forms.Form zu kommen:
  public class Hack : System.Collections.ArrayList
  {
    public void DoHack()
    {
      try
      {
        typeof(System.Collections.ReadOnlyCollectionBase).GetField("list", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(Application.OpenForms, this);
      }
      catch
      {
      }
    }
    
    public override int Add(object value)
    {
      Form f = value as Form;
      if (f != null)
      {
        // Hier kommt dann teil 2
      }
      return base.Add(value);
    }
  }
  1. Schritt: Bei jeder Form rekursiv nach allen Instanzen des zu ändernden Controls suchen

    private static IEnumerable<C> Suchen<C>(Control.ControlCollection cc)
      where C : Control
    {
      if(cc!=null)
        foreach (Control c in cc)
        {
          C re = c as C;
          if (re != null)
            yield return re;
          foreach (C reN in Suchen<C>(c.Controls))
            yield return reN;
        }
    }

  1. Wenn man alle Instanzen hat, muss man "nur noch" das Property auslesen, prüfen ob es der Standard ist und ändern
    (Beispiel mit TextBox und BorderStyle)

        IEnumerable<TextBox> alle = Suchen<TextBox>(f.Controls);
        foreach (TextBox t in alle)
        {
          if (t.BorderStyle == BorderStyle.Fixed3D)
            t.BorderStyle = BorderStyle.None;
        }

Teil 1 ist ein "dreckiger" Hack, funktioniert aber.
Teil 2 ist ziemlich normal.
Bei Teil 3 wird es halt schwierig den Standardwert zu erkennen bzw. zu erkennen, dass der Wert zu ändern ist.

Gruß
Juy Juka

PS: Ach ja, der Quellcode ist nicht 100%ig getestet, in einem anderen Szenario hab ich es so (ähnlich) aber benutzt.

31.01.2011 - 08:43 Uhr

Hallo Seikilos,

Benutze einfach den FullQualifiedName von deinem FormManager, dann kannst du das Property sicher ohne Probleme "richtig" benennen.
((Falls der FormManager im Namespace Seikilos liegen würde:))


public Seikilos.FormManager FormManager { get; private set; }

Gruß
Juy Juka

27.01.2011 - 14:41 Uhr

Hallo @All,

Danke für eure Zeit und mühe.

Besonderen Dank an Floste, da ich mich für seiner/ihrer Methode entschidene habe und es sauber und flüssig funktioniert.

Gruß
Juy Juka

25.01.2011 - 05:01 Uhr

Hallo @All,

@rasepretrep: Basis-Form vor allem abstrakt geht mal garnicht, dieses Desaster hatten wir in der letzten Version der Software. Ein Framework für die Forms (wie du es vorschlägst) ist aber schon ein angestrebtes Ziel, jedoch im nachhinein ist das aus Zeitlichen gründen nicht drin (alls ich die Form's das letzte mal gezählt habe waren es weit über 200 und das ist auch schon wieder 4 Jahre her).

@ErfinderDesRades: Vielen Danke. Wenn man normalerweise nicht so weit in die Windows-Api-Welt eintaucht (ich finde IMessageFilter ist mit dem Kopf vorran drin), sucht man sich nach solchen Konstanten dumm und dämlich.

@Floste: Wenn es jetzt noch ein Ereigniss gibt, das ausgelöst wird, wenn eine neue Form erzeugt wird, muss ich mal zum Augenarzt. 😃 😃

Danke an alle die gepostet haben und danke für eure Zeit und Hilfe.

Gruß
Juy Juka

24.01.2011 - 16:20 Uhr

Hallo @All,

Ich möchte alle Form-Objekte in meiner Anwendung mit einem neuen Icon versehen.
Das ganze klappt auch schon mit dem nachfolgenden Code, nur bin ich mir nicht sicher ob es da nicht noch bessere Wege gibt.

Ziele:

Danke erst mal für's Lesen.

Gruß
Juy Juka

Der Code:

public void Ausfuehren(string parameter)
    {
      Application.AddMessageFilter(this);
    }

    public static System.Windows.Forms.Form GetForm(System.IntPtr handle)
    {
      return handle == System.IntPtr.Zero ? null : System.Windows.Forms.Control.FromHandle(handle) as System.Windows.Forms.Form;
    }

    private static System.EventHandler shown;

    bool IMessageFilter.PreFilterMessage(ref Message m)
    {
      System.Windows.Forms.Form f;
      if (m != null)
      {
        if((f = GetForm(m.HWnd)) != null)
        {
         f.Shown += shown ?? (shown = new System.EventHandler(f_Shown));
        }
      }
      return false;
    }

    private static System.Drawing.Icon icon;
    private void f_Shown(object sender, System.EventArgs e)
    {
      Form f = sender as Form;
      if (f != null)
      {
        f.Icon = icon ?? (icon = System.Drawing.Icon.FromHandle(Properties.Resources.NeuesIcon.GetHicon()));
      }
    }
24.01.2011 - 16:12 Uhr

Hallo,

Nur weil ich den Link gerade vor einer Minute im neuen Newsletter gesehen habe:
Simplest way to implement irregular forms in .NET

Gruß
Juy Juka

24.01.2011 - 16:06 Uhr

Hallo #coder#,

Was ErfinderDesRades meint* ist, dass dies das Standard-Verhalten von Windows/.Net ist und du einfach das Kontextmenü öffnenst und dann die Pfeiltasten benutzen kannst. (Probiers ruhig direkt hier im Browser aus.)

Gruß
Juy Juka

*falls du es nicht verstanden hast, ich hätte es nicht verstanden, hätte ich es vorher nicht gewust.

19.01.2011 - 22:11 Uhr

Hallo skafoot,

Man sollte auf jeden fall mit Schnittstellen zwischen den Schichten arbeiten. In den meisten Fällen - meiner Erfahrung nach - ist es sinnvoller mit Schnittstellen zu arbeiten als ohne.

Im 3-Schichten-Model soll man immer nur auf die genau darunter liegende Schicht zugreifen. Es ist mir aber auch schon oft genug untergekommen, dass man dies einfach ignoriert und beliebig weit nach unten greifen darf.
Klar fängt man sich damit Nachteile ein (Abhänig zu jeder Schicht auf die man zugegriffen hat, als größtes Beispiel mal), aber eventuell stört das ja garnicht. Man muss es sich nur im Vorfeld überlegen.

Gruß
Juy Juka

13.01.2011 - 01:33 Uhr

Hallo @All,

Man braucht hier keine Custom-Config-Section, das kann der Designer in VisualStudio, nur wie man ihm den Typ "X[][]" beibringt ist kompliziert.

  • Normal ein Propertie in der *.settings-Datei anlegen (z.B. mit dem Typ string).
  • Die *.settings-Datei mit dem XML-Editor öffnen (im VisualStudio Projektmappenexplorer rechtsklick drauf und "Öffnen mit").
  • Im entsprechenden XML Tag des neuen Properties Type="System.String" gegen Type="System.String[][]" tauschen (bzw. den FullQualifiedName des gewünschten Typs einsetzten).
  • Speichern.

Im anhang eine Beispiel Settings.settings.

Gruß
Juy Juka

12.01.2011 - 11:48 Uhr

Hallo,

Nur zur vollständigkeit:
die BindingSource ist eine Komponente und kann von Windows-Forms-Designer erstellt und verwaltet werden.

Gruß
Juy Juka

12.01.2011 - 11:38 Uhr

Hallo inflames2k,

So sollte es sein.

Gruß
Juy Juka

12.01.2011 - 11:08 Uhr

Hallo inflames2k,

Verwendest du in dem UserControl eine BindingSource?
Die würde pro Instanz des UserControls erzeugt und könnte sich so also für jedes UserControl auf der übergeordneten Maske die Auswahl merken. Wenn du diese nicht Verwendest benutzen alle Instanzen die gleiche Liste und die Liste "merkt" sich natürlich nur eine Position. (allse nur wage geschrieben, dürfte aber ausdrücken was passiert)

Gruß
Juy Juka

12.01.2011 - 09:26 Uhr

Hallo DavidT,

Bist jetzt verwende ich den Designer der in VS2010 eingebettet ist.
Mit ein paar Tricks konnte ich bis jetzt damit noch alles in die Konfig bekommen, was nötig war.

Gruß
Juy Juka

Eine Externes Tool muss man wohl nicht auf VS2010 anpassen, sondern wohl er auf die verwendete .Net Version. Welche nutzt du?

24.12.2010 - 07:46 Uhr

Hallo @All,

Forhe Weihnachten!
Frohes Fest!
Und all die anderen Wünsche wünsch ich euch auch.

Gruß
Juy Juka

14.12.2010 - 09:24 Uhr

Hallo Skato,

Dazu brauch ich dir garnicht mehr erzählen. Einfach eine Anleitung zur Aufgabenplanung (Windows 7 oder Vista) bzw. Geplante Tasks (alle anderen Windowsversionen) suchen.
z.B.: http://www.bing.com/search?q=aufgabenplanung+windows7

Wenn du damit eine *.exe startest die dauerhaft läuft, kann man es so einstellen, dass er bei jedem Auslösen des geplanten Task/der Aufgabe überprüft ob die zuvor gestartete *.exe noch läuft und nur startet, wenn sie das nicht mehr tut. (aka. WatchDog).

Ein Beispiel für Windows 7 findest du als Screenshots, für andere Windows Versionen sieht die UI anders aus, tut aber intern das gleiche.




Gruß
Juy Juka

13.12.2010 - 14:32 Uhr

Hallo Skato, Hallo herbivore,

Wie wär's mit dem eingebauten Watchdog von Windows?
Die geplanten Tasks bzw. den Taskplane (je nach Windows Version) kann man so einstellen, dass er Programme neustartet wenn Sie nicht da sind.

Gruß
Juy Juka

07.12.2010 - 14:44 Uhr

Hallo,

Noch immer plagt mich dieses Problem. Ich komme einfach nicht weiter.

An das AppDomain-Objekt zu kommen wäre ja eigentlich schon die Lösung für mein Ursprüngliches Problem:
Der Windos Forms Designer von Visual Studio 2010 soll (für DataBinding) eine Klasse aus Assembly A in Version x.x.x.x laden, die Assembly liegt aber in Version x.x.x.y vor. Obwohl die Assembly nicht signiert ist, nicht im GAC liegt und ganz normal verfügbar ist, lädt der Designer die Assembly nicht und stürzt ab. (Siehe Bild.)

Ich will eigentlich nur meine Masken mit dem Designer weiter bearbeiten. Wenn jeman weiß wie ich ihn dazu bringen kann, wäre das auch toll, dann brauch ich auch das AppDomain-Objekt nicht mehr.
(Aber ich würd's auch gern noch mit dem AppDomain-Objekt weiter versuchen.)

Gruß
Juy Juka

06.12.2010 - 10:45 Uhr

Hallo Froggie,

Da gibt's zum Glück eine nette funktion vom VisualStudio.
Die standard/fall-back Einstellungen werden von VisualStudio mit in die DLL kompiliert (einfach mal in Settings.Designer.cs gucken) und verwendet, wenn in der App.config/Web.config nichts zu finden ist.

Gruß
Juy Juka

06.12.2010 - 10:23 Uhr

Hallo herbivore,

dann ist es ja kein Fehler. (Punkt) 🙂

Gruß
Juy Juka

06.12.2010 - 09:29 Uhr

Hallo,

Gerade habe ich unten in der Leiste mit den Aktiven Benutzern gesehen, das ich michalG zweimal angzeigt bekomme (siehe screenshot).
Ist das ein Fehler?

Gruß
Juy Juka

06.12.2010 - 09:23 Uhr

Hallo Froggie,

Eine Anwendung in .Net hat eine Konfigurationsdatei, nicht jede DLL eine eigene.
Jede DLL definiert nur eine Section (ein XML-Tag) innerhalb dieser einen Konfigurationsdatei.

Aber um zu deinem Problem zurück zu kommen: Die *.config Dateien aus den Projekten sind für die eigentliche *.exe völlig irrelevant. Du musst/sollst die Definitionen der Sections und die Sections selbst in die *.exe.config (bzw. app.config oder web.config) einfügen.

Gruß
Juy Juka

30.11.2010 - 10:14 Uhr

Hallo VBMichi,

.Net Anwendungen im allgmeinen kann man einfach durch Copy&Paste installieren.
Wenn du also nur *.dll Dateien und *.exe Dateien verwendest, die du mit Copy&Paste im Ausführungsverzeichnis einfügst, sollte alles bei installiertem .Net-Framework gehen.

Gruß
Juy Juka

29.11.2010 - 17:33 Uhr

Hallo,

Auch wenn es keine große Sache ist, es gibt ein nettes Update für JuyJuka.Reports.
Mit Version 2.1.0.0 ist es jetzt möglich "Unterproperties" von Objekten direkt anzusprechen. Damit gemeint sind Properties von Objekten die man aus Properties ausliest.


public class Kopf
{
  public List<Position> Positionen{get;set;}
}

Wollte man die Anzahl (Count) der Positionen ermitteln waren in Version 2.0.0.0 noch folgende zwei Vorlgen notwendig:


Anzahl Positionen: @REPORT(Kopf.Positionen.Count.txt,Positionen@


@Count@

Mit Version 2.1.0.0 hat es sich auf folgendes reuziert:


Anzahl Positionen: @Positionen.Count@

Vielen Dank für's lesen.

Gruß
Juy Juka

29.11.2010 - 13:50 Uhr

Hallo kelkes, Hallo @All,

Castle Windsor.
... Es drängt sich mir die Frage auf, wie man "keinen DI Container" benutzen kann...

David W hat die Antwort auf deine Frage gegeben:

Ich benutze keine Container, ich benutze nur einen ServiceLocator...

Ach ja: Wir verwenden auch kein DependencyInjection, sondern auch ServiceLocator (aka. Microkernel, Factory, AbstractFactory).

Gruß
Juy Juka

25.11.2010 - 13:37 Uhr

Hallo DNAofDeath,

Das StringDictionary scheint sich nicht/nicht gut als XML serialisieren zu lassen.
Nimm doch lieber ein Array eines selbst erstellten Typs, das ist einfacher.
"Propertie- Datei" in C#

Abwer warum brauchst du in den Settings noch mal eine Auflistung für weitere Setting? Die Settings sind doch schon eine Liste.

Gruß
Juy Juka

23.11.2010 - 08:51 Uhr

Hallo,

Um sich am AssemblyResolve-Ereigniss anzumelden gibt es eigentlich nur eine gute stelle, wenn man die *.exe selber schreibt:
Die ersten 5 Zeilen in der Main-Methode.

Schreibt man nur eine Komponente die von anderen Geladen wird, dann muss man in jeder öffentlichen Klasse einen Typinitialisierer schreiben und dort eine Methode aufrufen, die das Anmelden übernimmt (und dafür sorgt, dass man sich nur einmal anmeldet).

Gruß
Juy Juka

22.11.2010 - 15:56 Uhr

Hallo Amosius,

Dazu gibt es schon ein fertiges Programm, welches alles notwendige in deiner fertigen (normalen) Anwendung einbindet.
.Netz

Gruß
Juy Juka

19.11.2010 - 18:35 Uhr

Hallo 0815Coder,

Das ist ja gut zu wissen. 😃 Genau so was können wir hier auch gut gebrauchen. 😃

Gruß
Juy Juka

19.11.2010 - 12:22 Uhr

Hallo Diräkt,

Das ist genau das Verhalten von .Net, steht auch in der MSDN so.

Er sucht erst nach de-DE, dann nach de und schließlich nach der FallBack-Adresse (alos ohne Land/Sprache).

Gruß
Juy Juka

18.11.2010 - 15:02 Uhr

Hallo Froggie,

Hier zwei Vorschläge von mir:

  1. Setze einen Verweis von Projekt A auf "weitere Komponente".
  2. Erstell dir ein zusätzliches Projekt, das nur dazu da ist alle benötigten Komponenten zusammen zu führen (nennen wir hier bei uns immer Deployment-Projekt).

Gruß
Juy Juka

17.11.2010 - 11:27 Uhr

Hallo @All,

Ich will in einem VS2010 AddIn das AppDomain.AssemblyResolved Ereigniss behandeln.
Funktioniert für die AppDomain in die mein AddIn geladen wird auch super, jedoch verwendet (z.B.) der Windows-Forms-Designer eine andere/eigene AppDomain.

Die Frage ist also: Wie komme ich an dieses AppDomain-Objekt?

Gruß
Juy Juka

17.11.2010 - 11:05 Uhr

Hallo Xander,

Genauer hab ich darüber auch noch nicht nachgedacht, aber folgender Link ist sicher ein guter Anfang:
Richtlinien für Namen

Gruß
Juy Juka

14.11.2010 - 22:02 Uhr

Hallo serial,

Der Aufwand ist echt haarig. Das Thema ist ja auch sehr groß und wichtig.
Ohne eine verallgemeinernde Lösung, wie Microkernel/Dynamische Proxies/Aspektorientierung, wird er aber leider auch nicht weniger.

Da ich linq2sql nicht kenne, kann ich dir keinen Tipp geben, welche Technologie damit verbunden werden kann.

Gruß
Juy Juka

13.11.2010 - 23:04 Uhr

Hallo serial,

... Fasade ...

Eine Fasade hilft hier garnix, da die Fasade alles nur "hübsch zusammen fasst", aber (eigentlich) den vollen Zugriff auf die zugrundeliegenden Objekte offen lässt.
((Ich denke du meinst eher Decorator.))

Gruß
Juy Juka

12.11.2010 - 13:42 Uhr

Hallo serial,

Es ist nicht unbedingt eine bessere/schönere Lösung, aber ich wollte das es hier im Thread erwähnt ist:
Schutz-Proxy (Proxy-Pattern)

Und beim Thema Domain-Objekt + Service-Layer: Warum sollte das Domain-Objekt nicht auch eine Schutz-Proxy/-Dekorator bekommen?
Ich fände es sogar sehr elegant, wenn die Rechteverwaltung in der gesammten Software über das gleiche Konzept gelöst werden würde. Zum Beispiel könnte man so auch ein einheitliches "Framework" entwickeln, mit dem man so was in der Präsentationsschicht anzeigen kann.

Gruß
Juy Juka

11.11.2010 - 14:58 Uhr

Hallo Gandi,

Warum machst du das mit einer statischen Mehtode?
Du solltest dir hierfür lieber das Factory-Pattern (oder AbstractFactory-Pattern) ansehen.

Gruß
Juy Juka

10.11.2010 - 16:06 Uhr

Hallo MarsStein,

Man kann Properties vor der Anzeige dem Benutzer gegenüber im Designern (Forms, WebForms, etc.) mit [Browsable(false)] verstecken.
Man kann die Properties vor dem Serialisieren der Designer (siehe oben) mit [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] verstecken, was z.B. beim Forms-Designer verhindert das Quellcode zu diesem Property erstellt wird.
Man kann sogar Properties vor dem Intelisense verstecken (!!). Wie das geht weiß ich aber nicht.

Gruß
Juy Juka