[英]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);
做這個:
有一個按鈕。
單擊按鈕時,調用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.