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: SVG einbinden, verschiedene Größen
Am im Forum: GUI: Windows-Forms

Es gibt direkt svg2xaml-Konverter. Die Möglichkeit, die Grafik direkt im View zu zeichnen, finde ich schon recht cool bei WPF. Abgesehen davon schau ich mir das morgen nochmal an, lässt mir keine ruhe.die lib sollte so Probleme nicht haben.

LaTino

Thema: Ohne Reflektion, this Parameter übergeben und (z.B. aus Variablenname) eine ID generieren
Am im Forum: Grundlagen von C#

Wait, what? Du überlädst den binären oder-Operator so, dass er sich nicht mehr wie ein binärer oder-Operator verhält?

Na, was soll dabei schon schiefgehen.

Zur eigentlichen Frage: was du da machst, erreicht man sauber und ohne Aufwand mit Events.

LaTino

Thema: SVG einbinden, verschiedene Größen
Am im Forum: GUI: Windows-Forms

Wir reden aneinander vorbei, oder?

- finde heraus, wieviel Platz dir in der Picturebox für dein Bild zur Verfügung steht (Hint: es ist NICHT PictureBox.Width/Height)
- rendere das SVG mit Hilfe von Draw() in dieser Größe
- setze die Quelle des Bildes der picBox auf den Output von Draw()

Ist jetzt nicht direkt Raketenwissenschaft ;)

LaTino
EDIT: Anhang.

Thema: SVG einbinden, verschiedene Größen
Am im Forum: GUI: Windows-Forms

Nein, ist richtig. Vorher möchte man das SVG noch in einer möglichst passenden Größe rendern, darum geht es. Ansonsten müsste man das gerenderte Bild skalieren, und dabei geht der einzige Vorteil von SVG flöten.

LaTino

Thema: SVG einbinden, verschiedene Größen
Am im Forum: GUI: Windows-Forms

Wenn ich mich richtig erinnere, zum skalieren einfach vor dem rendern width und height des svgdocument-objekts anpassen.

LaTino

Thema: Nur separierendes Komma ersetzen, nicht den Dezimaltrenner
Am im Forum: Grundlagen von C#

Das wiederum entspricht nicht den Anforderungen, dass Kommas nicht in den Werten ersetzt werden sollen.

@TE: Hier, das Werkzeug deiner Wahl: Regex.Replace()

...und hier ein Hilfsmittel zum Ausprobieren: RegEx 101

Damit hast du alle Tools, die du brauchst.

LaTino
EDIT: für den Fall, dass wirklich ALLE Werte IMMER in Anführungszeichen stehen, geht auch die Variante von ThomasE, aber nach meiner Erfahrung kann man sich da nicht drauf verlassen.

Thema: Daten in CSV Format speichern bzw einlesen?
Am im Forum: Grundlagen von C#

Zitat von Sir Rufo
Und das Gespräch über diese fehlerhafte XML-Datei war vergleichbar mit YouTube: The Expert

Mwaha, den kannte ich noch nicht. Wird jetzt wohl in den Büros rumgehen ;). Danke!

LaTino

Thema: Daten in CSV Format speichern bzw einlesen?
Am im Forum: Grundlagen von C#

Du bist ziemlich schnell auf deiner Insel der Eingeschnappten, kann das sein?

Es ist zu spät, mit richtiger Serialisierung zu beginnen, weil du schon mitten im CSV-Frickeln bist. Das ist ein Fakt, oder etwa nicht? Und ich wage mich nicht zu weit auf's Glatteis, wenn ich vorhersage, dass dich das in Schwierigkeiten bringt, sobald du versuchst, mit XML zu arbeiten. Das ist schade, weil's dich beim Lernen frustrieren wird, aber jetzt nun einmal nicht mehr zu ändern. Es sei denn natürlich, du hättest eine Zeitmaschine.

LaTino
(EDIT: und wirklich, du solltest etwas abgeklärter sein und nicht alles sofort auf deine Person beziehen.)

Thema: Daten in CSV Format speichern bzw einlesen?
Am im Forum: Grundlagen von C#

Zitat von pinki
Ich finde, dass es nicht schaden kann, wenn man sowas als kleine Übung mal gemacht hat.

