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

09.05.2010 - 23:46 Uhr

Hallo Grumbler85,

Referenzielle Intergrität. Ich bekomme den genauen Lehrbuch-Text nicht mehr hin, aber sinngemäss:
Der Wert in der Fremdschlüssel-Spalte muss ein Wert aus der Primärschlüssel-Spalte sein oder NULL.

Gruß
Juy Juka

05.05.2010 - 09:53 Uhr

Hallo Sprotti,

Wenn dir die Code-Blöcke zu groß sind, solltest du den Code doch relativ einfach auslagern können in eine Hilfsklasse.
Wenn es kompliziert wird, kannst du ja Generics und Delegaten zur hilfe nehmen.

ca. so:


public class ListenHelfer
{
  public virtual bool EnthaltenBeideListenDieGleichenElemente<T>(IEnumerable<T> a, IEnumerable<T> b, Comparer<T> comparer)
  {
    return ContainsAll(a, b, comparer) && ContainsAll(b, a, comparer);
  }

  private bool ContainsAll<T>(IEnumerable<T> a, IEnumerable<T> b, Comparer<T> comparer)
  {
    bool re = true;
    foreach (T t in a)
    {
      bool found = false;
      foreach (T t2 in b)
      {
        found |= comparer(t, t2);
      }
      re &= found;
    }
    return re;
  }
}

Gruß
Juy Juka

05.05.2010 - 09:01 Uhr

Hallo Sprotti,

Für sowas kann man super die Snippets :rtfm: von VisualStudio verwenden.

Gruß
Juy Juka

04.05.2010 - 09:19 Uhr

Hallo @All,

So lange man sich im .Net Bereich bewegt sollte die Konfiguration definitiv über die App.config/Web.config erfolgen (das Konfigurations-System von .Net bietet genügen Möglichkeiten die App.config/Web.config zu strukturieren).
Alles was man zur Laufzeit ändern kann sollte die Bibliothek noch in einer eigenen Form zur Verfügung stellen (z.B. Singelton oder Properties bei den Klassendie man auß der DLL verwendet).

Würde man die DLL sich nicht selbst um ihrer Konfiguration kümmern, wäre sie nicht gut gekapselt und würde dadurch Probleme machen (bzw. mehr Wissen vom Entwickler verlangen).
Würde die DLL ihre Konfiguration aus einer anderen Quelle alls der App.config/Web.config beziehen, würde man vom bekannten Weg abweichen* und so wieder mehr Wissen vom Entwickler verlangen (das kann ja gewünscht sein, ist aber unwarscheinlich).

Gruß
Juy Juka

10.04.2010 - 22:23 Uhr

Hallo,

Wenn mich jemand bittet, dann schau ich mir einen PC garne mal an. Dafür will ich kein Geld haben (meistens drängen Sie mir dann doch noch auf 😁 ).
Und zu hause kümmere ich mich natürlich um alle PCs und das Netzwerk.

Gruß
Juy Juka

08.04.2010 - 09:46 Uhr

Hallo Bigdeak,

C# und alle anderen .Net sprachen werden in eine gemeinsame "Basis-Sprache" übersetzt die IL heißt. In einer .Net-Dll sind auch keine Binärdaten enthalten sondern dieser IL-Code, der zur Laufzeit noch mal kompiliert wird.
(siehe auch in der MSDN)

Gruß
Juy Juka

30.03.2010 - 10:53 Uhr

Hallo bigeddie,

Konstruktoren werden nicht vererbt! (Sie sind eine mischform zwischen static und NonStatic.)
Du musst die Konstruktoren in jeder Klasse neue schreiben:


public class X : BasisKlasse
{
  public X():base(){}
  public X(System.Data.DataRow dr):base(dr){}
}

Gruß
Juy Juka

PS: Mein Tipp ist es, den standard Konstruktor aus der Basis-Klasse zu entfernen und den anderen Konstruktor nur protected anzubieten, dann MUSS die abgeleitete Klasse den Konstruktor richtig aufrufen. (Besser geht meines Wissens nicht.)

24.03.2010 - 21:58 Uhr

Hallo JCDenton,

