Laden...

Forenbeiträge von BerndFfm Ingesamt 3.829 Beiträge

14.06.2024 - 14:13 Uhr

Nach einer Woche Arbeit läuft die App nun wieder auf dem iPhone.

Ich habe alle Programme und SDK's aktualisiert. Alle Schlüssel und Profile gelöscht und neu angelegt.

Grüße Bernd

PS.: Vorstellung der App : https://mycsharp.de/forum/threads/123742/vorstellung-projekt-finderwille-einsatz-app

11.06.2024 - 21:49 Uhr

Der Zugriff auf die Zertifikate und Profile wurde von Apple komplett neu gemacht. Nach Erstellen eines neuen Apple Connect Store API Key und entfernen des Profiles aus Visual Studio und neu Hinzufügen kann ich nun  auf die Zertifikate und Bereitstellungsprofile zugreifen.

Grüße Bernd

11.06.2024 - 21:20 Uhr

In VS2019 ist der Fehler definitiv nicht behoben, Workarounds funktionieren auch nicht.

In VS2022 ist die Fehlermeldung anders, das ist schon mal ein gutes Zeichen.

Der Mac Mini ließ sich nun verbinden und die richtige Version von Xamarin SDK und Xcode wurden installiert.

Jetzt kommt eine neue Fehlermeldung

‘there was an error while loading your certificates: The Apple Developer Portal only supports Enterprise accounts. Remove your account and re-add it as an ‘individual’ account and then try again’.

Mal sehen wie ich den Fehler weg kriege.

Ein Update auf Maui hab ich mal vor, aber eine Handy App die stabil im HIntergrund läuft ist so kompliziert dass das sicher eine längere Zeit braucht.

Grüße Bernd

06.06.2024 - 14:05 Uhr

Hallo,

jetzt wollte ich nach langer Zeit mal wieder eine neue Version meiner App für das iPhone hochladen und bekomme dabei den Fehler das es kein Bereitstellungsprofil gibt. Hab ein neues im Developer Account angelegt und will es nun in Visual Studio importieren.

Mit Optionen / Xamarin / Apple Accounts / Details anzeigen bekomme ich folgende Fehlermeldung :

Fehler beim Laden der Zertifikate: This request is forbidden for security reasons: Authentication Error. Xcode 7.3 or later is required to continue developing with your Apple ID.

Die Xcode Version auf meinem mac ist 15.4.

Beim Erstellen eines neuen Zertifikates kommt die gleiche Fehlermeldung. Download eines Zertifikates und Import in Visual Studio unter Windows funktioniert nicht. Visual Studio auf dem mac hat überhaupt keine Import Funktion. Dort kommt beim Abruf oder Erstellen von Zertifikaten die gleiche Fehlermeldung.

Gefundene Workarounds haben leider nicht funktioniert.

Kennt jemand eine Methode um Zertifikat und Bereitstellungsprofil wieder im Visual Studio zu benutzen ? Ich hab übrigens Visual Studio 2019, in 2022 tritt der Fehler wohl auch auf.

Grüße Bernd

27.02.2024 - 11:24 Uhr

Alle obigen Lösungen sind nicht für das Arbeiten in Teams ausgelegt.

In großen Firmen wird sicher Adobe Framemaker und Adobe RoboHelp eingesetzt.

Das sieht dann z.B.so aus : https://finderwille.xddns.de:7000/handbuch4/index.htm

Das hat ungefähr 1000 Mal soviele Funktionen, man braucht aber auch eine lange Einarbeitszeit.

Das Ergebnis finde ich übersichtlicher als die anderen Lösungen, also umfangreiche Inhalte lassen sich besser strukturieren.

Ich habe ca.20 Mal länger gebraucht den Text zu erstellen wie mit mkdocs. Das Inhaltsverzeichnis mit Ebenen bekomme ich überhaupt nicht hin.

Man braucht sicher 2 Wochen Schulung um das zu bedienen.

Grüße Bernd

26.02.2024 - 09:43 Uhr

Der Beitrag ist zwar schon 9 Jahre alt, aber die Anforderung Dokumentationen und Handbücher zu schreiben gibt es immer noch. Oder?