Und ob es das kann.
Aus didaktischer Sicht ist das aber eine Katastrophe. Erst Serialisierung benutzen, DANN von Hand Textdateien schreiben und lesen - so herum wird ein Schuh draus. Ansonsten, das das wird dir jeder bestätigen, der mal C#-Kurse für Schüler oder Studenten gegeben hab, wird IMMER von Hand serialisiert und gefrickelt, wo man eine normale Serialisierung benutzen müsste.

Naja, ist hier eh zu spät.

LaTino

Thema: Daten in CSV Format speichern bzw einlesen?
Am im Forum: Grundlagen von C#

(Das alles könnte man sich sparen, wenn man ein vernünftiges Dateiformat anstelle von CSV genommen hätte...)

Thema: Task.ContinueWith mit Parameter aufrufen
Am im Forum: Grundlagen von C#

Dass sie richtig ist.

Tasks nur mit Task.Run() (bzw vor .NET 4.5 Task.Factory.StartNew) erstellen, es sei denn, man weiß ganz genau was man tut und beachten muss.

"Task.Factory.StartNew" vs "new Task(…).Start"

Kurz: wenn du new Task() machst, musst du dich auch um die Synchronisierung kümmern. Machst du das nicht, knallt's.

LaTino
(EDIT: heisst Sir Rufos SpeicherZahlungseingaengeAsync arbeitet auch entsprechend. Die Erstellung des Tasks ist nicht Aufgabe von DoSave.)

Thema: "Type" als generischen Parameter verwenden
Am im Forum: Grundlagen von C#

Zitat von timbu42
@LaTino: es sind etwas mehr als 5 Typen, aber wahrscheinlich nicht komplett flexibel. Ich kann mir noch nicht vorstellen, inwiefern eine Fabrik hier hilft. Hast Du ein Beispiel?

Dafür müsstest du dich von deiner bisherigen Herangehensweise lösen. Du hast zur Zeit, wenn ich es richtig verstanden habe, keine echte Trennung zwischen deinen Daten und der Art, wie sie gefüllt werden, und genau das brauchst du.

Schau dir das Bild auf Wikipedia: Abstrakte Fabrik an, auf das beziehe ich mich.

Abstraktes Produkte: pro Werttyp eins
Abstrakte Fabriken: je eine Methode zum Erstellen jeder Produktart, Implementierungen abh. von der Datenquelle, konkrete Fabriken pro Datenquellenart eine

Ergebnis: pro Fabrik unterschiedliche Familie von Produkten (Daten), die sich ein Interface teilen und typisiert abrufen lassen. Wobei insbesondere die Modellierung der Produkte nicht in Stein gemeißelt ist, ich habe da selbst verschiedene Ideen, die alle nicht bis zum Ende gedacht sind ;).

Du musst aus meiner Sicht jedenfalls von den Generics weg, denn die sind eine Lösung (Familie von Klassen, die abhängig von einem zur Entwurfszeit bekannten generischen Typ sind), die nicht zu deinem Problem (Familie von Klassen, die abhängig von einem zur Laufzeit bekannten Typ sind) passt. Diese missverstandene Anwendung von Generics findet sich hier im Forum häufiger, du bist also nicht alleine ;).

LaTino
EDIT: weil's grad passt: "We had a problem we couldn't solve easily. So we threw design patterns at it, and now we've got a problem factory." ;)

Thema: Daten in CSV Format speichern bzw einlesen?
Am im Forum: Grundlagen von C#

Nunja, M.L. hat dir ein fertiges Stück Code gepostet, das du nur hättest kopieren, verstehen, und bei dir einbauen hättest müssen. Die Tatsache, dass stattdessen nur "das hilft mir alles nicht weiter" kam, sagt mir, dass du kein Interesse daran haben kannst, wirklich was zu lernen. Ansonsten wärst du jetzt nämlich damit beschäftigt, die Beispiele auf FileHelpers.net durchzuarbeiten.

Was ich damit sagen will: zeig bitte, dass du es wenigstens versuchst. "nur war bei mir immer alles falsch" und "es kamen nur Fehlermeldungen" sind Aussagen, die ich von meiner Großmutter erwarten würde, aber nicht von jemandem, der programmieren möchte.

LaTino

Thema: "Type" als generischen Parameter verwenden
Am im Forum: Grundlagen von C#

