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 JimStark
Thema: Wie kann ich Pictureboxen in einem Array richtig am UI aktualisieren?
Am im Forum: Grundlagen von C#

Zitat von hendrikator
Auch keine schlechte Idee leider ist der fehler mit den falschen früchten immer noch.


Da würdest du oder wir zumindest den Fehler auf den ersten Blick erkennen, und nicht wie bei diesem Wirrwarr ;)

Thema: Wie kann ich Pictureboxen in einem Array richtig am UI aktualisieren?
Am im Forum: Grundlagen von C#

Vielleicht würde es dir einfacher fallen das ganze in eine eigene Klasse auszulagern.

Pseudo-Beispiel:



public class Machine(){

 public bool RowTopWin{...} // gibt zurück ob 1. Zeile Gewinn
 public bool RowMiddleWin{...}
 public bool ColumnLeftWin{...}

}

Thema: Wie halte ich mein ViewModel aktuell nach einem Datenbank-Update?
Am im Forum: GUI: WPF und XAML

Du hast recht, das ist mir gar nicht aufgefallen. Ich habe jetzt eine Update Methode dafür geschrieben. Damit geht es jetzt. Danke!

Thema: Wie halte ich mein ViewModel aktuell nach einem Datenbank-Update?
Am im Forum: GUI: WPF und XAML

Ich glaube ich habe mein Problem nicht deutlich genug erläutert.

Als Beispiel habe ich ein Objekt der ViewModel-Liste gebunden, und zeig in einer TextBox ein Feld davon. Wenn ich zwischenzeitlich die Objekte neu lade und danach die TextBox änder, konnte ich in der Liste die Änderung nicht mehr nachverfolgen, da ja die Referenz verloren ging (durch Clear).
Mit dem Code geht es jetzt. Also die "Referenz" ist scheinbar die selbe, sie wurde nur ersetzt.

Thema: Wie halte ich mein ViewModel aktuell nach einem Datenbank-Update?
Am im Forum: GUI: WPF und XAML

Hi,

danke für eure Tipps,

habe es mir jetzt doch nochmal etwas umgeschrieben, das funktioniert soweit jetzt. Falls jemand es brauchen sollte:


            // Modelle von Datenbank beziehen:
            var orders = _SqlRepo.GetOrders();
            orders.Wait();


            // Modelle die in ViewModel Liste bereits referenziert sind:
            var ordersToReplace = _Orders.Where(
                c => 
                orders.Result.FirstOrDefault(old => old.OrderID == c.OrderID) != null)
                .ToList();
            
            
            // vorhandene ViewModels ersetzen:
            ordersToReplace.Select(
                c => 
                c = new OrderViewModel(
                    orders.Result.Where(c => c.OrderID == c.OrderID).First()
                    )
                );

            // ViewModels, für die es kein Modell gibt ==> löschen
            var ordersToDelete = _Orders.Where(
                vm => 
                orders.Result.FirstOrDefault(model => model.OrderID == vm.OrderID) == null)
                .ToList();

            foreach(var orderToDelte in ordersToDelete)
                _Orders.Remove(orderToDelte);


            // Models, für die es kein ViewModel gibt ==> hinzufügen:
            var ordersToAdd = orders.Result.Where(
                c => _Orders.FirstOrDefault(vm => vm.OrderID == c.OrderID) == null)
                .ToList();

            // ViewModel für Modell erstellen & hinzufügen:
            foreach (var order in ordersToAdd)
                _Orders.Add(new OrderViewModel(order));

Thema: Wie kann ich nach einem Button-Click in Form 1 eine Picturebox in Form2 öffnen?
Am im Forum: Grundlagen von C#

Ich verstehe zwar nicht genau was du vor hast, am einfachsten ist aber wahrscheinlich wenn du das Bild im Form3-Konstruktor übergibst:

Form3 form3 = new Form3("C:\mein_bild.jpg");


bzw. siehe hier: [FAQ] Kommunikation von 2 Forms

