Laden...

Forenbeiträge von FZelle Ingesamt 10.010 Beiträge

04.04.2023 - 23:46 Uhr

Lies dir bitte [Artikel] MVVM und DataBinding | myCSharp.de an, so wie du es machst ist das alles in WPF nicht gedacht.

Man erstellt im Codebehind keine Controls, sondern benutzt entsprechende Container die mit Item/Data/Hirarchical Templates ausgestattet werden.

01.04.2023 - 01:55 Uhr

Du hast wieder nur gesagt wie du etwas implementieren willst, nicht was das werden soll.
Dein Ansatz scheint schon etwas suboptimal gewählt, wenn du solche Verrenkungen machen willst/musst.

28.03.2023 - 16:36 Uhr

Daten der Source merken, auf null setzen, SortDescriptions setzen, Source wieder auf die ursprünglichen daten setzen

28.03.2023 - 02:28 Uhr

Schau doch mal was die exception sagt.

Du hast einen Singleton, dein MyServiceRunner und willst ihm einen Scoped Service MyTicketProvider inserten, das geht nicht.

18.03.2023 - 12:59 Uhr

Ich stand auch "neulich" vor der Wahl, was ich einsetzen soll, und habe mich dann statt für MVC für Blazor entschieden.
Ist meiner Meinung nach viel einfacher umzusetzen.
Wir benutzen Blazor server und wenn dann "demnächst" Blazor United kommt, sehe ich keinen Grund etwas anderes zu benutzen

08.03.2023 - 17:45 Uhr

@C4RL0
Du weißt schon, das es Try Catch gibt?


private void iconButtonBLZ_Click(object sender, EventArgs e)
{
    BLZ.detailsType bank = new BLZ.detailsType();
    try
    {
        BLZ.BLZServicePortTypeClient BLZclient = new BLZ.BLZServicePortTypeClient("BLZServiceSOAP12port_http");
        bank  = BLZclient.getBank(textBoxBLZ.Text);
        textBoxBank.Text = bank.bezeichnung;
    }
    catch(FaultException ex)
    {
        // was auch immer zu tun ist
    }
}

26.02.2023 - 23:19 Uhr

Indem du kein Codebehind benutzt sondern wie wir hier immer und immer wieder sagen,
[Artikel] MVVM und DataBinding

22.02.2023 - 16:48 Uhr

Was viele Leute beim M1/M2 vergessen ist, das die Effizientsteigerung bei Apple nicht nur an Arm liegt.
Der SOCK beinhaltet z.b. nicht nur den Memorycontroller sondern den Speicher selber auch.
Das macht einen großen unterschied bei der Geschwindigkeit um beim Energieverbrauch.

Sehen wir ja an den Caches, wenn du den gesamten Speicher mit der Geschwindigkeit eines Secondlevel Cache ansprechen kannst ist das ein enormer Vorteil

12.02.2023 - 11:50 Uhr

Benutze lieber [relaycommand(CanExecute=CanCommand)] und mach die Validierung dadrin, dann geht der Button erst an, wenn Validierung OK war

11.02.2023 - 02:33 Uhr

Du bringst da ein paar Sachen durcheinander.

Du hast eine Datendatei, die aus Binärdaten und aus Text besteht.
Die Binärdaten haben nichts, aber auch überhaupt nichts mit Encodings zu tun.
Das es sich bei 4 byte werten um little oder big endian handeln kann, liegt an der schreibenden Software.

Du musst also mit dem Binaryreader ganz normale Bytes einlesen, diese, je nach little oder big endian behandeln
und dann die Text bytes lesen und mit dem entsprechenden encoding umwandeln.

08.02.2023 - 19:47 Uhr

Das ist das Problem von VB(6/net), es ist vieles vereinfacht, was dazu führt das die Leute die es benutzen die Grundlagen nicht erlernen müssen.

Das ist bei C# anders. Du musst die Grundlagen der OOP und danach die Grundlagen der Technologie die du benutzen willst erlernen.

In Deinem Fall,
Rheinwerk Computing :: Objektorientierte Programmierung - Das umfassende Handbuch
[FAQ] Wie finde ich den Einstieg in C#?