Ich stehe auch gerade vor der Herausforderung ein Online Handbuch für 2 Software Applikationen zu schreiben.

Getestet hab ich HelpNDoc : Man erreicht schnell ein Ergebnis. Man kommt aber auch schnell an seine Grenzen. Einige Sachen funktionieren nicht. Version auf dem Handy sieht sehr gut aus. Man kann ein PDF Handbuch erzeugen.

Test mit HelpNDoc : https://finderwille.xddns.de:7000/handbuch2/index.html

Help+Manual ist mir zum jetzigen Zeitpunkt zu altmodisch. Vor 9 Jahren war das vielleicht anders.

Danke für den Tipp mit Markdown und mkdocs.

Test mit mkdocs : https://finderwille.xddns.de:7000/handbuch3/index.html

Man muss sich etwas einarbeiten, aber eine sehr flexible Lösung. Ich erstelle ja einige Hilfen automatisch aus Bildschirmen. Das geht mit der Markdown Sprache wirklich einfach. Man erhält recht schnell eine moderne Oberfläche.

Mkdocs kann kein Stichwortverzeichnis (ich habs nicht gefunden) und das Inhaltsverzeichnis findet man nicht auf der mobilen Version. Deshalb habe ich beides selber programmiert und oben ins Menü eingebaut.

Hier ein schneller Entwurf eines Online Handbuches für meine Xamarin App : https://finderwille.xddns.de:7000/handbuch/index.html

Grüße Bernd

12.02.2024 - 11:23 Uhr

Die App läuft weiterhin gut und zuverlässig ! 
Beim Deployment auf iOS kommen immer mal Fehler, jetzt hat er alle private Keys verloren. Dabei mache ich mit dem mac Mini sonst nichts.

Für die Offline Karten habe ich jetzt einen Tile Server in ASP.NET Core geschrieben, das ging echt einfach und läuft sehr schnell.
So kann man sich die Karten anschauen bevor man sie auf das Handy oder Tablet lädt. Oder man benutzt die Karte im Browser.
In einem Katastrophenfall kann ein lokaler Webserver mit den Karten bis zu 200 Einsatzkräfte und auch alle Rechner mit sehr genauen Karten versorgen. Zur Erinnerung : Im Ahrtal gab es keine Karten vor Ort für die Einsatzkräfte.

Hier der Startbildschirm vom neuen Map Server / Tile Server : https://finderwille.xddns.de:5003/

Hier die Open Street Map Karte von Deutschland : https://finderwille.xddns.de:8086/deutschland_zoomlevel_16.html

Hier die Liste aller verfügbaren Karten : https://finderwille.xddns.de:8086/maps.html

Jeder Karte ist eine SQLite-Datenbank, das Format nennt sich mbtiles-Format. Viele Karten-Apps können darauf zugreifen.

Die Offline Karten von Bulgarien, Türkei, Polen und Ukraine sind übrigens bei einigen Rettungseinsätzen in Benutzung.

Grüße Bernd

04.10.2023 - 12:35 Uhr

Die Bibliothek für die Zertifikatsrerzeugung funktioniert leider nicht. Sie hat die Stammzertifikate fest einprogrammiert, und die wurden ja bei LetsEncrypt inzwischen geändert. Es gibt zwar einen Befehl um den Neuen hinzuzufügen, der funktioniert aber leider nicht.

Jetzt benutze ich doch einen fertigen Certbot unter Windows. Der funktioniert auf Anhieb.

Website mit Zertifikat : https://finderwille.xddns.de:8086/

Ist eine SSD die in einen Raspberry Pi kommt.

Grüße Bernd

03.10.2023 - 12:43 Uhr

Hiermit muss ich meine Empfehlung für ZeroSSL zurücknehmen.

Jede Verlängerung eines 90-Tage Zertifikates zählt als neues Zertifikat. So muss man bei der vierten Verlängerung einen BASIC Plan für 10 oder 50$ pro Monat abschließen. Also reine Abzocke. Denn bei LetsEncrypt sind die SSL Zertifikate natürlich dauerhaft kostenlos.

Da ich ja eine dynamische IP habe kann ich die fertigen Lets Encrypt Clients nicht benutzen, die einen DNS-Zugriff auf die Domain verlangen. Ich mache die Überprüfung per http.

