Hallo,
schau mal hier: .NET 6 C# Konsolen-App-Vorlage generiert Anweisungen auf oberster Ebene
Hallo,
es kommt wie immer drauf an.
Wenn du dich mit den Grundlagen beschäftigen willst, zum Beispiel Vererbung, Werttypen, Verweistypen, Schleifen, Listen, usw. oder auch debuggen, dann macht sich eine Konsolenanwendung meistens besser. Man kann sich vieles sofort in der Konsole ausgeben lassen.
Wenn du aber etwas machen willst, was mit der Oberfläche zusammenhängt, dann nimm Winforms.
Hallo MM72,
wie stellst du dir die Hilfe vor? Was möchtest du genau wissen?
Wenn ich mir dein Problem mit dem BinaryWriter ansehe, würde ich sagen, du hast noch nie was von C# gehört. Dir fehlen die absoluten Grundlagen.
Als Hilfe empfehle ich dir folgende Links:
Einführung in C#
Objektorientiertes Programmieren (C#)
keine Erfahrung damit. Einfach mal ausprobieren.
Soweit die Theorie, in der Praxis wird es je nach Preislage der Geräte größere oder kleinere Abweichungen geben. Als grobe Richtlinie mag es gehen. Je nachdem, wie deine Anforderungen sind, wirst du wohl um eine Kalibrierung nicht herum kommen. Es kommt ja auch darauf an, welche Daten vom Gerät an den PC übermittelt werden, wie genau sie sind und was es für Einstellungen gibt.
Hallo
Erst einmal ein Hinweis. Für Code bitte die entsprechenden Code-Tags verwenden. Ist besser lesbar.
Und dann hast du das Problem, was viele haben. Code kopiert und nicht verstanden.
Schau dir mal den Modulo-Operator an.
Arithmetische Operatoren (C#-Referenz)
C# Modulo Examples
und dann noch den bedingte Operator ?:
Operator „?“ (C#-Referenz)
Hallo
schau dir mal das MVVM-Entwurfsmuster an, dann lösen sich deine Probleme von alleine.
[Artikel] MVVM und DataBinding
Wenn man LINQ nicht möchte, dann kann man es auch in der klassischen Schreibweise machen:
var input = "112345564736643954836255";
Dictionary<char,int> result = new Dictionary<char, int>();
foreach (var c in input.ToCharArray())
{
if (result.ContainsKey(c))
{
result[c] = result[c] + 1;
}
else
{
result.Add(c, 1);
}
}
foreach (var r in result)
{
Console.WriteLine($"Zeichen: '{r.Key}' Anzahl: {r.Value}");
}
Übrigens, programmieren heißt nicht, Code von anderen einzusammeln
Das passende Algorithmus in einem US-Forum gefunden.
sondern sich selber Gedanken zu machen. Und dein Problem sollte man auch als Anfänger problemlos selber hinbekommen. Du hast auch nie klar formuliert, wo dein Problem liegt. Immer nur die angebotene Hilfe als nicht hilfreich abgelehnt. So bekommst du nie selbstständig ein Programm hin.
Ich verstehe jetzt dein Problem nicht. Hast du überhaupt verstanden, was mein Code macht? Außerdem widersprichst du dir in deinen Anforderungen. Mal schreibst du von Echtzeit und mal reagieren auf den ok-Button. Was denn nun? Ist aber egal, bei Echtzeit reagierst du auf des Changed-Event und bei ok auf das Click-Event. In beiden Fällen übergibst du den Text meiner Methode und erhältst eine List. In dieser steht, welches Zeichen wie häufig in dem Text gefunden wurde. Damit kannst du die Punkte in deinem Diagramm erzeugen. Das könnte in einen flotten 3-Zeiler passen.
Hallo,
meinst du sowas?:
var input = "112345564736643954836255";
var output = input.GroupBy(x => x).OrderBy(c=> c.Key).Select(g=> new {zeichen = g.Key, count = g.Count()});
Du nimmst den String, gruppierst die Zeichen, sortierst die Zeichen und gibst die Zeichen mit der Anzahl zurück.
Das übergibst du dem Diagramm (Balken). X-Achse sind die Zeichen und Y-Achse die Anzahl.
Hallo,
siehe hier: [FAQ] Kommunikation von 2 Forms
Hallo,
isVisible kannst du nicht setzen. Dafür gibt es Visibility.
Siehe hier: Binding a Button's visibility to a bool value in ViewModel
Dafür gibt es diesen Converter: BooleanToVisibilityConverter Klasse
du solltest dich unbedingt mal mit den Grundlagen beschäftigen.
var window = new DeinFensterName();
window.Show();
Du meinst bestimmt ein Window.
Schau mal hier: Öffnen eines Fensters oder Dialogfelds (WPF .NET)
Schau dir mal diesen Artikel an: [FAQ] Das .NET Ökosystem - .NET, .NET Core, .NET Standard, NuGet und Co
Hallo,
suchst du sowas Byte-Array direkt in ein struct "kopieren"?
Hallo, für mich ist etwas verwirrend, dass in der Überschrift von txt die Rede ist, im ersten Beitrag aber plötzlich von pdf und nun wieder von txt. In der Auswertung spielt es dann zwar keine Rolle mehr, aber passt halt irgendwie nicht zusammen.
Also das funktioniert bei mir:
for (int i = 0; i < 100; i++)
{
int j = 5 * (i / 5);
Console.WriteLine($"{i:00} => {j:00}");
}
und raus kommt das gleiche wie bei dir:
00 => 00
01 => 00
02 => 00
03 => 00
04 => 00
05 => 05
06 => 05
07 => 05
08 => 05
09 => 05
10 => 10
11 => 10
12 => 10
...
83 => 80
84 => 80
85 => 85
86 => 85
87 => 85
88 => 85
89 => 85
90 => 90
91 => 90
92 => 90
93 => 90
94 => 90
95 => 95
96 => 95
97 => 95
98 => 95
99 => 95
Hallo,
schau dir mal diese beiden Artikel an:
[Artikel] Drei-Schichten-Architektur
[Artikel] MVVM und DataBinding
Ah ok,
dir geht es also darum, zu einem genau festgelegten Zeitpunkt den Messwert zu lesen.
Da würde ich zwei Lösungswege sehen.
Möglichkeit eins wäre die Softwarelösung. Da müsste man mit den bekannten Problemen leben. Ein normaler Büro-PC hat nun mal meistens andere Aufgaben. Man kann vielleicht an manchen Stellen noch schrauben, aber sicher kann man sich nie sein.
Möglichkeit zwei wäre eine Lösung mit externem Mikrocontroller. (z.B. Arduino Nano) Natürlich viel größerer Aufwand, aber man hat die volle Kontrolle. Der Controller puffert die Daten und der PC holt sie irgendwann ab.
Welche Variante die bessere ist, musst du entscheiden. Wenn die Daten nur für dich sind und du mit den Ungenauigkeiten leben kann, dann Variante eins.
Hallo,
nur um das Problem besser zu verstehen, welche Betriebsart hat der Modbus? An welcher Stelle brauchst du diese Genauigkeit?
Hallo JensWa,
deine Zeitrechnerei sieht ja gruselig aus.
Um zwei Zeiten zu subtrahieren schau dir das mal an:
DateTimeOffset.Subtract Methode/DateTime.Subtract Methode.
Man kann aber auch das verwenden: Stopwatch Klasse
Bei beiden Varianten kommt das raus: TimeSpan Struktur
Und damit kann man auch schön rechnen und vergleichen.
Hallo,
meinst du so etwas?: Byte-Array direkt in ein struct "kopieren"
Also ich würde es mit einer Schleife machen, geht am einfachsten.
byte[] bytes = { 10, 11, 12, 13, 14 };
var coll = new ConcurrentQueue<int>(bytes.Select(b => (int)b));
Was meinst du eigentlich mit
ich möchte eigentlich der Array addieren können
?
Man kann auch weiterhin eine eigenständige Lizenz erwerben.
Visual Studio-Preise
warum nicht gleich auf .NET 6?
Also bei mir steht bei den Beiträgen Abt Beiträge: 16.280 und in der Mitgliederliste Abt 16280 Beiträge. Vorausgesetzt wir meinen auch das Gleich. 😉
Datenbanken ist nicht unbedingt das Level für einen Einsteiger. Dabei gibt es viel zu beachten. Nur weil etwas funktioniert und es keine Fehlermeldung gibt, ist es nicht unbedingt richtig. Dabei muss man viel wissen und besonders auch verstehen. Und bei Grundlagen sollte es keine Fragen mehr geben.
Du solltest dich ganz ganz ganz dringend mal mit den Grundlagen von C# auseinandersetzen, ansonsten bleibst du bei jedem kleinen Problem hängen.
Zum Thema Datenbank und Parameter noch dieser Link: Befehle und Parameter
Das stand doch alles schon in den Antworten drin.
DateTime einsatzbeginn = dateTimePickerEinsatzbeginn.Value;
DateTimeOffset einsatzbeginnOffset = new DateTimeOffset(einsatzbeginn);
oder in einer Zeile:
DateTimeOffset einsatzbeginn = new DateTimeOffset(dateTimePickerEinsatzbeginn.Value);
Du solltest anstelle von dateTimePickerEinsatzbeginn.Text dateTimePickerEinsatzbeginn.Value verwenden. Und nicht String oder Integer verwenden, sondern DateTimeOffset. Nun ist das Value vom Type DateTime. Wie du das verwendest hat dir Abt geschrieben. Ob du nun wirklich DateTimeOffset brauchst, oder ob DateTime reicht, darüber kann man philosophieren. Hängt auch davon ab, wie du die Datenbank gestaltest. Siehe hier: Datums- und Zeitdaten
Hallo Markus1510,
gerade wenn man blutiger Neuling ist, dann sollte man Ratschläge auch annehmen und nicht einfach ignorieren.
Den String, den du von dateTimePickerEinsatzbeginn.Text erhältst, den wird deine Datenbank nicht verstehen. So steht es auch in der Fehlermeldung. Darum nutze zum zwischenspeichern DateTimeOffset und zum schreiben in die Datenbank SQL Parameter.
Durchprobieren ist kein guter Weg. Beschäftige dich unbedingt mit den Grundlagen. Überlege dir, wie du einen Wert speicherst. Für Datum und Zeit nutzt man im allgemeinen DateTimeOffset.
Hallo
Dein Code ist sehr interessant 😉 Den Text aus dem DateTimePicker versuchst du in ein Integer umzuwandeln. Das kann nicht funktionieren, da dort irgendwas mit Zeit drin steht. Warum soll einsatzbeginn ein Integer sein? Ein DateTimeOffset wäre da bestimmt besser. Und das kannst du direkt aus DateTimePicker.Value übernehmen.
Schau dir mal die Doku an. DateTimePicker Klasse
Hallo,
ich hab von Blazor keine Ahnung, aber Google hat mir folgenden Link ausgespuckt: Multiple Windows In ASP.NET Core Blazor
Es gibt noch ein weiteres Problem in der Suche. Unter Tipps steht:
Verwende + als einfache UND-Verknüpfung.
Wenn ich ein "+" einfüge, dann erfolgt keine Und-Verknüpfung, aber er findet das "+" im Text.
Hallo,
wenn ich dich richtig verstehe, dann geht es um 2 Probleme. Das eine Problem ist das Lesen der Daten und das Zweite ist die Anzeige.
Willst du die Daten nur anzeigen, oder sollen sie weiter verarbeitet werden?
Um die Datei einzulesen schau dir mal dies an: Reading|CsvHelper
Sehr interessante Diskussion vom Löffelmann: Neues in Sachen WinForms und VB aus Redmond
Hallo,
schau dir mal das MVVM-Pattern an, dies gehört zu WPF. [Artikel] MVVM und DataBinding
Ein Listview stellt nur ein Anzeigeelement dar. Die Daten liegen im ViewModel und dort erfolgen auch alle Aktionen, dort erstellst du dann auch deine Listen. Dadurch bist du auch völlig unabhängig von der Anzeige.
Hallo,
ist das Oszi-Element von dir geschrieben? Ich nutze dieses LiveCharts2. Bin damit sehr zufrieden.
Da hat der Computer auch Recht. Du mußt es schon in die Klasse IssueData machen, wo auch schon InternalData ist.
Auch solltest du der Methode OnPropertyChanged() den Namen des Property übergeben. Steht auch so in dem von Abt verlinkten Artikel.
Mache doch einfach ein Property vom Typ IssueDescriptions dazu und binde es an SelectedItem. So steht es ja auch in deinem Beispiel.
Hallo inflames2k,
das weiß ich, mache es ja selber und das ist auch nicht das Problem. Mir geht es darum, wenn man versehentlich doch mal drauf klickt. Wenn ich sowas programmieren müßte, dann würde ich versuchen Konflikten aus dem Weg zu gehen. Eine neuer Tab ist ja das geringste Problem.
Nun möchte ich auch mal meinen Senf 😉 loswerden.
Wie schon viele schrieben, ist es auf jeder Seite anders, man muss sich halt überall auf andere Bedingungen einstellen und die wenigsten Seitenbetreiber werden sich auf eine Diskussion einlassen.
Mir wäre es eigentlich egal. Wenn mich jetzt einer fragen würde, wie ich es programmieren würde, dann würde ich mich für das Öffnen eines neuen Tabs entscheiden. Warum?
Wenn ich keinen neuen Tab öffne und die neue Seite versehentlich schließe oder weitersurfe, dann komme ich nicht oder nur mit vielen Klicks zurück.
Ich nutze die Tabs sehr exzessiv. Mir ist es wichtig, dass die Ursprungsseite offen bleibt. Egal ob Google oder eine Nachrichtenseite, ich öffne fast immer einen neuen Tab.
Wegen mir muss keine extra Wurst gebraten werden. Ich stelle mich halt drauf ein.
Mein Tipp für Anfänger, wenn du eine Aufgabe hast, dann zerlege sie in möglichst kleine Einzelaufgaben und bearbeite sie getrennt.
Hier wäre das WMI, Datum parsen und Datum ausgeben.
Dein Problem ist das Datum. Darum erstmal Doku nehmen und verstehen was dort geschrieben steht.
DateTimeOffset
Dann in Visual Studio die Console nehmen, ein kleines Testprogramm schreiben und damit spielen.
Hier mal ein Beispiel:
var stringDate = "8-20-2021";
string[] format = new string[] { "M/dd/yyyy", "M/d/yyyy", "M-d-yyyy" };
var date = DateTimeOffset.ParseExact(stringDate, format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
Console.WriteLine(date);
Console.WriteLine("---------------------------");
Console.WriteLine(date.ToString());
Console.WriteLine(date.ToString("MM/dd/yyyy"));
Console.WriteLine(date.ToString("d/M/yyyy"));
Console.WriteLine(date.ToString("F"));
Console.WriteLine(date.ToString("D"));
Console.WriteLine(date.ToString("G"));
Und solange spielen, bis man es verstanden hat.
Für Anfänger eine hilfreiche Lektüre:
Visual C# 2012 Rheinwerk Computing Das Klassendesign
Hallo Little Tester,
ich hab mir mal im Forum deine Beiträge angeschaut. Für mich entsteht der Eindruck, dass du die Grundlagen von C# noch nicht verstanden hast. Damit verstehst du auch die Doku nicht.
Schaun wir uns mal den Code vom 10.07.2021 - 23:51 an.
Als erstes muß du den String in ein DateTimeOffset umwandeln-> parsen. Diese Methode braucht einige Informationen. Ein Datum kann unterschiedliche Formatierungen haben. Es gibt zB. Unterschiede zwischen England und USA. Die Methode hat keine Glaskugel, du mußt es ihr also sagen.
Und wenn du wieder einen String haben willst, dann nimmst du ToString. Aber auch diese Methode muß wissen, wie der String formatiert werden muss.
Wenn du einen älteren und von anderen Kollegen geschriebenen Code vor dir hast, der eine Unmenge an if's und Schleifen hat, teilweise sehr tief geschachtelt (hab ich gerade 😦 ), dann bist du glücklich, wenn er einigermaßen lesbar ist. Da interessiert es dich nicht, ob der Entwickler vor Jahren glücklicher war, weil er eine Zeile eingespart hat. Und deine Variante ist jetzt schon schwer zu lesen. Wenn die zusammengehörigen Klammern übereinander stehen, dann sieht man gleich, was zusammen gehört. Macht sich auch beim kopieren einfacher.
es läuft, d.h. es gibt keine Fehlermeldung, aber das Ergebnis ist nicht richtig. Schau mal in den Link von Abt unter Punkt 3. Dort wird es erklärt.
Hallo,
schau dir mal dieses Programm an: WMI Code Creator v1.0.
Es erzeugt dir fertigen Code und du siehst gleich, was dabei rauskommt.
Schneeregen? War es bei euch heute auch so kalt? Heute morgen auf dem PC gehabt.