b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

WPF中调用txt文档并让其在RichTextBox中表明

电脑杂谈  发布时间:2019-08-15 16:03:19  来源:网络整理

richtextbox c_richtextbox_richtextbox读取

WPF中调用txt文档并让其在RichTextBox中表明

出于项目的才能,毕竟想直接将内容写在RichTextBox中,所以考虑到灵活性richtextbox读取,我想,还是是谁,总会想把内容写在一个文件里,然后去调用它以实现这个作用。我应该怎么想的,不过这个难题这么想都不算是个难点,源码量也不大,出于对WPF的不够了解,这个难题原来还真的难倒我了。

习惯winform的朋友,见到这个题,是不是也会和我一样挥笔疾书写下如下一段代码呢:

privatevoidbutton1_Click(objectsender, EventArgs e)

{

OpenFileDialog openFileDialog1 =newOpenFileDialog();

openFileDialog1.Filter ="文本文件(*.txt)|*.txt|(*.rtf)|*.rtf";

if(openFileDialog1.ShowDialog() == DialogResult.OK)

{

StreamReader sr =newStreamReader(openFileDialog1.FileName, Encoding.Default);

richTextBox1.Text = sr.ReadToEnd();

sr.Close();

}

}

这段源码看上去其实并没有什么意见,因为,它放错了地方,是的richtextbox读取,它放置了WPF的代码页里面,很会说,这又怎么,还是是WPF,还是winform,甚至asp.net或者别的什么地方,源码是不会有多少区别的吧。是的,我也依然是怎么可能的,因为,编译器报错了,除了OpenFileDialog需要引用一个叫Microsoft.Win32的命名空间以外,还出了这些问题:

这个错误让我好像不可思议,盯着熟悉的DialogResult.OK的OK和richTextBox1.Text的Text下面的粉色波浪线,我这么都想不到还缺乏多少程序集引用。这才发现,WPF中的RichTextBox居然没有Text属性。好吧,我派兵了,这个难题我其实不会解决,上网去搜了好些代码,涵盖有怎么一段代码:

privatevoid打开文本文件ToolStripMenuItem_Click(objectsender, EventArgs e)

richtextbox读取_richtextbox c_richtextbox

{

stringFilename;

pictureBox1.Visible =false;

if(this.openFileDialog1.ShowDialog() == DialogResult.OK)

{

Filename = openFileDialog1.FileName;

if(Filename !="")

{

this.textBox1.Text = Filename;

this.richTextBox1.LoadFile(@Filename, RichTextBoxStreamType.PlainText);

}

}

}

在写Demo的时候,一样出错了,this.richTextBox1.LoadFile的LoadFile下面多了粉色的波浪线,不过提示缺少程序集引用。

正是因为只顾着追踪代码,一心只想得到代码的最终答案,忽略了相对来说重要的难题。既然RichTextBox没有Text的特性,假如也就是说,它诚然会有这些的特性来取代Text属性的工作,一个个属性看过去,原来发现有一个属性叫Document,Document是网页的含义,假如我们要调用的应该网页,会不会就是它呢?去MSDN里面看了看,上面有一段话这么说的:

属性值

类型:System.Windows.Documents.FlowDocument

一个FlowDocument对象,直言RichTextBox的内容。

默认情形下,此特性设置为空FlowDocument。具体地说,此空FlowDocument包含一个Paragraph,而后者包含一个不包含任何文本的Run。

很显然,我们要的就是RichTextBox的内容,一定,要调用的话,需要的是FlowDocument,流网页?参考MSDN中的作法:

// Create a simple FlowDocument to serve as content.

FlowDocument flowDoc = newFlowDocument(newParagraph(newRun("Simple FlowDocument")));

// Create an empty, default RichTextBox.

RichTextBox rtb = newRichTextBox();

// This call sets the contents of the RichTextBox to the specified FlowDocument.

rtb.Document = flowDoc;

// This call gets a FlowDocument representing the contents of the RichTextBox.

FlowDocument rtbContents = rtb.Document;

这样的话好像不是读取手机上已存在的txt文档,假如该这么改变呢?我继续在图片中翱翔。

图片竟然是很超强的,并且图片上几乎没有直接调用txt格式的标题,所以倒是有不少读取rtf的标题,都是文档,也是区别不大才对,找了不到一小会,就找出破浪的博客园里的一篇标题,和我想要的答案看似不同却很类似:

publicstaticvoidLoadFromRTF(thisRichTextBox richTextBox, stringrtf)

{

if(string.IsNullOrEmpty(rtf))

{

thrownewArgumentNullException();

}

TextRange textRange = newTextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);

using(MemoryStream ms = newMemoryStream())

{

using(StreamWriter sw = newStreamWriter(ms))

{

sw.Write(rtf);

sw.Flush();

ms.Seek(, SeekOrigin.Begin);

textRange.Load(ms, DataFormats.Rtf);

}

}

}

在这段源码中,我见过了一个对我来说陌生的朋友,TextRange,见到这段源码,我突然像是找出了救星,没错,我要的就是它,并且加载的是rtf,反而闭着耳朵也也是可以改成txt了,这个不费什么气力:

publicvoidLoadText()

{

stringtextFile =@"\Win\WPFDemo\WPFDemo\Resource\1.txt";

FileStream fs;

if(File.Exists(textFile))

{

fs =newFileStream(textFile, FileMode.Open, FileAccess.Read);

using(fs)

{

TextRange text =newTextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);

text.Load(fs, DataFormats.Text);

}

}

}

写出代码虽难过,但运行成功才是王道,很兴奋的等待运行结果,原来是乱码:

乱码就乱码,没多少了不起的,停止运行后,在流程中添加一句话:StreamReader streamReader = new StreamReader(fs, System.Text.Encoding.UTF8);看你还乱码不?哼哼~

结果原来让我难过,难怪还是乱码,这到底是这么回事啊?思量了良久,没找出原因,图片上的原理也几乎没作用,找啊找,就在自己好像悲哀的时候,突然一个念头一闪:未必不是代码问题,因为,不是代码问题,当真是文本格式的文档问题?打开文本格式,选择另存为,难怪,难题一目了然了:

竟然默认编码是ANSI,将它改成UTF-8之后留存文档,那行代码加不加结果都能如期运行了:

吼吼,并且这个难题很简单,所以还是有收获的,这才发现,WPF和winform的区别还是比较大的,不能一味用已有的常识解决新的难题呐~

原文地址:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-119347-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 李杨
        李杨

        烊烊加油

      • 魏求己
        魏求己

        最基本的汽车都造不出来

      • 晋灵公姬夷皋
        晋灵公姬夷皋

        我们也派军舰到他家去吧

      热点图片
      拼命载入中...