Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von LaTino
Thema: Entwicklungsumgebung für AutoCAD
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von weismat
Bei Rakuten wäre ich vorsichtig.

Ich auch, aber mehr aus so einem unwohlen Bauchgefühl heraus. Hast du da Konkreteres?

LaTino

Thema: Entwicklungsumgebung für AutoCAD
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Taipi88
@Latino - woher willst du das denn wissen? Sobald in dem Unternehmen mehr als 1 Mio Umsatz erwirtschaftet wird (oder eher uninteressant 250 PC's eingesetzt werden) wäre die Firma ja nach Lizenzbedingung ein Unternehmen und entsprechend verpflichtet zu kaufen.

Nein, verstehst du richtig. Ich hatte wohl mehr reingelesen, als drin stand, und es so verstanden, dass die Firma aus zwei Entwicklern besteht, die Plugins entwickeln, und das war's. Steht natürlich so nicht da :).

@pinki: mit meinem sehr begrenzten Wissen: da es in Deutschland ein paar gerichtliche Entscheidungen in der Richtung gab, ist es möglich, Lizenzen zu erwerben und anderen zur Nutzung zu überlassen, auch wenn die anderen die ursprünglichen Lizenzbedingungen nicht erfüllen. Man kann sich also ein paar tausend Lizenzen in einem sehr günstigen Modell besorgen und die mit geringerem Aufschlag gegen eine Gebühr anderen zur Nutzung überlassen (daher: Überlassungsgebühr). Eigentümer der Lizenz bleibt der Erwerber.

Vermutlich würde sich jemand, der eine juristische Ausbildung genossen hat, über meine Erklärung scheckig lachen, aber das ist in etwa, was da passiert. Soweit ich weiß, hat man ggü der vollen Lizenz eben ein paar Nachteile, bezahlt dafür aber auch weniger. Wer das genau wissen will, sollte auf jeden Fall jemanden fragen, der sich damit auskennt.

LaTino

Thema: Entwicklungsumgebung für AutoCAD
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Man muss schon genauer hinschaun. Die 180 Euro sind eine Überlassungsgebühr, kein Kaufpreis.

Im übrigen könnt ihr die Community Edition nehmen, die kostet genau gar nix und darf in dem von dir beschriebenen Szenario eingesetzt werden.

LaTino

Thema: Dynamisch erzeugte Tabs mit Daten befüllen
Am im Forum: GUI: Windows-Forms


var firstTabPage = tabControl1.TabPages[0];
var secondTabPage = tabControl1.TabPages[1];

Thema: Was ist CORS, wie funktioniert es und welchen Vorteil bringt es?
Am im Forum: Web-Technologien

Zitat
@mfe: Gegen XSS war das nicht gedacht wenn ich mich recht entsinne...

Nein. Wer Schadcode auf eine Webseite schleusen kann, kriegt auch einen Server aufgesetzt, der mit scheinbar korrektem CORS-Header antwortet.

LaTino

Thema: Konstruktor überladen - das effizienteste Vorgehen für meine App?
Am im Forum: Grundlagen von C#

war am tablet geschrieben, daher die von th69 zu Recht bemängelten Stellen...sry.

LaTino

Thema: Konstruktor überladen - das effizienteste Vorgehen für meine App?
Am im Forum: Grundlagen von C#

Zitat von GeneVorph
Hallo MarsStein,
vielen Dank für deine Antwort - das bringt mich jetzt eine ganze Ecke weiter!

Zunächstmal: das mit dem Single Responsibility-Prinzip saß mir die ganze Zeit schon im Nacken! Ich hatte genau diese Frage hier schon mal gepostet, bezüglich dessen, ob ich eine Form für 2 Aufgaben nutzen kann, wenn sie von der GUI her genau gleich daherkommt, lediglich einmal für das Editieren und einmal für das Neuerstellen benutzt wird.

Als Denkanstoß:


interface IModifySchoolClassPresenter
{
     public string AcceptButtonText { get; }
     public string InfoText { get; }
}
abstract class SchoolClassPresenterBase : INotifyPropertyChanged
{
     public string AcceptButtonText { get; protected set;}
     public string InfoText { get; protected set;}

    //INPC implementieren und hierfür anwenden:
     public string ShortName { get; set; }
     public string Leader { get; set; }
     public string PartnerClass { get; set; }

    protected abstract void OnSubmit();
}

class EditSchoolClassPresenter : SchoolClassPresenterBase
{
    public EditSchoolClassPresenter() 
    {
        AcceptButtonText = "Bearbeiten";
        Infotext = "Bearbeiten Sie die Klasse und klicken Sie dann auf \"Bearbeiten\"";
    }
}

class CreateSchoolClassPresenter : SchoolClassPresenterBase
{
    public CreateSchoolClassPresenter() 
    {
        AcceptButtonText = "Erstellen";
        Infotext = "Füllen Sie die Felder aus und bestätigen Sie die neue Klasse";
    }
}

//MainForm

private void CreateOrEdit()
{
   var presenter = create 
        ? new CreateSchoolClassPresenter() 
        : new EditSchoolClassPresenter(selectedSchoolClass);

    var dialog = new CreateOrEditDialog(presenter);
    if(DialogResult.Ok = dialog.ShowDialog()) presenter.OnSubmit();
}
Nur ganz grob, das wird hinten und vorn noch nicht funktionieren. Der Punkt ist einfach: abhängig vom Anwendungsfall übergibt man einfach einen leicht unterschiedlichen Presenter und kann dieselbe Form wieder verwenden. (Du könntest mit einem dritten Presenter dieselbe Form benutzen, um eine eventuelle Löschung noch einmal überprüfen zu lassen, zum Beispiel)

Das geht aber nur, wenn die Form nichts von ihrer Bedeutung weiß: Single Responsibility (nämlich, Daten darstellen und eine User-Aktion entgegennehmen). DRY hat damit gar nichts zu tun, und die zwei Prinzipien widersprechen sich auch nicht.

Die Datenbindungen kannst du dir übrigens im Designer zusammenklicken. Insgesamt dürfte sehr, sehr wenig wirkliche Programmierarbeit nötig sein.

LaTino

Thema: Konstruktor überladen - das effizienteste Vorgehen für meine App?
Am im Forum: Grundlagen von C#

Vorab: bitte enums nicht Enumerable nennen, auch wenn es das bedeutet. Enumerable ist in .net wieder was anderes.

Zum zweiten: du überlässt der Form (classNewOrEdit) der Kontrolle über ihren Zustand. Der ist aber Anwendungslogik: wird gerade editiert oder neu erstellt, und wenn editiert, was wird editiert?

Trenn das sauber auf ( [Artikel] Drei-Schichten-Architektur ) und dein Problem erledigt sich ganz von alleine.

LaTino

Thema: String Kette auswerten und Teile in Hexadezimal umrechnen
Am im Forum: Grundlagen von C#

Ist bei mir Schritt eins.

Ich würde dann aber lieber die richtige Regex nehmen und ohne replace arbeiten:


matchStrings = Regex.Matches(example, @"<.+?>|.+?").OfType<Match>().Select(p => p.Value);

LaTino

Thema: String Kette auswerten und Teile in Hexadezimal umrechnen
Am im Forum: Grundlagen von C#

1. falsches Forum :)