Hat jemand einen Tipp für einen Client oder Website ? Oder muss man das selber programmieren ?

Grüße Bernd

29.08.2023 - 13:58 Uhr

Man kann auch einfach eine Textbox mit Rahmen zeichnen.

Benutze ich z.B. in einem Fall für einen Fortschrittsbalken.

Grüße Bernd

28.08.2023 - 21:28 Uhr

Ich mach das in Xamarin.Forms so, sollte in Maui genauso funktionieren :

Nicht vergessen im Manifest die Berechtigungen zu setzen !

var customFileType = new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
{
	{ DevicePlatform.iOS, new[] { "geojson", "gpx", "kml" } },
	{ DevicePlatform.Android, new[] { "geojson", "gpx", "kml" } }
});
var options = new PickOptions
{
	PickerTitle = "Eine Gpx-, Kml- oder Geojson-Datei auswählen"
	FileTypes = customFileType,
};
IEnumerable<FileResult> results = await FilePicker.PickMultipleAsync(options);
if (results == null) return;
foreach (FileResult result in results)
{
	if (result.FullPath.ToLower().EndsWith(".kml"))
	{
		...
	}
}
14.08.2023 - 21:25 Uhr

Zitat von JayDee72

auf dem WebServer läuft kein SQL Dienst

Auf dem Rechner mit dem SQL Server muss der Dienst "SQL Browser" laufen.

Grüße Bernd

14.08.2023 - 21:24 Uhr

Auf dem Rechner mit dem SQL Server muss der Dienst "SQL Browser" laufen.

Grüße Bernd

14.08.2023 - 15:18 Uhr

Welche SQL Server Version ? SQLEXPRESS ?

Du musst den Dienst SQL Browser aktivieren. Dann musst Du das Protokoll TCP/IP aktivieren. Dann Firewall Regeln einrichten oder beide Firewalls testweise abschalten.

Probiere von dem IIS Rechner aus per SQL Management Studio den SQL Server zu erreichen.

Grüße Bernd

14.08.2023 - 15:03 Uhr

Sicher dass IIS und SQL Server auf dem gleichen Rechner laufen ?

Was passiert mit dem lokalen IIS ohne Debug ?

Was passiert wenn man den IIS aus dem Netz anspricht mit Debug Version ?

Ist der Connectionstring in allen Fällen wirklich gleich ?

Grüße Bernd

03.05.2023 - 22:09 Uhr

Speichere das Projekt mal nach C:\Net

Im Vorgänger Xamarin Forms war regelmäßg ein Pfad zu lang für Windows. Da kam dann die gleiche Fehlermeldung.

Grüße Bernd

25.02.2023 - 17:02 Uhr

Eine Übertragung von einer in eine andere Datenbank würde ich nicht über den Umweg XML machen.

Ich lese und schreibe direkt, Voraussetzung ist natürlich dass beide Datenbank vom Rechner aus erreichbar sind.

So kann ich Typen umwandeln wenn nötig und auch Fehler abfangen, z.B. Spalte zu lang.

Gerade wenn die Übertragung öfter passiert ist schnell mal ein Feld verlängert in FoxPro.

Bei der Übertragung von SQL Server nach Oracle oder nach MySQL müssen z.B. Bit Typen oder Double Typen umgewandelt werden.


foreach (string tab in Tables())
{
...
	for (int i = 0; i < ds.Tables[tab].Rows.Count; i++)
	{
		...
		foreach (DataColumn col in ds.Tables[tab].Columns)
			foreach (DataColumn col2 in ds2.Tables[tab].Columns)
				if (col.ColumnName == col2.ColumnName)
					ds2.Tables[tab].Rows[0][col.ColumnName] = ConvertColumn(ds.Tables[tab].Rows[i][col.ColumnName]);
	}
}

Grüße Bernd

01.02.2023 - 22:34 Uhr

Ich würde eine weitere Seite öffnen.

Ein Fenster wo man das untere Fenster noch sieht benutzt man in der Regel auf Handys und Tablets nicht.



 Navigation.PushModalAsync(new SamplePage(), true);

...