Sorry, aber mich hat es voll überkommen das gleich zu programmieren:


  // Factory für einheitlichen Zugriff auf das Loggen
  public static class LogFactory
  {
    public static ILog GetLog()
    {
      // Hier eine Microkernel-Aufruf oder das ganze über die Konfiguration zu machen wäre natürlich besser.
      return new ThreadLogDecorator<Log>();
    }
  }

  // Schnittstelle für die Log-Bibliothke
  public interface ILog
  {
    void Log(string message);
  }

  // Simple Log-Klasse, da kannst du natürlich mehr machen.
  public class Log : ILog
  {
    public virtual void Log(string message)
    {
      System.Diagnostics.Debugger.Log((int)decimal.Zero, string.Empty, message);
    }
  }

  // Decorator (Decorator-Pattern) um die Log-Funktion in einen Thread auszulagern
  public class ThreadLogDecorator<L> : ILog
    where L : ILog, new()
  {
    private static readonly object LockObjekt = new object();
    private static System.Collections.Generic.Queue<string> _Queue;

    static ThreadLogDecorator()
    {
      _Queue = new System.Collections.Generic.Queue<string>();
      // Hier ist Trick17, der Thread wird statisch gestartet
      new System.Threading.Thread(Write).Start();
    }

    private static void Write()
    {
      lock(LockObjekt)
      {
        string msg = _Queue.Dequeue();
        new L().Log(msg);
      }
    }

    public virtual void Log(string message)
    {
      lock (LockObjekt)
      {
        _Queue.Enqueue(message);
      }
    }
  }

Gruß
Juy Juka

22.03.2010 - 15:18 Uhr

Hallo herbivore, (Hallo @all,)

Auch zu den 40.000 herzlichen Glückwunsch. 😃
Wenn du dich noch ein bischen mehr beeilst, kommt man nicht mal mehr mit dem Glückwünschen nach. 😉

Gruß
Juy Juka

20.03.2010 - 21:08 Uhr

Hallo inflames2k,

weil ich nicht wüsste wie

Nur zur vollständigkeit:

  1. Projekt -> Hinzufügen -> Neues Element -> Einstellungsdatei (= Neue Section).
  2. Neue Settings-Datei öffnen.
  3. In der Typ-Spalte die ComboBox öffnen und auf Durchsuchen... clicken.
  4. In der TextBox des Dialogs den FullQualified Name der zu serialisierenden Klasse eintippen.
    (Speichern)
    Wenn man eine Auflistung (ein Array) der Klasse haben will, muss man etwas mehr aufwand treiben:
  5. *.Settings-Datei -> Rechts-Click -> Öffnen mit -> XmlEditor
  6. Den Klassen-Namen suchen und dort [] anfügen.
    (Speichern)

Gruß
Juy Juka

15.03.2010 - 14:23 Uhr

Hallo Berian,

Der Designer kann das nicht. (≤Punkt)
Warum ist das Icon eigentlich in einer anderen Bibliothek?

Gruß
Juy Juka

15.03.2010 - 14:21 Uhr

Hallo inflames2k,

Warum lässt du VisualStudio das ganze nicht machen?
Du kannst auch eigene (serialisierbare) Typen von VisualStudio in die App.config einbauen lassen.

Gruß
Juy Juka

15.03.2010 - 09:29 Uhr

Hallo shaggy3500,

Du verwendest :

summe *= Int32.Parse (eingabe);

Das ist das gleiche wie:

summe = summe * Int32.Parse (eingabe);

Und summe ist am Anfang 0, einfach mal selber rechnen:

0*(eingabe) = ?

Gruß
Juy Juka

11.03.2010 - 11:14 Uhr

Hallo herbivore,

Super klasse! Das will ich unbedingt lesen!

Gruß
Juy Juka

11.03.2010 - 11:08 Uhr

Hallo codeRaC#er,

Du meinst ich sollte einzelne BO mit INotifyPropertyChanged ausstatten und Collections davon von IBindingList<T> ableiten, oder?

Richtig. (Wobei du die Collections ja nicht mal selber schreiben musst.)

Bei deinem Beispiel würde natürlich das Event des BO ausgelöst, da ja ALLE Empfänger des Event's über die Änderung(en) informiert werden müssen (nicht nur der Empfänger, der zufällig die Änderung ausgelöst hat).
Die Liste würde davon überhaupt nicht beeinflusst, da die Liste sich ja nicht geändert hat (Reihenfolge und Anzahl der Elemente ist ja immer noch gleich).

Gruß
Juy Juka

10.03.2010 - 15:48 Uhr

Hallo HExapod4,

Versuch doch mal bindingSource.ResetBindings(false);

Gruß
Juy Juka

10.03.2010 - 15:30 Uhr

Hallo codeRaC#er,