2.


//Pseudocode
1. Trenne Zeile auf in Bestandteile, die in <> stehen, und alle anderen Bestandteile
2. Erstelle eine Liste aus diesen Bestandteilen
3. für jedes Listenelement
3.1. steht es in <> ? 
3.1.1 ja - endet der Wert auf d? 
3.1.1.1 ja - nimm den Bestandteil vor dem d, interpretiere ihn dezimal, und rechne in Hex um
3.1.1.2 nein - interpretiere den Wert anhand einer Tabelle von Steuerzeichen (ESC = 0x1B, CR = 0x0D)
3.1.2 nein - interpretiere den Wert als ASCII und suche den hex-Wert
3.2 packe das Ergebnis in eine Ergebnisliste vom Typ byte[]
4. Gib das Byte-Array als Ergebnis aus.

LaTino

Thema: PrintDocument - Drucken, TabStopp bei Linebreak berücksichtigen
Am im Forum: Rund um die Programmierung

Du bist mit MeasureString schon auf der richtigen Fährte. Berechne die zu erwartende gerenderte Länge inkl. Tabs und umbrich[1] den Text so lange, bis die Länge nicht mehr zu lang ist.

Anders wird's nichts, weil die Breite eines Tabs - ebenso wie die Breite der Schrift - von der Schriftart abhängig ist.