Und direkt in WPF einsteigen macht es nicht einfacher, da du hier noch viel mehr lernen musst, wie z.b. MVVM, Pattern, Dependency injection und einiges mehr.
[Artikel] MVVM und DataBinding

02.02.2023 - 10:37 Uhr

Oder man schaut sich im Maui CommunityToolkit das Popup an
Popup - .NET MAUI Community Toolkit - .NET Community Toolkit

18.01.2023 - 11:38 Uhr

Naja, es gibt bestimmt hunderte von Bibliotheken die es erlauben EXIF Daten in Bildern zu pflegen.
Es ist nicht alle im Framework/Core enthalten.

17.01.2023 - 14:34 Uhr

Wir benutzen das in unserer neuen MAUI App.

Läuft von Android 7 bis Android 13.
Musst nur die richtigen Berechtigungen anfordern.


	<!-- For below Android 12 -->
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" />
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
	<uses-permission android:name="android.permission.BLUETOOTH"/>
	
	<!-- Request legacy Bluetooth + location permissions on older devices. -->
	<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:maxSdkVersion="30" />
	<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
	
	<!-- For Android 12 and above -->
	<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" android:minSdkVersion="31" />
	<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:minSdkVersion="31" />
	<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:minSdkVersion="31"
		android:usesPermissionFlags="neverForLocation" />



 public class BluetoothLEPermissions : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions
        {
            get
            {
                var isV12 = Environment.OSVersion.Version.Major>=31;

                if( isV12)
                {
                    return new List<(string androidPermission, bool isRuntime)>
                    {

                        (Android.Manifest.Permission.Bluetooth, true),
                        (Android.Manifest.Permission.BluetoothAdmin, true),
                        (Android.Manifest.Permission.BluetoothScan, true),
                        (Android.Manifest.Permission.BluetoothConnect, true),
                        (Android.Manifest.Permission.AccessFineLocation, true),
                        (Android.Manifest.Permission.AccessCoarseLocation, true),
                        //(Android.Manifest.Permission.AccessBackgroundLocation, true),
                    }.ToArray();

                }
                else
                {
                    return new List<(string androidPermission, bool isRuntime)>
                    {

                        //(Android.Manifest.Permission.Bluetooth, true),
                        //(Android.Manifest.Permission.BluetoothAdmin, true),
                        (Android.Manifest.Permission.AccessFineLocation, true),
                        (Android.Manifest.Permission.AccessCoarseLocation, true),
                        //(Android.Manifest.Permission.BluetoothScan, true),
                        //(Android.Manifest.Permission.BluetoothAdmin, true),
                        (Android.Manifest.Permission.AccessBackgroundLocation, true),
                        
                    }.ToArray();
                }
            }
        }
    }


    public class AccessFineLocation : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.AccessFineLocation, true) };
    }
    public class AccessCoarseLocation : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.AccessCoarseLocation, true) };
    }
    public class AccessBackgroundLocation : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.AccessBackgroundLocation, true) };
    }
    public class BluetoothP : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.Bluetooth, true) };
    }
    public class BluetoothAdvertise : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.BluetoothAdvertise, true) };
    }
    public class BluetoothScan : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.BluetoothScan, true) };
    }
    public class BluetoothConnect : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.BluetoothConnect, true) };
    }
    public class BluetoothAdmin : Permissions.BasePlatformPermission
    {
        public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
            new (string, bool)[] { (Android.Manifest.Permission.BluetoothAdmin, true) };
    }


30.11.2022 - 18:26 Uhr

Wenn ich über den nuget link, dann auf das csvhelper nuget gehe, dann Projekt webside komme ich nach
A .NET library for reading and writing CSV files. Extremely fast, flexible, and easy to use. | CsvHelper
Da dann Get Started aufrufen.

Ist da wirklich einfach erklärt

30.11.2022 - 18:20 Uhr

@kstanger

Ich habe mal zum Spass bei google "datagridview bindinglist sort" eingegeben.
Der erste Link geht zu datagridview-sort-and-e-g-bindinglistt-in-net
Und da dann die erste Antwort verweist auf die MSDN, also die Doku von MS.
https://learn.microsoft.com/en-us/previous-versions/dotnet/articles/ms993236(v=msdn.10)
Und da ist es haar klein erklärt.