Navigation.PopModalAsync(true)


Grüße Bernd

01.01.2023 - 22:23 Uhr

Ich habe jetzt ja schon einige Bildschirme mit XAML in Xamarin.Forms gemacht und ich finde die Benutzerfreundlichkeit beim Entwerfen sehr schlecht.

Man muss viele Sachen manuell machen. Bei verschiedenen Auflösungen des Displays, kommt bei Handys dauernd vor, muss man Buttongröße und Schriftgröße selber per Programm anpassen.

Abstände und Abstand zum Rand muss man auch für jedes Auflösung und für jedes Gerät einzeln berechnen.

Einige Controls sind nicht brauchbar, so ist es seit Jahren bekannt dass der Datetime Picker im Darkmode schwarz auf schwarz darstellt. Ich hoffe das ist in Maui besser.

Grüße Bernd

17.12.2022 - 23:41 Uhr

Die Berechtigung muss der Anwender manuell einstellen.

Beachte dass /storage/emulated/0/ im Handy Speicher gespeichert wird, /storage/sdcard1/ wird auf der SD-Card gespeichert.

Ich lese die beiden so :


 Parameter.SdCardPath = "";
Parameter.SdCardPath2 = "";
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)   // ab API 19
{
    var dirs = GetExternalFilesDirs(null);
    if (dirs.Length > 1) Parameter.SdCardPath = dirs[1].AbsolutePath;
    if (dirs.Length > 1) Parameter.SdCardPath2 = dirs[0].AbsolutePath;
}

Grüße Bernd

15.12.2022 - 22:30 Uhr

So genau verstehe ich das nicht , aber ich glaube Du meinst :

[FAQ] Kommunikation von 2 Forms

Grüße Bernd

12.12.2022 - 19:47 Uhr

Ich hoffe meine Ausgangslage ist verständlich ausgedrückt

Ja, geht so.

Wieso der Umweg über die Listen ? Man könnte doch die Daten beim Lesen direkt in der Datenbank verarbeiten.

Insert kann man so machen, aber unbedingt Parameter benutzen. Und keine Umlaute in Spaltennamen.

[Artikelserie] SQL: Parameter von Befehlen

Ist den zu 100% sicher dass es den Artikel noch nicht in der Datenbank gibt ?

Was soll passieren wenn es den Artikel schon gibt ?

Aus welcher Tabelle soll der Artikel gelöscht werden ?

In "pfad" hast Du den Dateinamen mit Pfad und in "file" hast Du die Extension.

Schreib besser so :


string file = openFileDialog.FileName;
string ext = Path.GetExtension(file);
if (ext == ".txt")
    ...

Grüße Bernd

11.12.2022 - 18:22 Uhr

Bei Stackoverflow finde ich zu dem Fehler :

I resolved it by using nuget package manager to install Mysql.Data and also installed System.Security.Permissions. This solved my problem.

Grüße Bernd

06.12.2022 - 20:41 Uhr

Also ich habe es so gemacht und wenn ich es Debugge und in einer textBox ausgebe funktioniert es auch. Gibt es Verbesserungsvorschläge?

Ja, das passt so.

Ich würde es so machen :


private bool PruefeSchnapszahl()
{
    string zahl = Int32.Parse(textBox1.Text).ToString();
    if (zahl.Length < 2) return false;
    for (int i = 1; i < zahl.Length; i++) if (zahl[i] != zahl[0]) return false;
    return true;
}

Grüße Bernd

06.12.2022 - 19:18 Uhr

SSH ist dafür gedacht. Skript ausführen :


string host = "...";
string cmd = "tar -cvzpf /home/backup/" + dir + @"_$(date +\%F_\%H\%M\%S).tar.gz www/" + dir + "/";
ConnectionInfo info = new ConnectionInfo(host, 22, "...", new AuthenticationMethod[] { new PasswordAuthenticationMethod("...", "...") });
SshClient client = new SshClient(info);
try
{
	client.Connect();
	Thread.Sleep(1000);
	while (!client.IsConnected) { }
	var result = client.RunCommand(cmd);
}
catch (Exception ex)
{
	Error("Fehler beim Verbinden mit der SSH Shell :\r\n\r\n" + ex.Message);
}
client.Disconnect();
client.Dispose();