LaTino
[1] Partizip II von umbrechen i.S.v. "Text umbrechen" ist übrigens "umbrochen", nicht "umgebrochen" - letzteres würde man mit einem Feld machen. Deutsches Sprach, schweres Sprach ;).

Thema: [erklärt] IIS HTTP Compression dynamic und static gleichzeitig aktiv
Am im Forum: Web-Technologien

Du missverstehst da was. Der IIS unterscheidet bei den Compression-Options zwischen static files und dynamic content. Das sind zwei paar Schuhe, die friedlich beide nebeneinander laufen können.

LaTino

Thema: XML Deserialisierung: Wie Null Reference Exception verhindern ?
Am im Forum: Datentechnologien

Zitat von micha0827
Vielleicht bei der Deserialisierung dem entsprechenden Feld einen leeren Wert zuweisen wenn in der XML Datei kein Wert vorhanden ist ?

Andersrum wird ein Schuh draus. Du könntest im Schema zum XML festlegen, dass die Werte nicht null (== vorhanden) sein müssen.

LaTino

Thema: Wie kann ich alle aktiven StopWatches zählen?
Am im Forum: Grundlagen von C#

Wenn du einen Überblick über alle Instanzen eines Objekts haben willst, musst du dir eine Liste aller Instanzen eines Objekts anlegen. Eigentlich logisch ;).


class Example
{
    private List<Stopwatch> _stopwatches = new List<Stopwatch>();
    

    private Stopwatch StartNewStopwatch()
    {
        var result = Stopwatch.StartNew();
        _stopwatches.Add(result);
        return result;
    }

    private IEnumerable<TimeSpan> GetAllElapsed() => _stopwatches.Select(p => p.Elapsed);
}

Im Prinzip braucht man aber nie mehr als eine Stopuhr. Was du tust, ist jemand, der zu einem 100-Meter-Lauf, einem 200-Meter-Lauf und einem 400-Meter-Lauf drei verschiedne Stoppuhren mitbringt.

LaTino

Thema: Zähler in einer Funktion möglich?
Am im Forum: Grundlagen von C#

Wie emuuu sagt: das Zählen, wie oft die Methode aufgerufen wird, gehört nicht in die deklarierende Klasse, sondern in den aufrufenden Kontext.

Kurz gesagt, MaWo80: zähl dort hoch, wo die Methode aufgerufen wird, und nicht in der Methode.

LaTino