Letzten Endes ist der Ansatz der ORM und auch der Ansatz vom FileHelper auch nix anderes als ein bisschen Reflection-Magie. Und anders geht es auch nicht, wir sind im weitesten Sinn beim Thema Serialisierung und arbeiten mit Typen, die erst zur Laufzeit bekannt werden. Ob man für einen sehr überschaubaren Einsatz sich selbst etwas baut, oder lieber eine fertige Bibliothek nimmt, muss jeder selber wissen. In diesem speziellen Fall würde ich wahrscheinlich auch eher selbst was bauen.(wenn die Alternative FileHelper ist, würde ich sogar ziemlich viel Aufwand betreiben, aber das ist persönlicher Geschmack.)

Wenn die fünf Typen in seiner Enumeration alles sind, liesse sich noch was mit einer abstrakten Fabrik machen, das ohne Reflection auskommt. Wird es flexibler...Pustekuchen.

LaTino

Thema: Daten in CSV Format speichern bzw einlesen?
Am im Forum: Grundlagen von C#

Zitat von Lens445
ich will ja mein Konsolen Programm in CSV Format speichern.

Achso. Wir dachten, du willst was lernen. Aber so ist natürlich klar, wieso du alle Tipps und Hinweise ignorierst.


File.WriteAllText("beispiel.csv", _personen.Aggregate(new StringBuilder(), (sb, p) => sb.AppendLine($"{p.Name};{p.DateOfBirth:yyyy-MM-dd}")).ToString());

Bittesehr.

LaTino

Thema: XML-Menü Kontextmenü mit XAML
Am im Forum: GUI: WPF und XAML

Sorry, hatte ich nicht gesehen :o)

Thema: XML-Menü Kontextmenü mit XAML
Am im Forum: GUI: WPF und XAML

So, hatte ganz vergessen, dass ich hier noch was Konstruktives beitragen wollte.

a) es ist ziemlich schwer einzuschätzen, was du eigentlich machen möchtest. Anhand des von dir gesetzten Titels gehe ich aber mal davon aus, dass du eine Menüstruktur in einer XML-Datei hast, und diese Menüstruktur nun eben gern per XAML einbinden möchtest. Richtig?

Falls ja:

b) XmlDataProvider ist goldrichtig. Dazu brauchst du nur noch ein HierarchicalDataTemplate, mit dessen Hilfe festgelegt wird, WIE aus den Daten aus dem XmlDataProvider ein Menüpunkt werden soll, und natürlich ein Menü.


<HierarchicalDataTemplate x:Key="----DataTemplate-Ressourcenname----" ItemsSource="{Binding XPath=menu}">
    <AccessText Text="{Binding XPath=@name}"/>
</HierarchicalDataTemplate>
XPath natürlich anpassen an dein XML (das du uns leider vorenthalten hast).

...das Menü dann an den XmlDataProvider und das Template binden:

<Menu ItemsSource="{Binding Source={StaticResource ----XmlDataProvider-Resourcenname----}}" ItemTemplate="{StaticResource ----DataTemplate-Ressourcenname----}"/>

Das war's dann schon.

LaTino

Thema: XML-Menü Kontextmenü mit XAML
Am im Forum: GUI: WPF und XAML

Falschen Post erwischt, auf den du antwortest? Das ergibt gerade so gar keinen Sinn...

LaTino

Thema: Datenverlust in Datei durch Absturz beim Schliessen & schreiben der Config - Wie vermeiden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von P.St.
@LaTino
Eigentlich sollte es doch die Aufgabe des Dateisystems sein, dafür zu sorgen, dass keine korrupten Daten entstehen können. Aber NTFS unterstützt leider keine Transaktionen. Oder doch?.

Wth....sorry, aber kommt dir das Argument nicht selbst absurd vor? Dein System ist abgestürzt! Das bedeutet, es konnte sein Aufgaben unvorhergesehenerweise nicht mehr erfüllen. Das ist ja überhaupt der Grund für das defekte File...und kann mit jedem Dateisystem passieren, wenn es unvorhergesehen reagiert (also nicht so arbeitet, wie es soll).

"Mein Betriebssystem hat nicht richtig gearbeitet. Der Fehler wäre nicht aufgetreten, wenn es richtig gearbeitet hätte." Ja, äh, liegt auf der Hand, nicht?

Was chilic vorschlägt, ist ja ein lokales, begrenztes Backup. Kann man machen, wenn man sonst nix zu tun hat ;)

