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

ここにはいくつかの問題があります。

入力したい RichTextBox の changed イベントに richTextBox1_TextChanged が関連付けられていると思います。これは、RichTextBox 自体の内容を手動で変更しない限り実行されないことを意味します。

さらに、メソッドでは、ファイルを読み取ってコンテンツをバイト[]として返すメソッド(ReadFile)を呼び出していますが、とにかくそれを使用していないため、結果は失われます。

次に、すべてのファイルを一度に読み取っているため(ファイルに含まれる正確な文字数を読み取るように指定しているため)、ファイルの読み取り方法でさえ正しくないため、 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);
于 2012-05-22T09:15:35.950 に答える
0

メソッドを次のように変更すると、リッチ テキスト ボックスは必要なくなります。単純なテキスト ボックスで目的を果たすことができます。

public void ReadFile() {

    TextReader reder = File.OpenText(@"help.txt");
    textBox1.Text = reder.ReadToEnd();        
}
于 2012-05-22T09:08:20.973 に答える
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 に答える