(Und da wir in .NET und nicht in TurboPascal sind, würd' ich es per Event machen...)


class Example
{
    public void ExampleMethod()
    {
        OnExampleMethodCalled();
        DoStuff();
    }

    private void DoStuff() => Console.WriteLine("Hello, world.");
    public event EventHandler ExampleMethodCalled;
    private void OnExampleMethodCalled() => ExampleMethodCalled?.Invoke(this, EventArgs.Empty);
}

class Program
{
    public static void Main()
    {
        int counter = 0;

        var example = new Example();
        example.ExampleMethodCalled += (s, e) => counter++;

        while (counter < 10) example.ExampleMethod();
    }
}

Thema: .NET Core - .NET Standard - ASP.NET Core nun in 2.0 verfügbar
Am im Forum: Szenenews

Testweise einige Services auf den Pi3 (win-arm) umgezogen...funktioniert super. Langsam wird's brauchbarer :).

LaTino

Thema: Schnelle Konvertierung von Grayscale zu RGB (WPF)
Am im Forum: Grafik und Sound

Das erklärt noch nicht, wozu du ein 24Bit-Bild brauchst. Was hindert dich denn, mit Graustufen zu arbeiten, anstatt das umständlich umzurechnen?

LaTino

Thema: Achsenbeschriftung beim Chart fehlerhaft (Minimum & Maximum-Werte bringen Fehler)
Am im Forum: GUI: Windows-Forms

Niemals Felder als public kennzeichnen, das ist ganz schlechter Stil. Ich sehe hier auch gar keine Notwendigkeit, sie überhaupt öffentlich zugreifbar zu machen.


private double _xMin;
private double _xMax;

[Artikel] C#: Richtlinien für die Namensvergabe beachten, du tust uns beim Lesen, und dir selbst, wenn du in einem halben Jahr das Projekt nochmal durchschaust, einen großen Gefallen.

Zweitens: der Codebehind einer Form ist _ausschließlich_ zur Implementierung von Oberflächenlogik gedacht. Man könnte zwar bei dem von dir geposteten Code argumentieren, dass das alles tatsächlich noch UI ist, aber ich habe da so meine Zweifel, dass das auch beim kompletten Code so ist.

LaTino

Thema: Nach Update auf jQuery 3.1.1 werden Javascript-Fehler geworfen
Am im Forum: Web-Technologien

Die zitierte Stelle ist nicht die Stelle, wo der Fehler verursacht wird, sondern nur die Stelle, wo er ausgegeben wird. Grab also mal ein bisschen in der js-Console, dann solltest du den Verursacher finden.

LaTino

Thema: Xml Struktur Konvertierung zu neuer Xml-Datei mit gleicher Struktur
Am im Forum: Datentechnologien

Du missverstehst. Das sind nicht zwei Varianten, wie man dein Problem verstehen könnte, sondern zwei Lösungen zu deinem Problem.

XPath lernen
Alle Elemente ermitteln
Element per Pfad auswählen

Das müsste dann alles sein, was du brauchst.

LaTino

Thema: Wie kann ich Code in Methoden auslagern und Variablen effizienter nutzen?
Am im Forum: Code-Reviews

Ich nehm mal willkürlich ein paar Kritikpunkte heraus.

Zum einen ist diese exzessive Benutzung von Codebehind tödlich. Code-Behind dient - im besten Fall -
zur Steuerung von UI-Logik: wenn eine Taste in Textbox xy gedrückt wird, ändere deren Hintergrundfarbe auf rot. Solche oder ähnliche Sachen.
Du allerdings hast da fröhlich deine Anwendungslogik verteilt. Auch in WinForms sollte aber nach Möglichkeit ein Schichtenmodell verwendet werden: [Artikel] Drei-Schichten-Architektur

Das zieht gleich Kritikpunkt zwei nach sich. Lerne, was Databinding ist, und benutze es. Du sparst dir schätzungsweise 50% deines Spaghetticodes. Kein Mensch füllt Daten einer Oberfläche von Hand, wenn er seine geistige Gesundheit länger behalten möchte.

Soweit Kritik zur Struktur. Zu Inhalt und Form:

a) [Artikel] C#: Richtlinien für die Namensvergabe
b) du baust öfter mal eine Zeichenkette zusammen und führst dafür teilweise 3-4 temporäre Hilfsvariablen ein. Dabei benutzt du auch noch diese grässliche Angewohnheit aus der Java-Welt, Zeichenketten mit Hilfe von leeren Strings zu verketten. Vielleicht sehe nur ich das so, aber ich finde diese Notation schon mehr als hässlich.

Schau dir mal string.Format oder (ab Visual Studio 2017) Zeichenketteninterpolation an:

Du:


string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string pdir = appdata + "" + "\\Opera Software\\Opera Stable\\Profile";
bool exists = System.IO.Directory.Exists(pdir);

if (exists)
Die Variable maindir wird nie benutzt. (Übrigens: Namensvergabe. Wofür steht pDir? Clean Code, Leute.)

string.format:


var profileDir = string.Format(@"{0}\Opera Software\Opera Stable\Profile", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
if (Directory.Exists(profileDir))

string interpolation:


var profileDir = $@"{Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\Opera Software\Opera Stable\Profile";

if (Directory.Exists(profileDir))

Lass den Code reden. if(Directory.Exists(directoryName)) ist viel deutlicher als if(exists). Schieb nur in Fällen, wo es der Übersicht dient, Werte in zusätzliche Variable.

c) Deine catches machen IMMER ein Console.Write(). Wenn du Ausnahmen nicht behandeln möchtest, dann fang sie auch nicht. Und wieso Console.Write in einem WinForms-Program irgendwie nicht so sinnvoll ist, sollte auf der Hand liegen. Die einzige Stelle, wo du nicht Console.Write in einem catch machst, ist ein leerer catch, und der ist noch übler.