30.11.2022 - 12:35 Uhr

Andererseits ist es ein schwaches Bild von den UI-Entwicklern, ein DataGridView zu entwickeln (was ja an Excel erinnern soll) und dort die Funktionalität des Sortierens (was ich als Basic sehe) so zu machen, dass sie eigentlich nicht in das Gesamtkonzept passt und daher nur mit großer Mühe (wenn überhaupt) zu programmieren ist.

Sorry, das liegt nicht an MS sondern daran, daß Du bis jetzt die Grundlagen der SW Architektur nicht verstanden hast.

Das DGV erlaubt das Sortieren, bietet ja extra die Bedienung dieser Schnittstelle an. Das DU dann die falsche Liste nimmst,
ist weder ein MS noch ein DGV problem.

Wie hier schon oft gesagt wurde, nicht erst machen, auf die Schn...e fallen und dann beschweren, sondern endlich mal anfangen
die Grundlagen zu erlesen.
Das spart Dir viel Zeit und Frust.

29.11.2022 - 17:06 Uhr

Wenn ich das auch mit der neuen XSD mache und die Klasse einbinde, dann habe ich natürlich das Problem von zwei Klassen mit dem Namen root.

Ähm, die klassen kannst du benennen wie du möchtest, nur die namen der Properties müssen richtig sein.

19.11.2022 - 23:46 Uhr

Wenn es Datenklassen sind, nein.
Sind es ViewModel evtl, aber eher nicht.

Datenklassen sollten niemals die UI bestimmen, dafür sind sie nicht gedacht.

28.10.2022 - 17:32 Uhr

Und du sollst keine DataTable anhängen

27.10.2022 - 21:47 Uhr

Und warum ungebunden?
Wenn du das sowieso in ein Objekt packst, kannst du auch gleich eine Liste ans Grid binden, dann musst du diesen ganzen Aufwand nicht betreiben.

21.10.2022 - 10:08 Uhr

Du hast glaube ich nicht so richtig verstanden was da passiert.
Das hat nichts aber auch gar nichts mit IE oder so zu tun.

Die Seite die du laden willst wird im Browser durch JavaScript mit den Daten und sonstigem versorgt.
Du lädst aber nur den reinen Text der Seite.

Da die eine eigene API haben, wird dir das eh schnell auf die Füße fallen.

https://developer.msci.com/apis/index-api

11.10.2022 - 20:07 Uhr

Ist auch die vollkommen falsche herangehensweise.

Statt immer irgendwas herumzuprobieren, warum versuchst du nicht mal die Grundlagen zu erlernen?

In WindowsForms ist fast alles Event basiert, also wenn du auf irgendwas reagieren willst, dann such ein passendes Event.
https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.datagridview?view=windowsdesktop-6.0
Für deinen Fall würde sich wahrscheinlich
https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.datagridview.cellformatting?view=windowsdesktop-6.0
eignen.
Viel einfacher

03.10.2022 - 23:59 Uhr

Soetwas gehört auch nicht in dem Konstruktor aufgerufen.

Wenn das Control im Designer angezeigt wird, wird es per new angelegt.
Woher soll es dann diese Verbindung her haben?

Mach es im OnLoaded und gut.

30.09.2022 - 09:29 Uhr

Dann solltest du dringendst lernen mit der Doku zurecht zu kommen.
Auch solltest du an den Grundlagen arbeiten, Arrays sind für dynamische Daten nicht der richtige Datentyp.

Wenn du den Typ von Song[] in List<Song> änderst, musst du danach nur ein SongsDataGridView.DataSource= Songs machen

26.09.2022 - 16:36 Uhr

@T-Virus
SQLite-net ist ja nur die Schnittstelle zu SQLite selber und 90% der Issues sind eher dem Unverständnis geschuldet wofür das mal gedacht war.
SQLite-Net ist nicht als Ersatz für Enterprise ready Libs wie EF/Linq2DB/NHibernate gedacht, sondern für "Kleinigkeiten".
Sieht man schon am Fehlen von Child support etc.

Und es benutzt https://github.com/ericsink/SQLitePCL.raw unter der Haube, und das wird schon noch anständig gepflegt.

