Thema: Wie funktioniert die Seitennavigation in MAUI?
Am 01.02.2023 - 22:34 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: UI Themes zur Verwendung mit .NET MAUI
Am 01.01.2023 - 22:23 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: MAUI.net Android - Auf externen Speicher zugreifen
Am 17.12.2022 - 23:41 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: Wie kann ich in C# aus einer zweiten Datei "2.cs" Buttons in "1.cs" verändern?
Am 15.12.2022 - 22:30 im Forum: Grundlagen von C#
So genau verstehe ich das nicht , aber ich glaube Du meinst :
[FAQ] Kommunikation von 2 Forms
Grüße Bernd
Thema: Daten aus txt-File einlesen und mit Datenbank vergleichen
Am 12.12.2022 - 19:47 im Forum: Datentechnologien
Zitat
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
Thema: Fehlermeldung bei Datenbank-Verbindung
Am 11.12.2022 - 18:22 im Forum: Datentechnologien
Bei Stackoverflow finde ich zu dem Fehler :
Zitat
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
Thema: Schnapszahl finden
Am 06.12.2022 - 20:41 im Forum: Grundlagen von C#
Zitat von Apollo56
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
Thema: Von einem C# Programm aus einen Linux Rechner steuern
Am 06.12.2022 - 19:18 im Forum: Rund um die Programmierung
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
Thema: Inkompatibilität Xamarin Forms System.IO
Am 06.12.2022 - 09:58 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: Inkompatibilität Xamarin Forms System.IO
Am 05.12.2022 - 21:48 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: Fragen zum Sortieren
Am 30.11.2022 - 10:56 im Forum: GUI: Windows-Forms
Zitat von kstanger
-> 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
Thema: Fragen zum Sortieren
Am 29.11.2022 - 20:30 im Forum: GUI: Windows-Forms
Kannst Du Deine Liste nicht mit List<T>.Sort() sortieren ?
Grüße Bernd
Thema: Best Practise für Datenspeichern
Am 22.11.2022 - 09:41 im Forum: Basistechnologien und allgemeine .NET-Klassen
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
Thema: Objektname als Variable
Am 21.11.2022 - 11:48 im Forum: Grundlagen von C#
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
Thema: Objektname als Variable
Am 21.11.2022 - 08:43 im Forum: Grundlagen von C#
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
Thema: Error Handling in Xamarin Forms
Am 20.11.2022 - 16:41 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: Error Handling in Xamarin Forms
Am 19.11.2022 - 23:32 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: Error Handling in Xamarin Forms
Am 19.11.2022 - 15:50 im Forum: Cross Platform Entwicklung - Mobile und IoT
Ich habe Version 16.11.21, also die aktuellste Version.
Grüße Bernd
Thema: Error Handling in Xamarin Forms
Am 19.11.2022 - 13:07 im Forum: Cross Platform Entwicklung - Mobile und IoT
Der Fehler war in meinem C# Code.
Diese Anzeige bekomme ich bei jedem Fehler.
Breakpoint setzen und Debugging funktioniert.
Grüße Bernd
Thema: Error Handling in Xamarin Forms
Am 18.11.2022 - 20:25 im Forum: Cross Platform Entwicklung - Mobile und IoT
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 :
Fehler
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
Thema: ComboBox mit großer Datenmenge
Am 18.11.2022 - 10:22 im Forum: GUI: Windows-Forms
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
Thema: For Loop mit Abzweigung
Am 17.11.2022 - 10:06 im Forum: Grundlagen von C#
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
Thema: For Loop mit Abzweigung
Am 16.11.2022 - 13:05 im Forum: Grundlagen von C#
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
Thema: For Loop mit Abzweigung
Am 16.11.2022 - 10:36 im Forum: Grundlagen von C#
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
Thema: For Loop mit Abzweigung
Am 15.11.2022 - 12:06 im Forum: Grundlagen von C#
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
Thema: Einfaches Deployment einer Xamarin Test-App
Am 13.11.2022 - 22:36 im Forum: Cross Platform Entwicklung - Mobile und IoT
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
Thema: Heute kommt .NET 7
Am 08.11.2022 - 20:31 im Forum: Szenenews
Um 22:00 Uhr kommt .NET MAUI !
Thema: Kaufmännisch Runden
Am 31.10.2022 - 22:47 im Forum: Grundlagen von C#
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
Thema: Kaufmännisch Runden
Am 30.10.2022 - 21:23 im Forum: Grundlagen von C#
Zitat von Abt
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
Thema: Polynomkoeffizienten aus string in double[] parsen
Am 20.10.2022 - 13:04 im Forum: Grundlagen von C#
Selber einen Parser bauen, dazu brauchst Du Split(), SubString() und Double.Parse().
Oder Regex benutzen.
Grüße Bernd