Grüße Bernd

06.12.2022 - 09:58 Uhr

Eingebettete Resource lesen :


string file = "test.json";
using (StreamReader s = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("XamarinForms.LocationService.Resources." + file)))
{
	return s.ReadToEnd();
}
return "";

Grüße Bernd

05.12.2022 - 21:48 Uhr

Ich benutze File.ReadAllText(file) mit using System.IO, läuft einwandfrei.

Visual Studio 2019 mit Xamarin.Forms Version 5.0.0.

Da stimmt irgendwas nicht, denn das sollte auf Anhieb funktionieren.

Grüße Bernd

30.11.2022 - 10:56 Uhr

-> BerndFfm: nein, not supported

In Xamarin.Forms wird es leider auch nicht supported so wie ich es gebraucht hätte.

Schnell ein Bubble Sort geschrieben, das klappt gut :


private void SortDevices(ref List<ListDevice> devices)
{
	if (devices.Count < 2) return;
	for (int j = 0; j < devices.Count - 1; j++)
		for (int k = j + 1; k < devices.Count; k++)
			if (IsGreater(devices[k], devices[j]))
			{
				ListDevice tdev = devices[j];
				devices[j] = devices[k];
				devices[k] = tdev;
				j = 0;
			}
}

Grüße Bernd

29.11.2022 - 20:30 Uhr

Kannst Du Deine Liste nicht mit List<T>.Sort() sortieren ?

Grüße Bernd

22.11.2022 - 09:41 Uhr

Ich benutze in einfachen Projekten auch immer eine Json-Datei für Settings.

Das hat viele Vorteile : Du musst dich nicht um Datentypen und -wandlung kümmern, man kann beliebig Einträge hinzufügen oder weglassen. Nur nachträglich keine Typen ändern.

Bei portablen Apps kann man die Json-Datei auch auf dem USB-Stick speichern.

Man kann auch einfach mehrere Settings anlegen und zwischen verschiedenen Settings umschalten.

Grüße Bernd

21.11.2022 - 11:48 Uhr

Ja, dafür ist der Name-Tag nicht gedacht gewesen.

Wir kennen zuwenig Anforderungen des Thread Erstellers um mehr Tipps geben zu können.

Ist es eine variable Anzahl ? Oder eine feste Anzahl ? Größer 10 ?

In WPF ist eine Liste mit Labels und Data Binding auf jeden Fall die bessere Lösung :


            <ListView x:Name="lvi_devices" ItemTapped="Listview_ItemTapped" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <ListView.Header>
                    <Grid ColumnDefinitions="1*" HorizontalOptions="FillAndExpand">
                        <Label Text="Name" FontSize="13" Grid.Column="0"></Label>
                    </Grid>
                </ListView.Header>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid ColumnDefinitions="1*" HorizontalOptions="FillAndExpand">
                                <Label Text="{Binding name}" FontSize="17" Grid.Column="0"></Label>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

Grüße Bernd

21.11.2022 - 08:43 Uhr

Wenn Du die Labels im Code anlegst nach Bedarf dann kannst Du sie als Array anlegen und über Index ansprechen :


Label[] lbl = new Label[100];
...
lbl[i].Content = subs[i];

Wenn Du sie per Hand angelegt hast dann kannst Du nicht per Index ansprechen, aber andersrum geht es :


foreach (var child in ...Children)
    for(int i = 0; i < 100; i++)
    {
         if (child.Name = "lbl_"+ i.Tostring()) child.Content = subs[i];
    }

Wäre nicht eine Tabelle oder Grid besser für die Darstellung vieler Zahlen ?

Grüße Bernd

20.11.2022 - 16:41 Uhr

Ich benutze Android.Forms Version 5.0.0.2012+671 vom 2. Februar 2021.

Wenn es funktioniert ist es mir egal ob es deprecated ist.

Grüße Bernd

19.11.2022 - 23:32 Uhr

Hab im Android Projekt in der csproj-Datei den Eintrag

<DebugType>portable</DebugType>

geändert in

<DebugType>full</DebugType>

Jetzt wird die Stelle angezeigt wo der Fehler auftritt.