Thema: Wie halte ich mein ViewModel aktuell nach einem Datenbank-Update?
Am im Forum: GUI: WPF und XAML

Hey noch eine weiterführende Frage:

Ich arbeite in meiner Datenbank mit "Order"-Objekten, diese mappe ich mir in "OrderViewModels" für WPF,...

Speichere ich z.B. ein Objekt ab, lese ich danach wieder die Datenbank aus.


            // "Order"-Objekte aus der Datenbank
            var orders = await _SqlRepo.GetOrders();
            // Liste mit ViewModels (werden in Window abgerufen)
            _Orders.Clear();
            
            foreach(var order in orders)
            {
                var vm = new OrderViewModel(order);

                _Orders.Add(vm);
            }

Durch das Clearen gehen ja jedesmal die Referenzen verloren, wenn z.B. ein Fenster mit Details das jeweilige OrderViewModel noch verwendet. Das funktioniert zwar, ich kann Änderungen dann aber nur noch an einer Stelle tracken.

Gibt es ein fertiges Pattern mit dem ich erst die bestehenden ersetze (z.B. anhand OrderID identifiziere), dann nicht mehr vorhandene (gelöschte) entferne und neu hinzugefügte, neu erstelle?
Das kann man natürlich alles von Hand machen, ich schätze das Problem ist aber sicher schon öfter vorgekommen, ich weiß nur nicht nach was ich suchen soll.

Thema: Was haltet ihr davon C# zu lernen mit einer Engine wie Unity?
Am im Forum: Smalltalk

Zitat von Paddy1997
Zudem schreibt man in Unity ja auch eher Scripts statt vollwertige Programme.
Bei mir ist es so das ich mit 24 gerne noch eine Ausbildung als Anwendungsentwickler starten möchte.
Da ich leider nur einen Hauptschulabschluss (und diesen auch nicht gut) möchte ich mein Wissen über C# ausbauen. ...
Allerdings ist es ja auch so das Enterprise C# Entwicklung eine völlig andere ist als Unity Entwicklung.

Also ich will dir nicht den Mut nehmen, aber bei größeren Firmen, die z.B. Enterprise Software im B2B entwickeln, zählt ehr größere Erfahrung oder coole Projekte zum vorzeigen (GitHub Profil,...) wenn kein Studium vorhanden ist. Bei einem kleinen Betrieb der für interne Zwecke entwickelt mag das keine Rolle spielen. Aus eigener Erfahrung kann ich aber sagen dass so eine Ausbildung nicht gerade ein Qualitätsmerkmal ist, Erfahrung ist da viel wichtiger.

Bzgl. dem Lernen, ich rate dir wirklich ein umfangreicheres Buch an die Hand zu nehmen, in dem möglichst viel behandelt wird. Wenn du das mit Tutorials oder YouTube-Videos lernen willst verschwendest du eigentlich nur Zeit, da du irgendwann merkst dass Grundlagen fehlen. Ich habe zumindest noch keine online-Videoreihe gesehen die den Umfang und Qualität von z.B. "C# 8 mit Visual Studio 2019" hat.

Thema: Wie kann man unter WPF ein neues Fenster MVVM-konform öffnen?
Am im Forum: GUI: WPF und XAML

Zitat von MarsStein
Der dort erwähnte ViewManager entspricht dabei dem WindowsService, den MrSparkle nannte.

Danke für den Tipp!


    public interface IWindowManager
    {
        void ShowOrderWindow(OrderViewModel order);
...
    }

So habe ich es jetzt gemacht, das MainViewModel initalisiert den WindowManager, und nutzt den Manager dann um die Fenster aufzurufen.
Dann ist der Manager ein Ausbruch aus dem Pattern. Aber ich denke noch ein recht übersichtlicher

Danke euch!

Thema: Wie kann man unter WPF ein neues Fenster MVVM-konform öffnen?
Am im Forum: GUI: WPF und XAML

Nochmal dazu eine Frage:

