簡體   English   中英

在Windows窗體上為C#顯示文本文件

[英]Displaying a text file on a Windows Form for C#

我正在嘗試顯示txt文件的內容。 我認為我應該為該方法使用RichTextBox。 我所做的就是這個。 但是,它不起作用。

public static byte[] ReadFile() {

        FileStream fileStream = new FileStream(@"help.txt", FileMode.Open, FileAccess.Read);
        byte[] buffer;
        try {
            int length = (int)fileStream.Length;  // get file length
            buffer = new byte[length];            // create buffer
            int count;                            // actual number of bytes read
            int sum = 0;                          // total number of bytes read

            // read until Read method returns 0 (end of the stream has been reached)
            while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
                sum += count;  // sum is a buffer offset for next reading
        } finally {
            fileStream.Close();
        }
        return buffer;
    }

    private void richTextBox1_TextChanged(object sender, EventArgs e) {
        ReadFile();
    }

我可能丟失了一些內容,但看不到將讀取結果附加到文本框的位置!

您正在返回緩沖區,但未在任何地方使用它。

您在這里遇到了一些問題。

我想richTextBox1_TextChanged與您要填充的RichTextBox的更改事件相關聯。 這意味着除非您手動更改RichTextBox本身的內容,否則它不會執行。

此外,在該方法中,您正在調用一個方法(ReadFile),該方法讀取您的文件並以byte []的形式返回內容,但是由於您始終不使用它,因此結果會丟失。

然后,即使您正在讀取文件的方式也不正確,因為您一次讀取了所有文件(您指定要讀取文件中包含的確切字符數),所以不需要while循環。

我將附加到表單的load事件並編寫如下內容:

public string FillRichText(string aPath)
{
    string content = File.ReadAllText(aPath);
    richTextBox1.Text = content;
}

private void Form1_Load(object sender, EventArgs e)
{
    FillRichText(@"help.txt");
}

您將在表單的InitializeComponent()中使用以下行:

this.Load += new System.EventHandler(this.Form1_Load);

做這個:

  1. 有一個按鈕。

  2. 單擊按鈕時,調用ReadFile(),將從ReadFile()接收到的byte []轉換為字符串並顯示在TextBox中。

用這個:

在表單的構造函數中,編寫以下代碼:

public Form1()
{
    InitializeComponent(); // This should already be there by default

    string content = File.ReadAllText(@"help.txt");
    richTextBox1.Text = content;
}

這會一次性讀取給定文件中的所有文本,並將其分配給富文本框。 在方法中讀取文本時,您不會將結果byte數組轉換為字符串,也不會將其分配給富文本框。 僅僅讀取文件將無濟於事。

請同時刪除TextChanged事件:每次更改富文本框中的文本時,都會調用TextChanged事件。 將新值設置為Text屬性時,也會發生這種情況,這將導致無限遞歸。 此外,當文本一開始沒有更改時,永遠不會調用此事件,因此您必須在富文本框中手動輸入文本才能觸發此事件。

將方法更改為以下內容, 不需要富文本框 ,可以使用一個簡單的文本框來達到目的。

public void ReadFile() {

    TextReader reder = File.OpenText(@"help.txt");
    textBox1.Text = reder.ReadToEnd();        
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)   
        {
            label1.Text = openFileDialog1.FileName;
            richTextBox1.Text = File.ReadAllText(label1.Text);
        }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM