0

我正在尝试显示 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();
    }
4

6 回答 6

2

我可能遗漏了一些东西,但我看不到您将阅读结果附加到文本框的位置!

您正在返回缓冲区,但没有在任何地方使用它。

于 2012-05-22T09:01:29.310 回答
2

你这里有几个问题。

我想 richTextBox1_TextChanged 与您要填充的 RichTextBox 的更改事件相关联。这意味着除非您手动更改 RichTextBox 本身的内容,否则它不会执行。

此外,在该方法中,您正在调用一个方法 (ReadFile),该方法读取您的文件并将内容作为字节 [] 返回,但结果会丢失,因为您仍然没有使用它。

然后,即使您读取文件的方式也不正确,因为您正在一次读取所有文件(您指定读取文件中包含的确切字符数),因此不需要 while 循环。

我将附加到表单的加载事件并编写如下内容:

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);
于 2012-05-22T09:15:35.950 回答
0

做这个:

  1. 有一个按钮。

  2. 单击按钮时,调用 ReadFile(),将从 ReadFile() 接收到的 byte[] 转换为字符串并显示在 TextBox 中。

于 2012-05-22T09:04:23.253 回答
0

用这个:

在表单的构造函数中,编写以下代码:

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

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

这会一次性从给定文件中读取所有文本并将其分配给富文本框。当您阅读方法中的文本时,您没有将结果byte数组转换为字符串,也没有将其分配给富文本框。简单地阅读文件将无济于事。

请同时删除该TextChanged事件:TextChanged每次更改富文本框中的文本时都会调用该事件。在为属性设置新值时也是如此Text,这将导致无限递归。此外,当文本首先没有更改时,永远不会调用此事件,因此您必须在富文本框中手动输入文本才能触发此事件。

于 2012-05-22T09:04:45.620 回答
0

将方法更改为以下,您不需要富文本框,一个简单的文本框就可以达到目的。

public void ReadFile() {

    TextReader reder = File.OpenText(@"help.txt");
    textBox1.Text = reder.ReadToEnd();        
}
于 2012-05-22T09:08:20.973 回答
0
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);
        }
 }
于 2016-10-17T07:13:48.870 回答