Bisher habe ich es so gemacht:
im MainWindowViewModel habe ich einen Command der ein neues Fenster öffnet, dem das zugehörige ViewModel zuweist und den DbService mitgibt.

Jetzt sollte die UI Schicht ja eigentlich von den ViewModels komplett getrennt sein. Also das MainWindoViewModel das zweite Fenster gar nicht kennt.

Wie mache ich das am besten, dass ich das in XAML definiere? Also einen Command der ein neues Fenster öffnet, ViewModel mitgibt. Brauche ich für sowas dann doch Codebehind?

Thema: Änderung einer Variable in Properties Settings erkennen
Am im Forum: GUI: Windows-Forms

https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.categoryattribute?redirectedfrom=MSDN&view=netcore-3.1

da siehst du ja den Setter im Codebeispiel

Thema: Wird C# aussterben? (Spoiler: Nein)
Am im Forum: Smalltalk

Meiner Meinung hängt der langfristige Erfolg ehr von Azure und dessen Entwicklung ab.

Was ich noch erstaunlich häufig in Unternehmen sehe: Programme die mit Visual Basic 6 oder Visual C++ 6,... entwickelt wurden und noch regelmäßig gepflegt werden! Also ich denke C# bzw. .NET bleibt uns auch noch eine Zeit lang

Thema: Wie kann ich beim Abrufen von Exchange-Properties einen Status oder Ladebalken anzeigen?
Am im Forum: Office-Technologien

Du hast eine Liste mit Mails, da weißt du die Anzahl.
Anstatt die zusammen in die Methode zu geben, kannst du sie ja einzeln abarbeiten und den Status aktualisieren.

Funktionieren deine Methoden wirklich?! Du gibst ja nicht mal einen Task zurück. Da macht der Aufruf dann halt auch keinen Sinn.


await System.Threading.Tasks.Task.Run(() => PrepareMailsAsync(emailMessages));

Thema: Dienst vor Beendigung schützen (Windows Worker Service unter dotnet core 3.1)
Am im Forum: Rund um die Programmierung

Nur mal interessehalber, was wird das für ein Projekt? Ich verstehe nicht ganz wieso man Nutzer Adminrechte gibt aber sowas dann so stark kontrollieren will. Hört sich ehr nach so einem Schul-PC Schutzprogramm oder Mitarbeiterüberwachung an :D

Thema: Screenshot-Anwendung mit weiterem Monitor links liefert falsche Koordinaten und MouseEvents
Am im Forum: GUI: Windows-Forms

Zitat von OliverSte
Klappt zu meiner Überraschung nicht. Was mache ich denn falsch?

Übersicht über die .NET Core-CLI

Gleich im ersten Absatz, Installieren von .NET Core SDK. Kannst du aber auch mit dem VS Installer.

Thema: CommandTarget bei MVVM und Commands in mehreren ViewModels
Am im Forum: GUI: WPF und XAML

Zitat von Master15
<Button Content="Hallo Mitarbeiter" 
		Command="{Binding Path=SelectedEmployee.HelloCommand}" 
		Margin="5,0,0,0"
		Background="LightYellow" />

Prinzipiell funktioniert das schon, wenn ein Mitarbeiter ausgewählt ist.
Wenn jedoch kein Mitarbeiter ausgewählt ist, wird der Button nicht ausgegraut, was nicht sonderlich schön ist.

Woher soll der Button das auch wissen? Dafür kannst du es ja an die IsEnabled Eigenschaft binden.

Thema: Wie verschiedene Windows mit MVVM synchron halten?
Am im Forum: GUI: WPF und XAML

Hi,

nur ganz kurz eine Frage, ich weiß das wurde schon mehrfach durchgekaut, ich bin mir aber nicht sicher was "sauberer" ist:

Aus dem MainWindowViewModel rufe ich per Command ein zweites Fenster auf (OrderDetails), welches ein OrderDetailsViewModel als Context hat. Dem übergebe ich im Konstruktor das gewählte Order Objekt und das DB-Repository.


        public OrderDetailsViewModel(Order order, IDBRepo dbRepo)