@Abt:
Es gibt so viele Menschen da draussen die immer noch bei .NET FW bleiben wollen/müssen und da nutzt mir EF-Core nicht so sonderlich.

Aber mein Einwand war nicht, das man es unbedingt benutzen sollte, sondern eine Antwort auf die Frage ob es auch was anderes gibt als die ADO.NET basierte Version.

Und noch einmal, hier geht es nicht um Client/Server.

26.09.2022 - 01:07 Uhr

Es kann bei weitem nicht was EF kann, aber es ist kleiner und durch direkte ( PInvoke ) Einbindung schneller.
Auch ist es gerade durch etwas wie Connection.CreateTable<T>() sehr einfach das DB Schema zu pflegen.

Ich benutze es für viele kleine Tools, aber ich weiß was ich tue ( meistens 😉

25.09.2022 - 22:20 Uhr

@Abt @T-Virus
Ja es gibt eine weitere, viel einfacher zu benutzende Variante von SQLite und die hat nichts mit ADO.NET zu tun.
https://www.nuget.org/packages/sqlite-net-pcl/
Ist dadurch aber wirklich nur für "Kleinigkeiten" zu gebrauchen, wobei sie auch unter Android und IOS funktioniert

19.09.2022 - 16:43 Uhr

Daten haben in den UI Elementen nichts zu suchen.

Auch WindowsForms bietet DataBinding, das sollte auch hier benutzt werden.

27.08.2022 - 01:07 Uhr

Und die Daten haben auch nichts im DataGridView zu suchen, die gehören per DataBinding angebunden, wenn überhaupt.

27.08.2022 - 01:06 Uhr

Nur das er es nicht zuende gebracht hat.
In einem Task dann Thread.Sleep() aufrufen zeigt von ......

25.08.2022 - 16:16 Uhr

Schon mal in der Doku geschaut welche beiden Parameter SubString erwartet?

20.08.2022 - 11:45 Uhr

Vollkommen falsche Herangehensweise.
[Artikel] Drei-Schichten-Architektur
Ein UserControl ist zur Anzeige von Daten in einem bestimmten Format gedacht.
Deine Businesslogic hat da nichts drin verloren.
Trenne Daten von den Controls, erstelle Services für die Verarbeitung und benutze DataBinding und beschäftige dich mit den Grundlagen von Async/Await,
denn das was Du da in ApiRequest machst ist die falsche herangehensweise.

01.08.2022 - 20:06 Uhr

Oder man benutzt Blazor ( Server side ) und muss sich da nicht mehr drum kümmern ( naja fast nicht ).

28.06.2022 - 00:46 Uhr

Warum glauben eigentlich alle immer noch das der kostenlose Windows Defender durch irgendetwas anderes ersetzt werden muss?
https://www.av-test.org/de/antivirus/privat-windows/
Und der hat die Möglichkeit Verzeichnisse auszuschließen.

16.06.2022 - 13:38 Uhr

Schau dir mal SqlDependency an.
Damit kann dein Service sich beim SqlServer registrieren um bei bestimmten Änderungen informiert zu werden.

28.05.2022 - 13:06 Uhr

Warum machst du es so umständlich?
Wenn du SelectedItem bindest, wird doch der Setter aufgerufen und du kannst dort machen was du brauchst.

29.04.2022 - 16:15 Uhr

In 90% der Fälle ist auch System.Text.Encoding.UTF8 die falsche Encoding.
System.Text.Encoding.Default passt meist viel besser.

28.04.2022 - 18:34 Uhr

Und ganz wichtig, warum muss eine Console App gestartet werden?

28.04.2022 - 18:31 Uhr

Wenn comboboxen aus der DB geladen werden, läuft schon etwas schief.

Schau dir bitte die folgenden Artikel an.
[Artikel] MVVM und DataBinding
[Artikel] Drei-Schichten-Architektur

Du lädst in dem ViewModel, über die DB Schnittstelle ( Service o.ä. ) die Daten in eine Liste.
Diese "verfrachtest" du dann in die Listen für die jeweiligen CB's.
Dabei kannst du natürlich alles rausfiltern was du meinst.

09.04.2022 - 09:03 Uhr

Du hast das mit Sqlite-Net anscheinend überhaupt nicht erlesen und probierst einfach so ins blaue herum.

Das QueryAsync liefert dir eine List<Person>, wobei in den objecten in deinem Fall nur der Vorname gesetzt ist.
Ganz abgesehen davon das du [Artikelserie] SQL: Parameter von Befehlen nicht beachtest, ist es doch recht einfach, wenn du mal die Doku lesen würdest.


public async Task<Person> GetVornameAsync(int id)
       {

               var person = await _database.Table<Person>.Where(p=>p.ID==id).FirstOrDefault();
               return person;
       }

private async void LoginButton(object sender, EventArgs e)
      {
          var person =  await App.Database.GetVornameAsync(200);

          if(person!= null)
          {
              _ = DisplayAlert("Info", person.Vorname, "OK");
          }
          else
          {
              _ = DisplayAlert("Info", "ID not found", "OK");
          }
      }

06.04.2022 - 19:43 Uhr

Und wenn du die Daten nicht ins DGV gefriemelt , sondern eine Liste mit Objekten gebunden hättest, müsstest Du diese Klimmzüge gar nicht machen

01.04.2022 - 10:26 Uhr

Und?
MS Unterstützt auch nicht direkt PDF Erzeugung oder oder oder.
Gibt doch genug Projekte die das unterstützen.

29.03.2022 - 09:46 Uhr

Was hat das mit dem zu tun was ich verlinkt habe?

Mit mit WindowsFormsApplicationBase brauchst du das ganze geraffel nicht.

Hier noch einmal wie es einfacher geht
using-microsoft-visualbasic-applicationservices-to-manage-an-applications-singl

28.03.2022 - 21:29 Uhr

Ist eigentlich nicht so schwer.

Es gibt im Namespace Microsoft.VisualBasic die Klasse https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.applicationservices.windowsformsapplicationbase?view=windowsdesktop-6.0
Wenn du deine Program Klasse davon ableitest, bekommst du z.b. die überschreibbare Methode OnStartupNextInstance
Siehe what-is-the-correct-way-to-create-a-single-instance-wpf-application/19326#19326
Die frage ist zwar über WPF, aber als das "erfunden" wurde gab es WPF noch garnicht

25.03.2022 - 13:51 Uhr

Warum überhaupt Excel?

Fast alles kann CSV Dateien erzeugen/lesen, die lassen sich einfach verarbeiten und z.b. auch in Excel normal einlesen.

25.03.2022 - 00:48 Uhr

Nicht nur das, dadurch ist es so schnell, das man auch kein IAsyncEnumerable mehr braucht.
Für "alte" XLS Files ist auch GitHub - nissl-lab/npoi: a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop. geeignet

22.03.2022 - 00:55 Uhr

Wie in dem anderen Thread schon gesagt, statt irgendwas zu programmieren und dann fragen zu stellen,
sag was du erreichen willst, nicht wie du es machen willst.
Und mach nicht einfach einen neuen Thread auf, nur weil dir die Antworten im anderen nicht gefallen.

Und hör auf wild zu probieren, lies dir die Grundlagen durch.
Asynchrone Programmierung in C#
Das gilt für alles.
Einfach irgendwelchen Code zu kopieren ohne die Grundlagen zu beherrschen
bringt nur Frust auf deiner und unserer Seite

02.03.2022 - 20:40 Uhr

Es ist gar nicht so schwer.

Wenn du dir das 3 Schichten Model anschaust, siehst du das es neben
dem View noch die Logik- und die Datenschicht gibt.
MVVM als gesamtes ist lediglich die View Schicht. Es ist also nur das, was man für die Ansicht und Bearbeitung der visuellen Daten benötigt.

Die Logik ( z.b. durch Services ) und die Datenhaltung sind da nicht "drin" enthalten.

Wenn du das alles richtig trennst, kannst du die komplette Anwendung durch Unittests "simulieren"/Testen, ohne auch nur ein Fenster öffnen zu müssen.

Und Model ist wirklich nur ein Datenmodel.
Sobald du Berechnungen machst ( ausser mal ein x+y ) oder Daten holst, dann ist das kein Model, sondern ein Service.