Laden...

.rtf Dateien aus Unterverzeichnis in Richtextbox anzeigen lassen

Erstellt von Runenmeister vor einem Jahr Letzter Beitrag vor einem Jahr 622 Views
R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr
.rtf Dateien aus Unterverzeichnis in Richtextbox anzeigen lassen

Hallo zusammen,

ich bin sehr neu hier ich weis. Doch bislang habe ich zu meinem Grundlagenproblem hier nichts finden können und weis mir einfach keinen Rat mehr und bitte euch um Hilfe. Ich lerne seit knapp zwei Monaten C# von daher fehlt mir sicherlich noch reichlich an fachlichem Wissen. Doch ich habe ein Problem welches ich nicht lösen kann. Mein Code sieht für mich richtig aus. Ich finde den Fehler einfach nicht.

Womit arbeite ich?

Microsoft Visual Studio 2019 unter Windows 10 22H2
Es ist eine C# Anwendung mit Windows Forms. .NET Framework 4.7.2

Worum geht es?

Ich arbeite an einem kleinen Programm in dem ich einem Unterverzeichnis meiner Anwendung erstellt habe in dem .rtf Dokumente liegen. Diese werden automatisch in eine Listbox eingelesen. Das funktioniert soweit auch hervorragend.

Nun möchte ich das wenn ich auf einen Eintrag aus der Listbox klicke die entsprechende Datei aus dem Unterornder eingelsen und in der Richtextbox angezeigt wird. Und genau das funktioniert nicht.

Es erscheint keine Fehlermeldung. Der Datei-Inhalt wird einfach nicht in die Richtextbox geladen.

In der Anlage hänge ich meinen bisherigen Code mit ran und würde mich riesig über hilfreiche Tipps freuen.

Hab schon jetzt einmal herzlichen Dank für Eure Zeit, Bemühungen und Geduld mit mir.

Beste Grüße
Runenmeister


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;


namespace DDSD
{
    public partial class DDSD : Form
    {
        private readonly string _dsgvoPath;
        public DDSD()
        {
            InitializeComponent();
            
            // Set the DSGVO path to a subdirectory called "DSGVO" in the same directory as the executable
            _dsgvoPath = Path.Combine(Application.StartupPath, "DSGVO");

            // Create the DSGVO directory if it does not exist
            //if (!Directory.Exists(_dsgvoPath))
            //{
            //    Directory.CreateDirectory(_dsgvoPath);
            //}

            // Load the RTF files into the listbox
            LoadRTFFiles();
        }