Beim Speichern-Command im OrderDetailsViewModel will ich eine Aktualisierung im MainWindowViewModel anstoßen.

Mir fallen jetzt zwei Möglichkeiten ein:


public OrderDetailsViewModel(Order order, IDBRepo dbRepo, MainWindowViewModel parent)
==> ich übergebe die Referenz des Parents im Konstruktor und rufe dann eine Methode auf (z.B. refreshOrders,...)

Oder ich abonniere im MainWindowViewModel ein Event des OrderDetailsViewModels (z.B. DetailsSaved,...)


Was ist besser? Bzw. habt ihr einen besseren Vorschlag?
Danke!

Thema: Wie verteile ich am Besten Updates meiner Anwendung?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Gibt dafür auch nicht wenige fertige Systeme, falls man das Rad nicht neu erfinden möchte. z.B.: nUpdate - .NET Update Solution

Thema: Politik trifft Git - Umbenennen des Master Branches
Am im Forum: Szenenews

Nur mal als kleines Praxisbeispiel:

Ich habe es mittlerweile bei vier DAX Unternehmen gesehen, dass auch dort das Thema auf dem Tisch liegt. Da wird es von den Mitarbeitern zwar auch nur belächelt, langfristig aber übernommen. Aber nur um mögliche Konsequenzen zu vermeiden und das Thema schnell wieder vergessen zu können.

Thema: Wird ein Objekt, das an einen Task übergeben wird, bei Veränderungen vom Main Thread mit verändert?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von ck82

Problem es gibt keine einfache Beschreibung was der Unterschied zwischen Parallel und Asynchron ist.

Ohne solche Sätze wie:
Parallele Verarbeitung vs. Order Preservation sind gegensätzliche Anforderungen.
Das Einhalten einer Order ist extrem kostenintensiv; daher gibt es weder in PLINQ noch in der TPL entsprechende Funktionalitäten

Asynchron --> man macht weiter ohne zu warten
Parallel --> es läuft zur selben Zeit ab

Bei deinem Fall macht das parallele arbeiten absolut keinen Sinn, das könntest du z.B. machen wenn du Arrays mit Pixeln hast und die mittels Interpolation skalieren willst. --> hohe Rechenpower notwendig, kann nebeneinander laufen, nicht abhängig,...
Bei einer Datenbankabfrage macht es halt gar keinen Sinn, das wird auch nicht schneller. Und du lastest damit deine CPU-Kerne auch nicht aus Alles wie oben schon mehrfach erwähnt.

Bei dir bietet es sich an asynchron zu machen, dass die GUI oder was auch immer nicht hängen bleibt. Was jetzt genau dein Problem damit ist, verstehe ich aber immer noch nicht.

Thema: Wird ein Objekt, das an einen Task übergeben wird, bei Veränderungen vom Main Thread mit verändert?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von witte
Man könnte sich auch mal Parallel.ForEach anschauen.

Da wird aber auch nicht die richtige Reihenfolge garantiert, und es lohnt sich glaub an erst ab sehr hohen Anzahlen.

Warum wartest du nicht einfach mit await? Warum muss das parallel ablaufen? Vorallem bei den selben Datenbankzugriffen. Oder am Besten mehrere auf einmal wie T-Virus sagt.

Thema: Warum stürzt Applikation mit NullReference Exception ab?
Am im Forum: Web-Technologien

Zitat von Maliko
Ist zwar auch nicht optimal, aber die einzige Lösung die mir einfällt OnTheFly die Zugangsdaten der Datenbankserver ändern zu können ohne die Application an sich zu updaten.

Ich wollte nur sagen, dass ich das Abrufen von Credentials über eine HTTP Schnittstelle schöner finde als das zusätzliche Verbinden auf eine Datenbank. Dabei ist man auch nicht nur auf Microsoft angewiesen (Open-Source gibt es ja auch)...
Mir kommt das irgendwie sehr bekannt vor, wenn z.B. irgend ein Leiter nur die Technologie nutzen will mit der er auch vertraut ist obwohl es bessere Alternativen gibt (auch bei DAX Unternehmen)
Wie gesagt, ist nur meine eigene Meinung. Ich denke die Diskussion hilft dir auch nicht weiter, darum sollten wir es jetzt dabei belassen.