d) alle Code-Behind-Methoden geben dir einen Sender mit. Es ist eine Unart, die zu ignorieren und stattdessen auf benannten Controls zu arbeiten: immerhin kannst du das nur weil du als Programmierer in dem Moment weisst, dass dies die richtigen Controls sind. Andere Programmierer - auch du selbst, in der Zukunft - haben dieses Wissen nicht und laufen unnötig in Schwierigkeiten, deinen Code nachzuvollziehen.

e)


if (rbStable.Checked == true)

Nein. [Tipp] Anfängerhinweis == true / == false

Die Prozess-Starterei sieht auch seltsam aus - hab' ich mir jetzt aber nicht näher angeschaut, vielleicht möchte das jemand anderes tun.

Alles in allem für den ersten Versuch nicht so übel, wie mein Posting klingt. Dennoch stark verbesserungswürdig. Ich müsste mich sehr täuschen, wenn man dieselbe Funktion nicht mit <100 Zeilen Code hinkriegen könnte.

Grüße,

LaTino

Thema: Xml Struktur Konvertierung zu neuer Xml-Datei mit gleicher Struktur
Am im Forum: Datentechnologien

Das leere Protokoll gibt also die Umformung vor, nach der die Daten in das Endprodukt umgeformt werden[1]. Was ich machen würde, wäre, mit einer xsl-Transformation das leere Protokoll in ein XSL umzuwandeln, und das dann auf die ursprünglichen Daten loszulassen. Aber vermutlich nur, um zu sehen, ob das geht.

Die pragmatischere Variante ist, alle Elemente im leeren Protokoll durchzugehen, und mit Hilfe ihres XPaths den Wert aus den Input-Daten auszulesen und im leeren Protkoll einzutragen. Am Ende hat man dann ein Dokument in der Form des leeren Protokolls, mit den Daten aus dem Input.

Das sind so die zwei Möglichkeiten, die mir einfallen.

LaTino
[1] klingt irgendwie, als hätte der Erfinder des Vorgangs XML in der Abendschule gelernt. Nichts gegen Abendschulen.

Thema: Xml Struktur Konvertierung zu neuer Xml-Datei mit gleicher Struktur
Am im Forum: Datentechnologien

Zitat von NiclasPreski
Es kann Leider kein XSL benutzt werden. Nicht weil ich dies nicht Realisiert hätte, sondern da der Anwender Immer eine XML Datei erstellt. Gibt es noch Vorschläge zur Lösung nur über XML?

Sorry, aber die Antwort ergibt nicht so richtig Sinn. Ein XSL ist eine Vorschrift, mit deren Hilfe man aus vorliegenden XML-Daten bestimmte Werte extrahiert und in einer anderen Form zusammenstellt. Man kann also auch aus vorliegenden XML-Daten (Messdaten) eine neue XML-Datei (Protokoll) erzeugen.

Das klingt schon genau so, als sei es dein Anwendungsfall.

LaTino

Thema: SelectedItem-Property einer Combobox an die Property meines ausgewählen Objekts binden
Am im Forum: GUI: WPF und XAML

Was MrSparkle meint:
Implementierungen von GetHashCode() sollten für die gesamte Lebenszeit eines Objekts dasselbe Ergebnis liefern, unabhängig von seinem Inhalt. Du hast die Methode quasi missbraucht, damit eine andere Mechanik (das Binding) schnell funktioniert. Falsche Herangehensweise.

LaTino

Thema: Umwandlung nach Schwarz-Weiss bringt auch farbige Pixel
Am im Forum: Grafik und Sound

Zitat von MrSparkle
@LaTino: Die Grauwerte werden sicherlich durch deinen Image Viewer erzeugt. Bei mir sind die Pixel entweder schwarz, weiß, rot, grün, blau, cyan oder gelb :)