Schade dass das nicht die Standard Einstellung ist und auch nirgendwo dokumentiert ist.

Grüße Bernd

19.11.2022 - 15:50 Uhr

Ich habe Version 16.11.21, also die aktuellste Version.

Grüße Bernd

19.11.2022 - 13:07 Uhr

Der Fehler war in meinem C# Code.

Diese Anzeige bekomme ich bei jedem Fehler.

Breakpoint setzen und Debugging funktioniert.

Grüße Bernd

18.11.2022 - 20:25 Uhr

Leider zeigt mir das Visual Studio bei einem Fehler nie die Zeile an wo der Fehler auftritt. Das macht die Fehlersuche immer sehr schwierig.

Folgendes wird bei einem Fehler im Debug Mode angezeigt :

Fehlermeldung:

Die Anwendung befindet sich im Haltemodus

Ihre App wurde angehalten, aber es gibt keinen anzuzeigenden Code, da alle Threads externen Code ausgeführt haben (normalerweise System- oder Frameworkcode).

Details anzeigen :


Microsoft Visual Studio

EXCEPTION: Mono.Debugger.Soft.VMNotSuspendedException: The vm is not suspended.

bei Mono.Debugger.Soft.VirtualMachine.ErrorHandler(Object sender, ErrorHandlerEventArgs args) in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\VirtualMachine.cs:Zeile 367.

bei Mono.Debugger.Soft.Connection.SendReceive(CommandSet command_set, Int32 command, PacketWriter packet) in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\Connection.cs:Zeile 1806.

bei Mono.Debugger.Soft.VirtualMachine.Resume() in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\VirtualMachine.cs:Zeile 139.

bei Mono.Debugging.Soft.SoftDebuggerSession.HandleEventSet(EventSet es) in C:\A\1\5\s\External\debugger-libs\Mono.Debugging.Soft\SoftDebuggerSession.cs:Zeile 1871.

bei Mono.Debugging.Soft.SoftDebuggerSession.EventHandler() in C:\A\1\5\s\External\debugger-libs\Mono.Debugging.Soft\SoftDebuggerSession.cs:Zeile 1772.


OK

Wie kann man erreichen dass beim VS 2019 bei Xamarin Forms die Zeile angezeigt wird wo der Fehler auftritt ?

Grüße Bernd

18.11.2022 - 10:22 Uhr

Ein virtuelles ListView kann man nach Bedarf nachladen, so dauert die Anzeige von mehreren Millionen Datensätzen nur 0,2 Sekunden. Glaubt man.

Ich habe immer ein Suchfeld zum Eingrenzen und dann auf Knopfdruck ein ListView.

Grüße Bernd

17.11.2022 - 10:06 Uhr

Das muss natürlich dann so heißen :


txtWorkDays.Text = DaysAmount(dateStart, dateEnd, false).ToString();
txtHolidayDays.Text = DaysAmount(dateStart, dateEnd, true).ToString();

Vergiss bitte meinen Code von 13:05 Uhr, nimm lieber den vorherigen.

Sinn das alles in eine Methode zu packen macht es dann wenn es mal mehrere Arten von errechneten Werten geben soll.

Grüße Bernd

16.11.2022 - 13:05 Uhr

Sollte auch so gehen :


public int DaysAmount(DateTime dtpStart, DateTime dtpEnd, bool holidays)
{
    int days = 0;
    List<DateTime> holidaylist = HolidayDays();
    for (DateTime date = dtpStart; date ≤ dtpEnd; date = date.AddDays(1))
        if (!holidays && dtpStart.DayOfWeek != DayOfWeek.Sunday && !holidaylist.Contains(date)) days++;
        else days++;
    return days;
}

private List<DateTime> HolidayDays()
{
    List<DateTime> holidaylist = ...
    return holidaylist;
}

Grüße Bernd

16.11.2022 - 10:36 Uhr

Wenn Du nur eine Methode haben willst, die dann aber zweimal aufgerufen wird geht das auch so :



int wdays = DaysAmount(dtpStart, dtpEnd, false);
int hdays = DaysAmount(dtpStart, dtpEnd, true);

...