Thema: Warum stürzt Applikation mit NullReference Exception ab?
Am im Forum: Web-Technologien

https://docs.microsoft.com/de-de/azure/key-vault/general/authentication-requests-and-responses

Also da finde ich es schon schöner, wenn man so einen Zugriff hat, anstelle dass jeder Client auf irgendeine Datenbank connected. Naja das muss dann halt jeder selber wissen

Thema: Warum stürzt Applikation mit NullReference Exception ab?
Am im Forum: Web-Technologien


Zitat von Maliko
aber wir handeln dass jetzt über eine zentrale Datenbank auf die immer zugegriffen wird, welche dann den ensprechenden Connectionstring zurückgibt. Ist zwar auch nicht optimal, aber die einzige Lösung die mir einfällt OnTheFly die Zugangsdaten der Datenbankserver ändern zu können ohne die Application an sich zu updaten.

Wäre es nicht viel eleganter die Connectionstrings z.B. über eine kleine HTTP-API zu beziehen anstatt nochmal in einer Datenbank?
Also die API gibt sie als JSON zurück. Geht glaube ich in Azure sogar ohne eine Zeile Code.

Thema: Benutzung von LiteDB mit Abstraktionsschicht
Am im Forum: Code-Reviews

Zitat von witte
Sind diese Addxxx-Methoden wirklich asynchron? Warum verwendest du dann nicht await (mit Task.ConfigureAwait(false))?

Nein, ich wollte es im Interface aber als Task definieren, dass ich später evtl. mal eine asynchrone REST-, RPC-Schnittstelle oder ähnliches dazwischen klemmen könnte.
Der Aufruf soll später auch mit await stattfinden, das war nur ein Testaufruf in einer Konsole.

Zitat von Abt
Im Endeffekt ist das weder ein Service, noch eine Db - sondern im Prinzip nichts anderes als (eine sehr einfache Variante) des Repository Pattern.

Oh man, dieses Pattern vorher zu kennen wäre nützlich gewesen...
Wen es interessiert, hier habe ich auch ein gutes Beispiel gefunden: Implementieren von Repository-und Arbeitseinheiten Mustern in einer ASP.NET MVC-Anwendung (9 von 10)

Vielleicht baue ich direkt auf deinen Code auf

Danke euch beiden!

Thema: Wie bastrahiere ich eine Methode in Klasse?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von c#atriga
PS: Gibt es schon eine Funktion in C# welche nach einer bestimmten Zeichenanzahl einen bestimmten Wert einfügt?

Ja: String.Insert

Bzgl. Klasse: Die Methode verwendest du ja bereits in irgendeiner Klasse. Wenn du es an mehreren Stellen brauchst, solltest du es natürlich auslagern. Die Frage ist dann ehr statisch oder nicht. Das kommt auf den Input, Funktionen,... an.

Thema: Benutzung von LiteDB mit Abstraktionsschicht
Am im Forum: Code-Reviews

Hi,

vielleicht kennt ja der ein oder andere LiteDB.
Da ein SQL-Server für dieses Projekt zu aufwendig wäre, würde ich gerne eine lokale Datenbank einsetzen. Vielleicht kennt ja jemand auch eine bessere Alternative.