Whoops, da hast du sowas von Recht. Auch wegen des Schwellwerts (dass man keinen angeben kann, wenn man einfach 'ne 1Bit-Palette setzt), weshalb der vollständige Code eben noch die Transformation mittels ColorMatrix vorweg hat. Ich benutz das für die Optimierung von erzeugten QR-Barcodes, die als 32Bit-PNG mit Skalierung hier ankommen.


LaTino

Thema: Daten aus ByteArray aus anderer Klasse in Label einfügen
Am im Forum: GUI: Windows-Forms

Dass du eine Exception bekommst könnte jetzt daran liegen, dass du IMMER eine Exception wirfst. Nur so ein Verdacht.


 private void ExtMethode_OnNewData(object sender, byte[] data)
 {
    lbl_DevTime.Text = System.Text.Encoding.UTF8.GetString(data);
    throw new NotImplementedException(); //bee-doo bee-doo bee-doo!
}

Ansonsten würde ich meinen Zeigefinger ein wenig erheben und damit auf das Wort "Databinding" zeigen. Soll heissen: mach es doch bitte gleich richtig.

LaTino

Thema: Umwandlung nach Schwarz-Weiss bringt auch farbige Pixel
Am im Forum: Grafik und Sound

Der Code, den du gepostet hast, produziert nur schwarz oder weiß. Das Bild, das du gepostet hast, enthält (mal von den Artefakten abgesehen, die dich stören) auch Graustufen, also Informationen, die in den Bilddaten nicht vorkommen. Dein Problem liegt also nicht an den Bilddaten, sondern an der Art und Weise, wie du sie darstellst (nämlich mit weichgezeichneten Übergängen: das geht mit ausschließlich schwarz und weiß nicht).

Der Punkt, an dem es bei dir hängt, ist der hier:


newBitmap.Clone(new RectangleF(0.0f, 0.0f, bm.Width, bm.Height), PixelFormat.Format1bppIndexed);
, dh du solltest die benutzte Palette auf die Farben einschränken, die du darzustellen gedenkst.

Ich persönlich finde ja den Umgang mit Colormatrix schöner als den Marshal-Voodoo, den du da veranstaltest; ich würde auch kaum Performanceunterschiede erwarten, aber das musst du wissen.

LaTino

Thema: Wie lade ich ein Bild richtig in die Picturebox?
Am im Forum: Grafik und Sound

Also entweder entfernt WinForms jetzt schon automatisch Personen aus dem Vordergrund eines Bildes - vermutlich eine neue Datenschutzinitiative! - oder was eigentlich passiert, ist: das Bild ist zu groß für die PictureBox und wird nicht skaliert, und deshalb ist nur ein Teil des Bildes zu sehen, und DER zeigt "Gestrüpp".

Wenn es das ist - wir können da mangels Beschreibung nur raten - spiel mal mit der "SizeMode"-Eigenschaft deiner PictureBox rum. "StretchImage" sollte tun, was du möchtest. WENN ich richtig geraten habe und das dein Problem ist.

LaTino

Thema: Base64 enkodierte Datenfelder aus Xml-Datei speichern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Was zum Teufel treibst du da eigentlich?

Ist dir klar, dass du das Dokument zweimal öffnest und mit verschiedenen Methoden beackerst, wovon die eine einfach mal copy&paste ist, ohne verstanden zu haben, was da passiert?

Um dein Problem zu lösen, solltest du dich erst einmal auf eine Methode festlegen. Dann sehen wir weiter.

LaTino

Thema: Fehlermeldung bei APS.NET WebForms wegen Kommentar
Am im Forum: Web-Technologien

Zitat von MrChangeLog
Zitat von Abt
PS: Du weißt, dass WebForms nicht mehr weiterentwickelt wird und bereits seit 3 Jahren abgekündigt ist?

Nochmal dazu: ich kann irgendwie nirgends etwas finden, dass deine Aussage bestätigen würde. :baby:

Das ist eine hässliche Marotte von Microsoft. Produkte werden still und heimlich beerdigt. Hat auch 'ne Weile gebraucht, um mitzubekommen, dass Silverlight tot ist.

LaTino