LaTino

Thema: Wo erstelle ich bei MVVM die MySQL Verbindung?
Am im Forum: GUI: WPF und XAML

Ja nun. Was hat man davon, organisiert vorzugehen? MVVM ist kein Selbstzweck. Es soll helfen, Code so zu strukturieren, dass man ihn auch noch managen kann, wenn er schon zehn Jahre alt und etliche tausend Zeilen lang ist.

PasswordBox lässt sich nicht binden? Du meinst, MVVM hindert dich aktiv daran, die Security-Todsünde zu begehen und ein Passwort ewig unverschlüsselt im Speicher zu halten? Ja, ei der Daus aber auch.
Und, aeh, eine (wenn auch nicht DIE) Messagebox anzuzeigen, ist selten mehr als eine Zeile XAML.

Sagen wir es so: MVVM behindert dich dabei, Dinge falsch zu machen. Wenn du dich gerade sehr behindert fühlst, ist das ein Zeichen dafür, dass du dringend umlernen musst.

Die Frage, ob der Code ins VM gehölrt, hat Th69 schon beantwortet, wenn du dir die Zeit nehmen würdest, seinen Beitrag mal zu lesen.

LaTino

Thema: Datenverlust in Datei durch Absturz beim Schliessen & schreiben der Config - Wie vermeiden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ja, klar kannst du analog zu Excel & Konsorten auf einer temporären Kopie arbeiten oder dir sonst eine Lösung ausdenken. Ist alles legitim. Ich möchte aber zu bedenken geben, dass gegen Datenverlust bei Betriebssystem/PC-Crashes nicht die Applikationen was tun sollten, sondern die Backuplösung. Ich mein, das ist genau das, wofür man sowas hat: um Daten wieder herzustellen, die durch einen techn. Fehler verlorengingen.

LaTino

Thema: Per Unit Test die Serialisierung/Deserialisierung meiner WCF Contract Klassen testen
Am im Forum: Netzwerktechnologien

Das sind meistens die Fälle, die einem dann bei Diskussionen um "WCF kann man nicht testen, live verhält sich das anders als im Test" unter die Nase gerieben werden ;).

Btw, die TestCaseSource würde ich immer als IEnumerable<TestCaseData> deklarieren. Dann kann man, wie in meinem Beispiel, schön mit Namen und Ausnahmen und dem ganzen Gedöns arbeiten.

LaTino

Thema: Per Unit Test die Serialisierung/Deserialisierung meiner WCF Contract Klassen testen
Am im Forum: Netzwerktechnologien

Beispiel:


[DataContract]
public class ExampleClass
{
    [DataMember]
    public object Property { get; set; }
}

class InternalUnknownClass
{
    public string Name { get; set; }
}

[TestFixture]
class TestClass
{
    IEnumerable<TestCaseData> TestCases
    {
         get 
         { 
              var obj = new ExampleClass { Property = new InternalUnknownClass() };
              yield return new TestCaseData(obj).SetName("UnknownType").Throws(typeof(SerializationException));
        }
    }

    [Test, TestCaseSource("TestCases")]
    public void TestKnownTypes(object dto)
    {
         var serializer = new DataContractSerializer(dto.GetType());
         using(var stream = new MemoryStream())
            serializer.WriteObject(stream, dto);
    }
}

Im Editor geschrieben, nach Bedarf um kleine Tippfehler erleichtern und anpassen ;).

LaTino
EDIT: das Dto und die unbekannte Klasse (muss nicht intern sein) sollten natürlich nicht im Test deklariert sein...dann klappt's auch mit dem Nachbarn.

Thema: Per Unit Test die Serialisierung/Deserialisierung meiner WCF Contract Klassen testen
Am im Forum: Netzwerktechnologien

In deinen Testcases sind die Dto leer. Tu doch mal was rein. Am besten etwas, das einen Typ hat, der nicht bekannt gemacht wurde.

LaTino

Thema: Wie kann man die C#-Sprachversion im Visual Studio einstellen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Solution-Explorer (Strg+Alt+L)
Mit der Maus ein PROJEKT markieren (NICHT die Projektmappe = Solution).
-> Alt+Enter

LaTino

Thema: Per Unit Test die Serialisierung/Deserialisierung meiner WCF Contract Klassen testen
Am im Forum: Netzwerktechnologien