Wenn deine Business-Objekte eine Liste darstellen, dann sollten Sie IBindingList<T> implementieren, stellen deine Objekte aber einzelne Dinge dar (z.B. Einen Benutzer, nicht eine Liste von Benutzern), dann ist INotifyPropertyChanged richtig.

Ich hab mich durch das Thema auch durch gekämpft und das wichtigste ist tatsächlich einfach nur INotifyPropertyChanged richtig zu implementieren. Das ganze dann als Liste darzustellen, kann man auch außerhalb der Klasse machen und sich dann Fertige IBindingList<T> implementationen dafür nehmen (ich lade meine sogar über einen Microkernel, damit ich sie bei bedarf austauschen kann).

Gruß
Juy Juka

07.03.2010 - 12:11 Uhr

Hallo softwareC,

Es ist in Ordnung allen Objekten die Instanz der User-Klasse zu übergeben.
Am einfachsten ist es, wenn alle Klassen ein Interface Implementieren, an dass man das User-Objekt übergeben kann.


public interface IUserRelated // besserer name wäre gut
{
  User User{get;set;}
}


public class Start
{
  private User user = new User();

  private void Login(IEnumerable<IUserRelated> liste) 
  {
    this.user.Name = "Müller";
    this.user.Vorname = "Jens";
    foreach(IUserRelated i in liste??new IUserRelated[]{})
      if(i!=null) i.User = this.user;
  }

}

Gruß
Juy Juka

07.03.2010 - 12:05 Uhr

Hallo david.ka,

Wenn die Klasse mit der Main-Methode öffentlich ist, kannst du die Main-Methode einfach aufrufen (oder in einer neuen AppDomain aufrufen).
ABER dann startet kein neuer Prozess und damit hast du ein paar Einschränkungen.

Gruß
Juy Juka

04.03.2010 - 14:52 Uhr

Hallo inflames2k,

Wie definierst du "zum Proejkt gehören" ?
Ich würde da alle Assemblies zählen, die eventuell im Projekt geladen werden könnten.

Gruß
Juy Juka

04.03.2010 - 14:47 Uhr

Hallo inflames2k,

Vorsicht AppDomain.CurrentDomain.GetAssemblies (oder so) gibt die aktuell geladenen Assemblies zurück und das sind nicht unbedingt alle Assemblies die "zum Projekt gehören".

Gruß
Juy Juka

01.03.2010 - 23:18 Uhr

Hallo Loki,

Dort sollte man das auch anwenden können. 😃

Gruß
Juy Juka

01.03.2010 - 22:50 Uhr

Hallo Loki,

Gerne geschehen. 😃
Wenn es dir nix aus macht, hätte ich gerne einen blick auf deinen Quellcode oder auf ein Diagramm von deinem Code gewerfen. Ich arbeite immer noch an einem guten UI System.

Gruß
Juy Juka

01.03.2010 - 20:08 Uhr

Hallo Loki,

Auf Reflection kannst du verzichten, wenn du dich auf eine bestimmte anzahl von Klassen/IFragen/Controls einschrenkst, aber das bischen ist normal vernachlässigbar.

Was meinst du mit GUI-Spezifisch? Das ermitteln des Controls (oder WebControls oder was auch immer für ein Objekt um die Präsentation zu bewerkstelligen) ist natürlich GUI-Spezifisch.
Für jede weitere Präsentations-Schicht (z.B. Web oder WPF) muss man dieses Verhalten noch mal implementieren (das ist da auch richtig).

Greetings
Juy Juka

01.03.2010 - 14:20 Uhr

Hallo @All, Hallo @herbivore,

Erst mal danke an herbivore und die fleisigen Helfe die das neue Feature ermöglicht haben. Ich find es gut.

Gruß
Juy Juka

01.03.2010 - 14:18 Uhr

Hallo Loki,

Man sollte es mit der allgemeingültigkeit nicht übertreiben (hab ich selber schon mal gemacht), das spart dann keine Arbeit mehr sonder verurschat welche.

Für dein Beispiel (falls ich es richtig verstanden habe) würde ich ca. wie folgt vorgehen:


public interface ITest
{
  ...
  IEnumeralbe<IFrage> FrageListe{get;}
}

public interface IFrage
{
  ...
}

public class MultipleChoiceFrage : IFrage
{
  ...
}


public interface IFrageControlPrivider<F>
  where F : IFrage
{
  Control Create(F frage);
}

public class TestForm : Form
{
   public virtual ITest Test
   {
      get{...}
      set
      {
        ...
        this.BindFragen(value.FrageListe);
      }
    }