        private void LoadRTFFiles()
        {
            // Clear the listbox
            lbDSGVO.Items.Clear();

            // Check if the DSGVO directory exists
            if (!Directory.Exists(_dsgvoPath))
            {
                MessageBox.Show("DSGVO directory not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // Get all RTF files in the DSGVO directory
            string[] rtfFiles = Directory.GetFiles(_dsgvoPath, "*.rtf");

            // Add each file name to the listbox without the extension
            foreach (string file in rtfFiles)
            {
                string fileName = Path.GetFileNameWithoutExtension(file);
                lbDSGVO.Items.Add(fileName);
            }
        }
        private void lbDSGVO_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Get the selected file name from the listbox
            string fileName = lbDSGVO.SelectedItem.ToString();

            // Construct the file path for the selected file
            string filePath = Path.Combine(_dsgvoPath, fileName + ".rtf");

            // Check if the file exists
            if (!File.Exists(filePath))
            {
                MessageBox.Show("File not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            try
            {
                // Load the selected file into the RichTextBox
                rtbDatei.LoadFile(filePath, RichTextBoxStreamType.RichText);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error loading file: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
Hinweis von gfoidl vor einem Jahr

Code bitte direkt angeben, Anhänge sind nicht so praktisch und du sollst das Helfen so einfach wie möglich machen.

A
764 Beiträge seit 2007
vor einem Jahr

Hallo Runenmeister

Häng dich mal mit dem Debugger in die MethodelbDSGVO_SelectedIndexChangedrein und steppe da durch.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Gruss
Alf

R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr

Moin Alf Ator,

danke für den Hinweis mit dem Debugger. Ich konnte eine Sache Feststellen und zwar das meine Methode "private void LbDSGVO_SelectedIndexChanged(object sender, EventArgs e)" mit einem Großbuchstaben beginnen muss. Das habe ich geändert. Aber darüber hinaus gibt mir der Debugger leider keine weiteren Hinweise oder Fehler auf. Ich bin den Code Zeile für Zeile durchgegangen. Es ist sicherlich nur eine Kleinigkeit, aber ich sehe diese einfach nicht. Ich vermute einen Fehler in einer der folgenden Zeilen:

// Get the selected file name from the listbox
string fileName = lbDSGVO.SelectedItem.ToString();

// Construct the file path for the selected file
string filePath = Path.Combine(_dsgvoPath, fileName + ".rtf");

Womöglich bin ich gerade mit Blindheit geschlagen. Hast du vielleicht einen weiteren Hinweis für mich dem ich nachgehen kann?

Danke und beste Grüß

Runenmeister

4.940 Beiträge seit 2008
vor einem Jahr

Hast du denn beim Debuggen auch die Inhalte der Variablen überprüft?

Und welche der beiden Fehlermeldungen erscheint denn?

R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr

Hallo TH69,

ja, es sieht alles in Ordnung aus. Inzwischen hab ich ein paar Stellen angepasst. Eigentlich nur Prüfzeilen mit eingebaut, habe ein neues Richtextfeld genommen. Die eigenschaften des Feldes geprüft und den Code an sich noch einmal prüfen lassen. Der Code ist sauber. Eine Fehlermeldung erscheint nicht. Was ein Hinweis darauf ist das die Dateien gefunden wurden. Sie werden nur nicht im entsprechenden Richtextfeld angezeigt. Gibt es hier evtl. Parameter und Eigenschaften die ich übersehen habe und nicht kenne?

Beste Grüße

Runenmeister

126 Beiträge seit 2023
vor einem Jahr

Eigentlich müsste das auch funktionieren.

Im Anhang mal eine Beispiel-Anwendung die genau das macht (wenigstens auf meinem System).

Probier es aus und wenn das auch bei dir funktioniert, dann vergleiche es mit deiner Anwendung.

Hat die Blume einen Knick, war der Schmetterling zu dick.

A
764 Beiträge seit 2007
vor einem Jahr

Also ist schonmal sichergestellt, dass die Methode 'LbDSGVO_SelectedIndexChanged' überhaupt aufgerufen wird.

Durch den Code hier, sollte sichergestellt sein, dass die Datei existiert.

            // Check if the file exists
            if (!File.Exists(filePath))
            {
                MessageBox.Show("File not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

Wie ist denn der Wert von filePath? Existiert diese Datei tatsächlich, und ist der Inhalt korrekt?

Wenn du mit dem Debugger durchsteppst, kommst du zu dieser Zeile? Was passiert danach?

rtbDatei.LoadFile(filePath, RichTextBoxStreamType.RichText);
M
368 Beiträge seit 2006
vor einem Jahr

Zitat von Runenmeister

Parameter und Eigenschaften

--> Das kann evtl. (auch) sein, vgl. mit https://www.dotnetperls.com/richtextbox  (Abschnitt zu rtf: "(..)RTF stands for Rich Text Format, and this describes a certain file type where text formatting is encoded with special characters embedded in the text.

Tip When you apply formatting in a RichTextBox, you can access the richTextBox1.Rtf property to get the encoded RTF data.(..)"

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr

Moin BlonderHans,

danke für deine Projektmappe. Ich hab sie mir angesehen und schritt für Schritt auseinander genommen. Was mir direkt auffällt ist das du da eine etwas andere Herangehensweise drin hast, deren Befehle ich noch nicht kenne. Ich habe mein eigenes Projekt noch einmal umgebaut Und was ich auch mache der Inhalt meiner rtf Dateien wird nicht in meiner Richtextbox ausgewiesen. Ich habe sogar deine Dokumente mit hinzugenommen. Die tauchen in meiner Listbox auf aber auch diese Inhalte werden nicht wieder gegeben. Eine Fehlermeldung erhalte ich weiterhin nicht. Hab sogar deine Exception Zeile für das Labell mit integriert. Das sieht soweit alles gut und richtig aus. Selbst die Dateiformate hab ich geprüft. Kann es sein das irgend eine Eigenschaft der Richtextbox aktiviert bzw. deaktiviert werden muss ? Mir ist da nichts aufgefallen. Mit dem Debugger bin ich ehrlich gesagt noch nicht so grün. Das kommt aber noch.

Dir schonmal vielen Dank für dein Referenzprojekt aus dem ich bereits wieder einiges neu lernen durfte.

126 Beiträge seit 2023
vor einem Jahr

Keine Ursache.

Nun ja, eigentlich ist es nicht wirklich anders ... der Teil, der bei dir nicht funktioniert (laden und anzeigen der Datei), den habe ich eigentich so gut wie unverändert übernommen.

Wenn also mein Projekt funktioniert und deins nicht, dann liegt es nicht an dem Code den du uns zeigst.

Lad doch mal dein nicht funktionierendes Projekt (so wie meins reduziert auf die RTF Anzeige) hier hoch dann können wir uns ansehen, was der wirkliche Störenfried da ist.

Hat die Blume einen Knick, war der Schmetterling zu dick.

R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr

Hallo zusammen,

zunächst möchte ich mich für eure Hinweise, Tips und Bemühungen mir zu helfen bedanken. In der vergangenen Nacht hab ich nicht schlagen können und bin meinen Code noch einmal Zeile für Ziele durchgegangen und ich bin überzeugt das es nicht der Code ist. Ich erhalte auch keine Fehlermeldungen. sondern die Anzeige funktioniert nicht. Pfad und Dateinamen stimmenüber ein. Ich werde ganzen noch weiter nachgehen. Es ist gewiss nur eine Kleinigkeit die ich übersehe...

Doch wer mag darf sich gern mal mein Prjojekt anschauen. Ich lade es als Zipfile hoch. Ich bin über jede Idee und jeden Hinweis dankbar. Dieses Projekt ist das erste in welchem ich Versuche Dateien einlesen und den Inhalt anzeigen zulassen. Ich werde noch einmal näher in meine Grundlagenbücher schauen in der Hoffnung auch hier noch eine Erklärung finden zu können. Das ist für mich jetzt echt die Suche nach der Stecknadel im Heuhaufen.

Besten Dank nochmal euch allen.

Gruß

Runenmeister

4.940 Beiträge seit 2008
vor einem Jahr

Du hast die RichTextBox im Designer auf ReadOnly = true gesetzt.

Ändere dies mal testweise - und wenn es dann funktioniert, so setze diese Eigenschaft per Code:

rtbDatei.ReadOnly = false;
rtbDatei.LoadFile(filePath, RichTextBoxStreamType.RichText);
rtbDatei.ReadOnly = true;
A
764 Beiträge seit 2007
vor einem Jahr

Du hast das SelectedIndexChanged-Event nicht registriert. Siehe Bild.
Da frage ich mich aber, wie du mit dem Debugger in den Event-Handler lbDSGVO_SelectedIndexChanged reinlaufen konntest.

R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr

Hallo Alf Ator,

super ja das war es. Aber verstehen tu ich das gerade nicht wie das zustande kommt.
Ich geh mal in mich. Ist denn diese, ich nenne das mal Verknüpfung, passiert das nicht für gewöhnlich automatisch ? Ich bin leicht irritiert. Aber ich werde verstärkt darauf achten.

Du bist mein Held des Tages. Darauf wäre ich so nie gekommen.

Danke auch an TH69 und BlonderHans

Herzlichen Dank.

HerH

4.940 Beiträge seit 2008
vor einem Jahr

Du hast also den Debugger gar nicht benutzt, um zu überprüfen, ob die Methode auch aufgerufen wird (bzw. diese schrittweise durchlaufen), so wie wir es dir mehrfach geschrieben haben!?

Dann lies dir jetzt in Ruhe den [Artikel] Debugger: Wie verwende ich den von Visual Studio? durch und probiere selber die einzelnen Möglichkeiten aus - das ist das Grundwerkzeug eines jeden Software-Entwicklers.

R
Runenmeister Themenstarter:in
7 Beiträge seit 2023
vor einem Jahr

Soweit ich konnte habe ich ihn benutzt. Aber ich sagte ja bereits das ich mit dem Debugger noch nicht so vertraut bin. Von daher durchaus möglich das ich was missverstanden habe. Sorry für diesen Eindruck.