Guten Morgen, mit C# habe ich für einen Mikrocontroller ein Flashloader Programm entwickelt. Dieses Programm möchte ich nun um eine weitere Funktionalität erweitern, indem die Binärendaten in einem Fenster dargestellt werden sollen. Siehe Anhang. Wie könnte man sowas in C# realisieren? Mit welchem Element von der C# Toolbox?
Das ist einfacher Text (sofern Dir die Farben nicht auch noch wichtig sind). Also brauchst Du nur ein Fenster, das Text anzeigen kann. Den Text, der dann angezeigt wird, den erzeugst Du einfach selber. Sind die Farben wichtig, kannst Du ein Textfenster verwenden, das formatierten Text anzeigen kann, i.d.R. ist das RTF. Den erzeugt dann Dein Programm wiederum selber, und gibt ensprechende Formatierungsanweisungen für die bunten Zeichen aus. Beides keine Raketenwissenschaft, bei RTF wirst Du allerdings etwas Zeit investieren müssen, um die Formatierungsbefehle herauszufinden. Anstelle von RTF kannst Du natürlich auch HTML verwenden, und ein Textfenster nutzen, das HTML-Inhalte anzeigen kann. Auch keine Raketenwissenschaft. Und das Grundprinzip, daß Du den Hexdump als Text selbst erzeugst und ihn dem jeweiligen Fenster übergibst, das bleibt in allen drei Varianten das gleiche.
wenn es nicht ums editieren geht, sondern nur ums anzeigen, die Farben wichtig sind, (und wenn es um große Files gehen würde) würde ich den Text selber malen .. (in einer Scrollbox) ansonsten mal VirtualTreeView anschauen (ich behaupte mal, den gibt es auch für C#??) das würde sich anbieten, wenn du nicht nur "dumm" anzeigst, sondern auch irgendwie analysierst (z.b. in verschiedene Bereiche einteilst..) damit ließe sich auch einfach(er) ein Hex editor bauen.. (RTF/HTML würde ich auf keine Fall machen..)
Hallo, erstaml vielen Dank für eurie Hilfe. Ich hab mich nun für das ListView Toolbox Element entschieden. Die binären Daten sind in einem Bytearray gespeichert. Dieses Array hat 0x80000 Elemente. Jede Zeile soll insgesamt 16 Bytes anzeigen. WIe könnte man den unteren C# Code erweitern, damit nach jeden 16 Bytes eine neue Zeile erstellt wird?
1 | ListViewItem lvi1 = new ListViewItem("00000000"); |
2 | for(int i=0; i<16; i++) |
3 | lvi1.SubItems.Add(BinData[i].ToString("X")); |
4 | listView1.Items.Add(lvi1); |
Leo schrieb: > WIe > könnte man den unteren C# Code erweitern, damit nach jeden 16 Bytes eine > neue Zeile erstellt wird? Wodurch wird eine neue Zeile gekennzeichnet? Durch einen Zeilenumbruch, also durch \n oder gegebenenfalls die Kombination \r\n. Das musst Du also nur an geeigneter Stelle in Deinen String eintragen.
Zeilenumbrüche in einer Listview? Eigentlich sollte jedes Listenelement genau eine Zeile haben. Einen Umbruch gibt es in dem Sinne nicht. D.h. wenn du eine neue Zeile haben willst, fügst du halt ein neues Listenelement hinzu.
Kail schrieb: > Zeilenumbrüche in einer Listview? Wenn es ein Listview ist, natürlich nicht. Bei einem simplen Textcontrol aber wäre das die Vorgehensweise. Ein Listview, der mit 0x8000 Items und 0x80000 Subitems gefüllt wird, wird sehr langsam. Das Füllen dauert ewig. Einen Text von etwa 2 MByte Größe (512 kB Daten à 3 Zeichen, Adressen und Zeilenumbrüche dazu) in ein Textcontrol einzufüllen geht jedenfalls deutlich schneller.
Ui, wenn es so viele Elemente sind muss man sich schon etwas mehr Gedanken machen, damit das ganze verzögerungsfrei und flüssig Läuft. Dein Vorteil ist, dass ja immer nur ein kleiner Ausschnitt der Daten zu sehen ist. D.h. du solltest eine effiziente Datenstruktur verwenden, um die Daten vorzuhalten. aus der suchst du dann immer die aktuell Sichtbaren heraus, und renderst diese im Control. Normale WinForms Controls dürften dazu zu dumm sein, und ständig mit dem kompletten Datanklotz herumjonglieren.
Kail schrieb: > Dein Vorteil ist, dass ja immer nur ein kleiner Ausschnitt der Daten zu > sehen ist. Ein Stichpunkt hierfür wäre virtual ListView. Nur: Wozu der Aufriss? Die simple Textmethode würde völlig ausreichen, es sei denn, es soll auch noch Bearbeitungsfunktionalität in Form eines einfachen Editors eingebaut werden. Dann bietet der ListView natürlich die Möglichkeit, den Mausklick gleich dem korrespondierenden Byte zuzuordnen. Aber davon war beim Threadstarter nicht die Rede, er will seinen Hexdump nur anzeigen.
Das kennst du, oder? : System.ComponentModel.Design.ByteViewer
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.