   public virtual void BindFragen(IEnumerable<IFrage> frageListe)
   {
     this.fragePanel.Controls.Clear();
     foreach(IFrage f in frageListe)
     {
       Control c = Microkernel.Create (typeof (IFrageControlPrivider<>).MakeGenericType (f.GetType())).Create(f);
       c.Dock = DockStyle.Top;
       this.fragePanel.Controls.Add(c);
     }
   }
}

public class MultipleChoiceFrageControlPrivider : IFrageControlPrivider<MultipleChoiceFrage>
{
  public virtual Control Create(MultipleChoiceFrage frage)
  {
    GroupBox b = new GroupBox();
    b.DataBindings.Add("Text",frage,"Text");
    foreach(Choice c in frage.ChoiceListe)
    {
      CheckBox box = new CheckBox();
      box.DataBindings.Add("Checked",c,"Value");
      box.DataBindings.Add("Text",c,"Text");
      box.Dock = DockStyle.Right;
      b.Controls.Add(box);
    }
    return b;
  }
}

Nur so als Idee (nicht VS geprüft).

Gruß
Juy Juka

25.02.2010 - 13:27 Uhr

Hallo Doltsche,

Hast du einen ErrorProvider auf deiner Maske?
Der Zeigt dir die Fehler an, auch wenn du ein Steuerelment nicht mehr verlassen kannst.

Gruß
Juy Juka

24.02.2010 - 08:14 Uhr

Hallo adk,

Das könnte man über das Strategy-Pattern wenn du die Funktionen ändern willst, ansonsten bleibt dir nicht viel übrig als ein "MeinTyp"-Property einzufügen.

Gruß
Juy Juka

23.02.2010 - 16:32 Uhr

Hallo codeRaC#er,

Da gibt es sehr lange Diskusionen drüber 😃 aber du hast es schon richtig erkannt:
BL darf keine SQL-Abfragen enthalten.

Dazu gibt es zwei (mir bekannte Lösungen):

  1. QueryObject - genau wie du es beschrieben hast, mehr oder weniger komplex und mehr oder weniger viel Umfang von SQL (Beispiele: |Aisys| O/R Mapper , NHibernate, LinqToSql).

  2. Fall-Spezifische-DAL (sry, kein bessere Name): Dort wird die DAL anhand der BL aufgaben definiert. z.B.:


public interface IArtikelDatenzugriffsschicht
{
  IEnumerable<IArtikel> LadeAlleArtikel();
  IEnumerable<IArtikel> LadeAlleAktivenArtikel();
  ...
}

Gruß
Juy Juka

23.02.2010 - 16:28 Uhr

Hallo Egi,

MVC kann auch im 3-Schichten-Model eingesetzt werden, aber MVC selbst bewegt sich nur auf der Präsentationsschicht (View und Controler) und auf der Funktionsschicht (Model). Die Datenzugriffsschicht ist bei MVC ausßenvor gelassen.

Für MVVM (was du auch erwähnt hast) gilt das gleiche: ViewModel und View bewegen sich beide auf der Präsentationsschicht (nur noch mal nach Designer und Programmierer aufgeteilt) und Model (was für eine Überraschung) auf der Funktionsschicht.

Gruß
Juy Juka

23.02.2010 - 14:11 Uhr

Hallo Th69, Hallo impact,

Das Dictionary wird leider nicht richtig gebunden, aber mit einer List<KeyValuePair<string,bool>> (bzw. IList<...>) geht es.

Gruß
Juy Juka

23.02.2010 - 14:09 Uhr

Hallo Realnub,

Dazu machst du aus deiner/deinen Klassen eine Klassenbibliothek, compilierst diese und bindest immer die *.dll in deine Projekt mit ein, wenn du die Klassen benötigst. (Wo du die DLL ablegst, musst du dir natürlich überlegen.)

Gruß
Juy Juka

19.02.2010 - 09:01 Uhr

Hallo torti,

Bitte schön, kein Problem.

Gruß
Juy Juka

19.02.2010 - 09:00 Uhr

Hallo oehrle,

Lass all Table-Adaber von eiem gemeinsamen Interface oder so erben, dann kannst du eine Methode schreiben die das Interface verwendet oder generisch ist:

Gruß
Juy Juka

19.02.2010 - 08:58 Uhr

Hallo meisteralex,

