RichTextBox的LoadFile步骤产生两次TextChanged事件
RichTextBox的LoadFile方法产生两次TextChanged事件!
我自己写了一个文本编辑器,用的RichTextBox,通过TextChanged事件来判断文本是否保存,退出时是否需要提示用户保存,但是,在加载文件到RichTextBox时,LoadFile产生了两次TextChanged,并且!如果是拖拽方式打开文件,经过调试发现两次产生事件的“时间”还不相同!这是怎么回事啊?完全混乱了!我自己写了个测试程序,通过TextChanged事件来也测试出确实产生了两次事件。
之前用TextBox的时候都还一切正常。后来改用RichTextBox就出现一大堆毛病,一下是我捣鼓了一下午的记录
希望有经验的大神帮忙解答一下到底该怎么处理?
------解决思路----------------------
先清空,文本改变一次,再赋值,文本又改变一次
你不要只知道文本改变了2次,你应该把文本改变时它的text属性到底是什么,保存到一个数组里,然后再调试
如果你就是不想让它执行多次,定义个全局bool变量,在执行loadfile之前把它设置成true,textchanged事件里判断它
执行完毕后重新把它设置成false
------解决思路----------------------
我的建议是把整个流程用个try,在try之前-=TextChanged事件,在try中手动做TextChange时要做的事,在finally里+=事件
我自己写了一个文本编辑器,用的RichTextBox,通过TextChanged事件来判断文本是否保存,退出时是否需要提示用户保存,但是,在加载文件到RichTextBox时,LoadFile产生了两次TextChanged,并且!如果是拖拽方式打开文件,经过调试发现两次产生事件的“时间”还不相同!这是怎么回事啊?完全混乱了!我自己写了个测试程序,通过TextChanged事件来也测试出确实产生了两次事件。
using System;
using System.Text;
using System.IO;
using System.Windows.Forms;
namespace WinFormTest
{
public partial class Form1 : Form
{
private string fileName;
private FileStream output;
private int changeNum = 0;
public Form1()
{
InitializeComponent();
label1.Text = changeNum.ToString();
}
private void richTextBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void richTextBox1_DragDrop(object sender, DragEventArgs e)
{
fileName = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
output = new FileStream(fileName, FileMode.Open, FileAccess.Read);
richTextBox1.LoadFile(output, RichTextBoxStreamType.PlainText); // LoadFile方法
}
private void richTextBox1_TextChanged(object sender, EventArgs e) // 文本变化事件处理!
{
changeNum++;
label1.Text = changeNum.ToString(); //用于显示发生了几次这样事件
}
}
}
之前用TextBox的时候都还一切正常。后来改用RichTextBox就出现一大堆毛病,一下是我捣鼓了一下午的记录
希望有经验的大神帮忙解答一下到底该怎么处理?
------解决思路----------------------
先清空,文本改变一次,再赋值,文本又改变一次
你不要只知道文本改变了2次,你应该把文本改变时它的text属性到底是什么,保存到一个数组里,然后再调试
如果你就是不想让它执行多次,定义个全局bool变量,在执行loadfile之前把它设置成true,textchanged事件里判断它
执行完毕后重新把它设置成false
------解决思路----------------------
我的建议是把整个流程用个try,在try之前-=TextChanged事件,在try中手动做TextChange时要做的事,在finally里+=事件