public int DaysAmount(DateTime dtpStart, DateTime dtpEnd, bool holidays)
{
    int days = 0;
    List<DateTime> holidaylist = HolidayDays();
    for (DateTime date = dtpStart; date ≤ dtpEnd; date = date.AddDays(1))
    {
        if (holidays && (dtpStart.DayOfWeek == DayOfWeek.Sunday || holidaylist.Contains(date))) days++;
        if (!holidays && dtpStart.DayOfWeek != DayOfWeek.Sunday && !holidaylist.Contains(date)) days++;
    }
    return days;
}

Sehe ich aber keinen so großen Vorteil.

Grüße Bernd

15.11.2022 - 12:06 Uhr

Auch in der Methode TestAmount stimmt die Logik nicht. Du gibst immer eine 1 zurück. Du willst aber sicher die Anzahl der Tage wissen.

Das könnte so aussehen :


public int HolidaysAmount(DateTime dtpStart, DateTime dtpEnd)
{
    int hdays = 0;
    List<DateTime> holiday = HolidayDays();
    for (DateTime date = dtpStart; date ≤ dtpEnd; date = date.AddDays(1))
        if (dtpStart.DayOfWeek == DayOfWeek.Sunday || holiday.Contains(date))
            hdays++;
    return hdays;
}

Du brauchst 2 Methoden weil Du ja 2 Werte berechnen willst. Oder Du nutzt eine Methode und übergibst die Werte per ref.

Grüße Bernd

13.11.2022 - 22:36 Uhr

Die kostenlose Variante ist sehr holprig, der kostenpflichtige Account ist da viel besser.

Deployment muss man auf dem Mac machen da auf einem Windows Rechner aus Sicherheitsgründen seit einiger Zeit keine private Key mehr gespeichert werden. Leider ist das kaum dokumentiert.

Das iPhone muss am Mac angeschlossen sein, zumindestens beim M1 Mac. Der Emulator auf dem Windows Rechner bringt leider nur einen schwarzen Bildschirm.

Ich freue mich dass mit MAUI das nun alles besser unterstützt wird, getestet habe ich es noch nicht.

Grüße Bernd

08.11.2022 - 20:31 Uhr

Um 22:00 Uhr kommt .NET MAUI !

31.10.2022 - 22:47 Uhr

Zumindestens bei Rechnungen gibt es in Deutschland genaue Vorschriften, und da muss nach jeden Zwischenschritt, der ausgegeben wird, gerundet werden.

Sonst erfüllt man die nicht Vorgaben für Rechnungen gemäß Umsatzsteuergesetz und den Grundsätzen der ordnungsgemäßen Buchführung.

Grüße Bernd

30.10.2022 - 21:23 Uhr

Kaufmännische Runden erfolgt, wenn man alles berechnet hat - am Ende.

Es wird nach jedem Zwischenschritt der ein Ergebnis ausgibt gerundet.

Sonst könnte man die Rechenschritte nicht nachvollziehen.

Grüße Bernd

20.10.2022 - 13:04 Uhr

Selber einen Parser bauen, dazu brauchst Du Split(), SubString() und Double.Parse().

Oder Regex benutzen.

Grüße Bernd

15.10.2022 - 10:41 Uhr

Danke !!!

Das wars, jetzt läuft die App bei mir wieder stabil. Bei einigen wenigen Leuten kommt es aber immer wieder zu Abstürzen.

Ich werde jetzt mal das Update mit dieser Fehlermeldung verteilen und schauen ob ich was finde.

Danke nochmal Grüße Bernd

14.10.2022 - 19:00 Uhr

Toll !

Jetzt hab ich einen Fehler der absolut unregelmäßig auftritt. Und ich hab keinen Plan wo.

Wie findet man den jetzt ?

Grüße Bernd

14.10.2022 - 11:58 Uhr

Leider funktioniert das nicht.

Merkwürdig ist dass das Debuggen funktioniert mit Anzeige des Source Code.

Die App läuft auf einem externen Device über USB oder WLAN angebunden. Ein Samsung Galaxy S6 Tablet.

Den Methodennamen in der der Fehler aufgetreten ist kennt das StackTrace, nur die Zeilennummer nicht.

Grüße Bernd