Das müssten eigentlich alle gängigen Tracer können.
Ich z.B. verwende Jetbrains dotTrace (weiß aber nicht ob es bessere gibt).
Die Suchfunktion des Forum sollte dich weiter bringen.

Gruß
Juy Juka

18.02.2010 - 21:17 Uhr

Hallo torti,

Da gibt es zwei Möglichkeiten:
Wird die Form als Dialog geöffnet (ShowDialog) kannst du Form.AcceptButton einfach auf deinen Ok-Button setzten.
Wird die Form normal geöffnet (Show) kannst du die Tab-Reihenfolge so anpassen, dass der Ok-Button den Index 0 hat. (Gibt auch einen Asisstenten dafür, wenn du den Forms-Designer im VS offen hast und unter Ansicht auf "Aktivier Reihenfolge" gehst.)

Gruß
Juy Juka

17.02.2010 - 07:53 Uhr

Hallo,

@Femaref: Du hast einen Fehler im Quellcode, du musst in A Update virtual deklarieren, sonst findet in C# keine polymorphie stadt.
@KroaX: Richtig böser fehler. Objekt ist ein synonym für Instanz! Das ist ganz wichtig und darf nicht verwechselt werden. Die Klasse (oder der Typ) stellen den Bauplan dar.
@Phelio: Um dein Beispiel mal auf den Punkt zu Bringen: Die Instanz von der Klasse ClassB wird in deinem Quellcode als Instanz von ClassA behandelt. Das geht, weil ClassB von ClassA erbt. Die Instanz hat immer noch den Zustand (Attribute, Properties, etc.) und das Verahlten (Methoden, etc.) von ClassB, der "Client"-Quellcode erwaretet jedoch nur das Verhalten und den Zustand eines ClassA Objektes, weshalb auch nichts anderes erwartet (also von Intelisense vorgeschlagen und vom Compiler aktzeptiert). Das da jetzt noch mehr drin steckt interesiert den "Client"-Quellcode nicht, ist also Gekapselt bzw. Geheimgehalten.

Noch Fragen?

Gruß
Juy Juka

[EDIT]Ach nö, herbivore war schneller als ich.[/EDIT]

16.02.2010 - 16:30 Uhr

Hallo serial,

Peter Bucher's idee ist gut, funktioniert aber nur, so lange man eine definierte Menge von Sortier möglichkeiten hat, so dass man diese nach Außen veröffentlichen kann.
Hat man das nicht (scheint bei serial so zu sein) oder will flexibel sein, muss man etwas anderes finden.

Das Problem ist ziemlich Tiefgehend (ich bin kein Linq-Experte, daher hoffe ich mal, dass ich alles richtig beschreibe):

Filterung (WHERE) und Sortierung (ORDER BY) werden von Linq im Code definiert, jedoch an den Server übermittelt, wodurch Daten nicht geladen werden müssen und nich im speicher sortiert werden.
Um diese Informationen aber an den Server zu übermitteln benötigt Linq die Klassen und die Datenbank-Struktur.
Mit Interfaces habe ich jedoch die Klassen-Struktur ja nicht mehr (oder nur noch Verschleiert).

Die Preisfrage: Wie bringt man Linq bei die Interface-Struktur zu verstehen, oder wie umgeht man das ganze.

Gruß
Juy Juka

15.02.2010 - 15:01 Uhr

Hallo herbivore,

Wie wäre es hier:


public virtual void PrintInventory(IEnumerable<IInventory> inventory)
{
 ...
}

Oder hier:


public interface IBag
{
  public IEnumerable<IInventory> Inventory;
}

Also mir fallen sofort Beispiele ein.

Gruß
Juy Juka

10.02.2010 - 12:33 Uhr

Hallo jogibear9988,

Also die Klasse, die die AddIn-Beschreibung implementiert weiß, welche weiter Klasse (die das AddIn ist) zu ihr gehört.

Wenn du es im QuellCode Lesen willst kannst du auch Generics Verwenden:


public interface IAddInBeschreibung<A>
  where A : IAddIn
{
  string Name{get;}
  IAddIn CreateInstanz();
  ...
}

public interface IAddIn
{
  ...
} 

Aber das mit dem Attribut ist auch nicht schlecht (auf jeden Fall besser als ein Statischer-Member)

Gruß
Juy Juka

09.02.2010 - 22:07 Uhr

Hallo jogibear9988,

Wie stellst du dir vor in einer Klasse ein Interface mehrfach zu implementieren?

Ein Interface kann ja nicht alleine raus gegeben werden, es muss in einer Assembly stecken, allso können es auch zwei sein.