Ich nehme als Beispiel wieder eine kleine Auftragsverwaltung - Auftrag - Kunde - Artikel.


    public class Article
    {
        public int ArticleID { get; set; }
        public string Title { get; set; }
        public Order Order { get; set; }
...

    public class Customer
    {
        public int CustomerID { get; set; }
        public string Firstname { get; set; }
        public string Lastname { get; set; }
        public List<Order> Orders { get; set; } = new List<Order>();
...
    public class Order
    {
        public int OrderID { get; set; }
        public string Title { get; set; }
        public Customer Customer { get; set; }
        public List<Article> Articles { get; set; } = new List<Article>();
...


Für die Datenabfrage habe ich mir einen kleine Abstraktionsschicht geschrieben:



    public class LocalDb : IAvService
    {
        private LiteDB.LiteDatabase _db;


        private ILiteCollection<Order> GetOrderCollection
        {
            get { return _db.GetCollection<Order>("orders"); }
        }
        private ILiteCollection<Customer> GetCustomerCollection
        {
            get { return _db.GetCollection<Customer>("customers"); }
        }

        private ILiteCollection<Article> GetArticleCollection
        {
            get { return _db.GetCollection<Article>("articles"); }
        }


        public LocalDb(string dbFile)
        {
            _db = new LiteDatabase(dbFile);
            BsonMapper.Global.Entity<Order>()
                .DbRef(x => x.Customer, "customers");
            BsonMapper.Global.Entity<Order>()
                .DbRef(x => x.Articles, "articles");
            BsonMapper.Global.Entity<Customer>()
                .DbRef(x => x.Orders, "orders");
            BsonMapper.Global.Entity<Article>()
                .DbRef(x => x.Order, "orders");
        }

        public Task<Customer> AddCustomer(Customer customer)
        {
            return Task<Customer>.Run(() =>
            {
                var col = GetCustomerCollection;
                var id  = col.Insert(customer);
                return col.FindById(id);
            });
        }
...


Erstelle ich einen neuen Auftrag mit Artikeln und Kunde löse ich das bisher so.
Da die Objekte (Artikel, Customer....) noch keine ID haben, muss ich sie erst separat in die Datenbank geben.


            IAvService av = new LocalDb("test.db");

            Order order = new Order
            {
                Title = "Test"
            };


            Article article1 = new Article
            {
                Title = "Arbeitszeit",
                Price = 60,
                Tax = 0.16
            };

            var dbArticle = av.AddArticle(article1).GetAwaiter().GetResult();

            Console.WriteLine($"Artikel ID: {dbArticle.ArticleID}");

            order.Articles.Add(dbArticle);

            order.Customer = av.AddCustomer(new Customer()
            {
                Firstname = "Max",
                Lastname = "Mustermann"
            }).GetAwaiter().GetResult();

            av.AddOrder(order);



Hier wollte ich fragen ob das soweit alles passt, da sich das ja durch mein komplettes Programm ziehen wird.
Was mich noch etwas stört ist bzw. was etwas unschön aussieht, dass ich alles erst Adden muss,
also es nicht direkt hinzufügen kann, wie bei EF: (Oder geht das doch irgendwie damit?)


Order order = new Order{
   Customer = new Customer{...}
}

Thema: Wie kann ich von C# auf MySQL Zugreifen ohne die Zugangsdaten hart im Code zu speichern?
Am im Forum: Grundlagen von C#

Zitat von Abt
Du kannst mit C# direkt auf MySQL zugreifen (über ADO.NET und dem entsprechend offiziellen MySQL Driver).

Wieso denn ADO.NET?! Sollte man das überhaupt noch verwenden anstelle von EF?

Thema: WPF OnceClick Anwendung mit inkludiertem .NET Core zu gross?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von habib
Ein Kollege von mir hat ein Tool in Delphi geschrieben und das ist gerade einmal 4 MB groß. Als Vergleich habe ich nur mal die GUI nachgebaut und komme allein da schon auf 120 MB? Und ich habe auf meinem System kein Delphi installiert, daher muss da ja auch alles mitkommen. Kann mir das bitte jemand erklären?

Absolute .NET Grundlagen, kannst ja auch Programme in Assembler schreiben, dann sind sie noch kleiner.

Thema: Gibt es eine Alternative zum WebBrowser Steuerelement - mit DOM Zugriff?
Am im Forum: GUI: Windows-Forms

Sieh dir mal lieber das https://html-agility-pack.net/ an, bevor du mit sowas rumwerkelst. Vorallem wenn es größer werden soll.