string mission = "";
if (radioButton1.Checked) mission = "Einsatz";
if (radioButton2.Checked) mission = "Pause";
Mein Beispielcode kann in einem gemeinsamen Eventhandler stehen oder in einer Routine die die Auswahl verarbeitet, z.B. eine Save-Routine.
Es ist auf jeden Fall sinnvoll den Code robust zu gestalten wie schon oben geschrieben wurde.
So wie ich bei einem alten Röhrenradio alle Tasten gleichzeitig runterdrücken kann (wer hat das als Kind nicht probiert wer in meinem Alter ist) kann man auch nicht ausschließen dass kein Radiobutton aktiv ist oder mehrere (Falsche Groupbox etc.)
Ich habe mir das Zertifikat kostenlos bei zerossl.com geholt. Die greifen auf Letsencrypt zurück. Dort kann man angeblich keinen eigenen Server anmelden, hat aber doch funktioniert.
Sogar mit DynDNS (AceDNS) Adresse, also ohne feste IP.
Das Zertifikat gilt allerdings nur 3 Monate, dann muss es erneuert werden.
Als Verifizierung habe ich das File-Verfahren ausgewählt, man muss eine Datei auf dem Server anlegen.
Viele Einsatzkräfte (Rettungshundestaffeln, Quad-Staffel, Polizei) haben die App testweise im Einsatz und nutzen sie im Training und im Einsatz.
Die Zuverlässigkeit ist sehr gut geworden. 100% für den Betrieb im Hintergrund wird es wohl nie geben. Nicht mehr bei den ganzen Energiesparoptionen.
Die App läuft auch sehr gut in Gebieten mit schlechter Mobilfunkabdeckung über 2G und wird von einigen Einsatzkräften und Helfern in Polen und in der Ukraine benutzt.
Das Deployment dauert nur noch wenige Minuten. Wenn ich die Versionsnummer nicht ändere sondern nur die Buildnummer ist die App sogar immer sofort im App Store verfügbar.
Für die Erfassung der Einsatzkräfte habe ich eine Erfassungsmaske in ASP.NET Core mit Razor erstellt.
Das gefällt mir gut : Zahlreiche Möglichkeiten der Veröffentlichung, man kann Design und Funktionen gut trennen. Ich erstelle eine Exe-Datei die als Dienst auf dem gleichen Rechner läuft wie die GPS Server Software (Windows 10 Rechner).
das habe ich befürchtet. Trotzdem danke für die Info.
Herausgeber der Datei ist IF-Core IT Services GmbH (OpenDataLab), eine kleine Softwarefirma in 74254 Offenau. Warum die das so machen erschließt sich mir nicht, denn es wäre an dieser Stelle überhaupt nicht nötig. Man könnte die Liste immer vierfach verschachteln. Wenn die Gemeinde nur einen Polygon enthält reicht es ja in der einen Liste nur ein Element anzulegen.
Vielleicht ist das keine Absicht sondern ein Fehler im Programm ?
Dann ändere ich lieber direkt in der Json-Datei. Ich muss ja nur "coordinates":[[[ in "coordinates":[[[[ ändern. Und "]]]" in "]]]]".
Grüße Bernd
PS.: Ich zeichne die Landkreise in eine Landkarte ein, das klappt echt gut ! Und man lernt noch was in Geografie ! Die nächste Aufgabe ist es festzustellen ob ich mich im Landkreis befinde oder nicht (Point in Polygon).
ich habe eine Json-Datei die je nach Element verschiedene Typen enthält. Wie kann ich eine Json-Datei mal in eine Klasse mal in eine andere Klasse mappen ?
Wenn ich mit Json-Util eine Klasse erzeuge kommt mal das eine mal das andere raus.
Der Unterschied liegt in der Klasse GeoJsonGeometry1/2, da sind die Koordinaten einmal eine dreifach verschachtelte Liste, einmal vierfach.
Liegt wohl daran dass es Landkreisgrenzen gibt die aus einem Polygon bestehen und die Bergstraße besteht z.B. aus 3 Plygonen.
Ich würde gerne in Klassen mappen ohne in den Json-Dateien rumzufuddeln.
Grüße Bernd
// Landkreise außer Bergstraße
public class GeoJsonProperties1
{
public string name { get; set; }
}
public class GeoJsonCrs1
{
public string type { get; set; }
public GeoJsonProperties1 properties { get; set; }
}
public class GeoJsonGeometry1
{
public string type { get; set; }
public IList<IList<IList<double>>> coordinates { get; set; }
}
public class GeoJsonFeature1
{
public string type { get; set; }
public GeoJsonProperties1 properties { get; set; }
public GeoJsonGeometry1 geometry { get; set; }
}
public class GeoJson1
{
public string type { get; set; }
public GeoJsonCrs1 crs { get; set; }
public string source { get; set; }
public IList<GeoJsonFeature1> features { get; set; }
}
// Bergstraße
public class GeoJsonProperties2
{
public string name { get; set; }
}
public class GeoJsonCrs2
{
public string type { get; set; }
public GeoJsonProperties2 properties { get; set; }
}
public class GeoJsonGeometry2
{
public string type { get; set; }
public IList<IList<IList<IList<double>>>> coordinates { get; set; }
}
public class GeoJsonFeature2
{
public string type { get; set; }
public GeoJsonProperties2 properties { get; set; }
public GeoJsonGeometry2 geometry { get; set; }
}
public class GeoJson2
{
public string type { get; set; }
public GeoJsonCrs2 crs { get; set; }
public string source { get; set; }
public IList<GeoJsonFeature2> features { get; set; }
}
Ich habe im Jahr 2003 bei einer neuen Firma angefangen die Microsoft Produkte eingesetzt hat. Vorher hatte ich mit dem Datenbanksystem CONZEPT 16 gearbeitet, das eine Pascal ähnliche Programmiersprache hatte.
Damals habe ich mit Visual Studio 2003 angefangen und das hat mit gleich gut gefallen. Viele Sachen gab es damals nicht und die mussten wir nachprogrammieren :
Formulargenerator
Virtuelles Listview
ORM
Update System
for (int x = 0; x < 3; x++) // Spalten
for (int y = 0; y < 3; y++) // Zeile
for (int dir = 0; dir < 3; dir++) // Richtung
{
bool gewinn = true;
for (int anz = 0; anz < 3; anz++) // Anzahl Steine
if (Field(x + anz * Step(dir), y + anz * Step(dir) != "X")
gewinn = false;
}
Ohne Gewähr !
Ich habe immer mit eindimensionalen Arrays gearbeitet : int[] board = new int[9];
Oder int[] board = new int[25]; wenn man das Spielfeld größer macht und einen Rahmen außen rum mit -1 für nicht betretbar belegt.
So vermeidet einen Überlauf wenn das Feld so aussieht :
- - X
X X O
O O -
Wenn man dann das Spielfeld auf 19 x 19 erweitert und die Anzahl Steine für Gewinn auf 5 hätte man schon Gobang programmiert.
Mit Minimax-Strategie hab ich auch immer gearbeitet, geht bei Gobang auch gut !
Bei Datumsfeldern auch in datetime casten und dann vergleichen.
Ich würde kein TryParse benutzen. sondern in einer eigenen Tabelle oder in der Tag-Eigenschaft der Spalte den Datentyp hinterlegen.
Es können ja auch Zahlen in string Spalten stehen : Artikelnummer, Hausnummer, Postleitzahl etc.
auch funktioniert deine Routine nicht wenn in einer Zelle eine Zahl steht und in der zweiten nicht.
Obwohl listview schon sehr veraltet ist nutze ich das fleißig und klappt immer gut.
Man kann sogar ein listview so bauen dass es virtuell lädt, also bei 1 Mio. Datensätzen schon nach 1 Sekunde ein Ergebnis anzeigt (Lazy Load).
Das habe ich ungefähr im Jahr 2004 geschrieben, da gab es den guten Artikel noch nicht.
In der Extension 'ToSqlString()' habe ich zwar versucht alles rauszufiltern was zu Fehlern oder Missbrauch führen kann, hat aber nicht immer funktioniert.
Ich schreibe keinen SQL Code mehr, sondern lasse das vom ORM machen. So ist alles aufgeräumt, typsicher und selbstdokumentierend.
Weiterentwicklung und Fehlersuche ist auch viel einfacher.
Alt : if (such_ar_bez1 != "") sqlstr += "ar_bez1 LIKE '" + such_ar_bez1.ToSqlString() + "' AND ";
Neu : if (such_ar_bez1 != "") qry = qry.ar_bez1().IsLike(such_ar_bez1).And();
Das ist jetzt ein eigenes ORM, jetzt würde ich aber Dapper oder EF benutzen.
Stackoverflow (und auch MemoryOverflow) kann man nicht abfangen.
Da der Stack recht groß ist kommt der Stackoverflow meistens durch unendliche Rekursion zustande.
Prüf das mal.
Man kann aber Stackgröße und Speicherverbrauch prüfen und eine Meldung bringen "Programm bitte neu starten" wenn die Werte zu groß sind. So stürzt die Anwendung nicht ab und dem Anwender gehen keine Daten verloren.
Ich habe das mal so gemacht bis ich ein Memory Leak in der Winforms Anwendung entdeckt habe.
Wenn Du die Artikel in einer ListView anzeigst kannst Du den ListViewItemSorter nehmen, der Anwender kann dann auf einen Spaltentitel klicken und die Liste wird danach sortiert.
So wie man es von allen Windows Programmen gewöhnt ist. Beim zweiten Klick auf die Spalte wird dann umgekehrt sortiert.