Gruß
Juy Juka

09.02.2010 - 20:53 Uhr

Hallo jogibear9988,

Wie wäre es, wenn due AddIn und AddInBeschreibung in zwei Schnittstellen aufteilst und nur nach der Beschreibung suchts:


public interface IAddInBeschreibung
{
  string Name{get;}
  IAddIn CreateInstanz();
  ...
}

public interface IAddIn
{
  ...
}

Gruß
Juy Juka

09.02.2010 - 08:38 Uhr

Hallo Xynratron,

Das mit IComparable ist schön und gut, aber bei BindingList geht es nicht um das vergleichen des gesamten Objekts, sondern speziell um eine Property.
Wir müssen hier ja nicht so tun als ob es um irgend etwas hoch theoretisches geht: Es geht um den DataGridView (und Co.) und dass dieser nach einer Spalte sortiert werden soll wenn man oben drauf klickt.
=> Man braucht eine BindingList, die die einzelenen Properties auslesen kann. Wenn dann der inhalt des Properties nicht ICompareable ist, muss man sich überlegen was zu tun ist. (Abstürzen find ich nicht so prickelnd zum Beispiel).

Gruß
Juy Juka

08.02.2010 - 15:38 Uhr

Hallo Tarion,

Danke für deinen Link. Ich war leider ziemlich lange nicht auf mychshapr und kann es mir erst jetzt angucken.

Gruß
Juy Juka

01.01.2010 - 00:04 Uhr

Frohes neues Jahr!

Gruß
Juy Juka

24.12.2009 - 00:09 Uhr

Hallo @All,

Frohe Weihnachten!

Gruß
Juy Juka

24.12.2009 - 00:07 Uhr

Hallo Leute,

Was besser ist, wurde ja offensichtlich geklärt, nur zur Vollständigkeit poste ich mal die Entsprechenden Microsoft-Links. Da steht zwar nicht warum Microsoft das empfiehlt aber Microsoft empfiehlt das gleiche:
Namen von Namespaces
Namen von Assemblys und DLLs

Meisteralex.CustomersAndProducts.Customer, Meisteralex.CustomersAndProducts
Meisteralex.CustomersAndProducts.Produkt, Meisteralex.CustomersAndProducts
Meisteralex.CustomersAndProducts.Wpf.CustomerViewModel, Meisteralex.CustomersAndProducts.Wpf
Meisteralex.CustomersAndProducts.Wpf.ProduktViewModel, Meisteralex.CustomersAndProducts.Wpf

Warum kommen so coole Themen immer auf, wenn ich mal einen Tag nicht im Forum gucke?

Gruß
Juy Juka

14.12.2009 - 13:59 Uhr

Hallo joola,

Das hatte BerndFfm schon in seinem Post beachtet/beschrieben. Hier aber noch mal eine etwas verbesserte Variant:


while(str!=null && str.Contains("  ") /* zwei Leerzeichen */)
{
  str = str.Replace("  " /* zwei Leerzeichen */, " ");
}
str = str.Replace(" ", Environment.NewLine);

Gruß
Juy Juka

12.12.2009 - 16:20 Uhr

Hallo Leute,

Weiß zufällig jemand, wie ich OpenOffice 3 Calc dazu bringe die Umrandung meiner Zellen zu drucken?
Ich habes schon über Format->Seite->Tabelle->Tabellengitter, über den Umrandung-Toolstrip-Button und über Rechtsklick->Zellen Formatieren->Umrandung versucht.

Ein paar der Zellen sind gefüllt, die meisten leer aber bei keiner wird ein Rahmen gedurck!

Ich beenden den Post lieber schnell weil ich sowas von auf 180 bin, dass ich am liebsten hier herrum fluchen würde.

Gruß
Juy Juka

10.12.2009 - 12:01 Uhr

Halo sth_Weird,

Warum läuft deine Konfiguration einen Umweg über die UI?

Normal liegt die Konfiguration in der *.exe.config Datei und wird über ConfigurationManager/Properties.Settings/etc. aus jeder Schicht direkt verarbeitet.
D.h. Die Datenzugriffsschicht/Datenquelle greift direkt auf die Konfiguration zu.

Wenn man möchte setzt man noch eine eigene UI auf die Konfiguration auf, damit man nicht im blanken XML herum arbeiten muss (diese UI muss dann natürlich dynamisch in der Anwendung geladen werden und das hab ich in meinem ersten Post beschrieben).

Gruß
Juy Juka