Ich bin mir nicht sicher, was du in dem Codeschnipsel eigentlich testest. So, wie das aussieht, fühlst du dich genötigt, den DataContractSerializer von Hand zu testen....das ergibt so keinen Sinn, denn du möchtest nicht wissen, ob der Serialisierer serialisieren und deserialisieren kann (Hint: er kann), sondern ob DEINE Klassen, wenn sie serialisiert werden, so aussehen, wie du es erwartest.

Davon abgesehen zu deiner Fehlermeldung.
Wenn zur Entwurfszeit nicht klar ist, welchen konkreten Typ eine Eigenschaft haben wird, dann kannst du dem Serialisierer mit dem KnownType-Attribut einen Hinweis auf die Typen geben, die in Frage kommen:


//folgende Konstellation:
interface IExampleInterface { }
class ExampleImplementation : IExampleInterface { }
class AnotherImplementation : IExampleInterface { }

[DataContract]
[KnownType(typeof(ExampleImplementation))]
[KnownType(typeof(AnotherImplementation))]
class ExampleDto
{
    [DataMember]
    public IExampleInterface Property { get; set; }
}

Dasselbe Prinzip erfolgt bei anderen Konstellationen, wo der konkrete Typ nicht erkennbar ist:
- Vererbung
- object als Propertytyp
- IExtensibleDataObject-Implementierungen

In fast allen Fällen hier, in denen der WCF-Dienst dann einen Fault produzierte, obwohl die Unittests durchgingen, war die Ursache nicht der Test, sondern lückenhafte Abdeckung mit TestCases oder fehlerhafte TestCases. Ich würde also als ersten Schritt einen TestCase konstruieren, der wegen des fehlenden KnownType-Attributes in einer SerializationException resultiert. Wenn du das hast, kannst du deine TestCases anpassen und dann deine DataContracts vervollständigen.

LaTino

Thema: Bestimmte Elemente in einer Liste List<T> ändern/löschen?
Am im Forum: Grundlagen von C#

Autsch.

Jetzt musst du dir natürlich noch die Frage stellen lassen, wozu ein Objekt "Person" mit Nachname, Vorname und Geburtstag zusätzlich noch wissen muss, was eine Console ist. Die meisten Personen würden abstreiten, dass erst dieses Wissen einen zu einer Person macht ;).

Single Reponsibility Principle

LaTino

Thema: Wie kann man die C#-Sprachversion im Visual Studio einstellen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Projektmappe -> Rechtsklick auf das Projekt -> Eigenschaften -> Build -> Erweitert -> Sprachversion.

Nicht so leicht zu finden, aber auch selten benutzt ;).

LaTino

Thema: Arbeiten auf dem richtigen Objekt - Wie kann ich Referenzen in Methoden reichen?
Am im Forum: Grundlagen von C#

Zitat von Rabenrecht
Wie geht sowas in C#?

In sehr, sehr weiten Teilen intuitiv. Soll heißen: man muss sich weit weniger Gedanken über das Thema machen, als das in C++ der Fall ist. Man muss auch aufhören, innerlich das Wort "Pointer" zu benutzen.

Interessant wird es erst, wenn einem Methodenparameter innerhalb der Methode eine neue Referenz (mit new()) zugewiesen wird (was CoffeeBean angedeutet hat). Alles andere funktioniert so, wie man es erwarten würde, wenn man vorher noch nie etwas von Referenzen gehört hätte.

Soll heissen ein Wert, der einer Methode übergeben wurde und dessen Eigenschaften in dieser Methode manipuliert wurden, erhält die manipulierten Eigenschaften über den Scope der Methode hinaus.

Gut beschrieben hier: Übergeben von Parametern (C#-Programmierhandbuch)
...besonders relevant hier: Übergeben von Verweistypparametern (C#-Programmierhandbuch)

LaTino

Thema: Bestimmte Elemente in einer Liste List<T> ändern/löschen?
Am im Forum: Grundlagen von C#

Vielleicht hilft's dir, wenn du einmal einen Blick in den Anhang wirfst.

Ansonsten beachte bitte unbedingt [Hinweis] Wie poste ich richtig?, Punkt 1.1: du musst dich schon selbst in die Grundlagen einlesen. Wir können dir Dinge erklären, aber wir können sie nicht für dich verstehen.

LaTino