SD-Karteninhalt in einer Visual Basic GUI editieren

Hallo,

und zwar habe ich eine GUI in VB geschrieben, womit ich parameter an dem Arduino senden kann und diese in in der SD-Karte als CSV abgespeichert werden und anhand anhand des Buttons receive meiner GUI die CSV datei auslesen kann und den inhalt an der GUI anzeige (läuft über Serial). Nun ich möchte den Inhalt der SD--Karte über die GUI editieren können und diesen dann abspeichern in der SD-Karte ist es möglich? Die Parameter werden wie folgt abgespeichert in der CSV datei: Anz_parameter;Adresse;Register;Data 12;3;4;4

Meine denkweise war, dass ich es reinlade in die GUI und von dort bearbeite, doch ich hab auch statusmeldungen, die vom Arduino über Serial im gleichen Window wie die Parameter angezeigt werden und ich müsste die Ausgabe splitte, sodass ich die Parameter in einem Separatem Window anzeige, sodass ich diese editieren kann, doch ich wüsste nicht wie :(.

Hat jemand vllt. einen anderen Vorschlag, wie ich so etwas lösen könnte?

Ja, da brauchst du getrennte Komponenten für die jeweilige Anzeigen. Das sollte aber das geringste Problem sein.

Schau dir mal die Komponente RichTextBox an: http://msdn.microsoft.com/de-de/library/system.windows.forms.richtextbox.aspx

Persönlich habe ich das bisher nur Read-Only Modus verwendet, aber man kann den angezeigten Text auch editieren. Im Prinzip ist das nur eine große, mehrzeilige Textbox. Bei einem Linefeed wird halt in die nächste Zeile geschrieben.

hmm ok die richttextbox habe ich auch schon, problem ist, wie ich die angezeigten parameter von den restlichen serialportausgaben separieren kann damit ich diese bearbeiten kann.

Oder kennst du vllt eine andere mögichkeit, das zu realisieren, vllt einen einfacheren Ansatz?

Eine Komponente für die Serial Anzeige (z.B. Debug und Status Informationen) und eine andere Komponente für den Inhalt der SD-Karte.

Dann darfst du halt während der Übertragung des SD-Inhalts sonst nichts schicken. Aber wenn du den Knopf "SD Karte auslesen" drückst, weißt du doch wo du die empfangenen Daten anzeigen musst. Du musst halt wahrscheinlich irgendwie das Ende der Übertragung mitbekommen oder wissen wie viele Daten geschickt werden, so dass die nächsten Daten wieder auf die Serial Anzeige kommen.

also du meinst eine richttextbox für infos und eine für parameter? Hmm das problem ist, dass es alles über einen DataReceive handler läuft, der fängt alles ab was über den port kommt :(.

oder wie meinst du das?

Zwei Boxen wären wahrscheinlich am besten. Dann kannst du während du da per Hand editierst schon wieder andere Meldungen empfangen.

Da gibt es einige Möglichkeiten. Du kannst dir z.B. zwei getrennte EventHandler schreiben und dann einen anderen dranhängen (Code in C#, da ich kein VB verwende, aber das Prinzip ist gleich):

private void buttonReceive_Click(object sender, EventArgs e)
{
      _serialPort.DataReceived -= new SerialDataReceivedEventHandler(receive_Serial);      //entfernen
      _serialPort.DataReceived += new SerialDataReceivedEventHandler(receive_SDCard);   //anderen dranhängen
}

Wenn du mit der Übertragung fertig bist muss das dann anders herum gemacht werden.

Bei VB hast du da sowas: AddHandler mySerialPort.DataReceived, AddressOf receive_Serial Da muss es dann sowas wie RemoveHandler als Gegenstück geben

Oder du hast eine globale Variable in der du abfragst wo geschrieben werden soll:

private bool _readSD = false;

public void onDataReceived(object sender, SerialDataReceivedEventArgs e)
{
      //Daten lesen

      if(_readSD)
      {
           //schreibe in SD Karten Box
      }
      else
      {
          //schreibe in Serial Box
      }
}

ou ok , das is neu für mich hehe :D. wozu das - und + bzw wie meinst du das mit gegenstück? Sorry für die vielen fragen, möchte es halt verstehen :D

Wie gesagt, das ist C# Code! VB ist mir ein Graus :slight_smile:
Da es beides .NET ist, sind die Methoden und Klassen gleich, aber die Syntax ist anders.

In C# wird der EventHandler mit += hinzugefügt und mit -= entfernt

Sowie ich das Beispiel hier lese:

geschieht das hinzufügen in VB so:
AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler

Dann muss es auch “RemoveHandler” geben um den zu entfernen. Was auch der Fall zu sein scheint:

Du entfernst dann den EventHandler für die Serial Ausgabe und fügst den für die SD Ausgabe hinzu wenn der Übertragungsknopf angeklickt wird.

Wenn dir das zu kompliziert ist, mach einfach das mit der globalen Variable. Aber in beiden Fällen musst du irgendwie das Ende der Übertragung feststellen, damit du die EventHandler wieder anders herum machst, so dass erst mal wieder alles auf die normale Ausgabe läuft.

ok ich schaue mir das mal an , kann ich mir an dir wenden nochmal?