图5为单击File1过程:单击文本文件时,在RichTextBox1里显示其内容。
图 5 单击File1过程File1_Click
图6为RichTextBox1获得焦点过程:此时应做出标记(mark1),并记下该文件的全路径以及文件名,以供保存修改时使用。
图 6 文本显示控件获得焦点过程RichTextBox1_GorFocus
图7为RichTextBox1发生变化的过程:如果刚才发生了获得焦点的事件(Mark1=1),则做出“文件已被修改”的判断(Mark2=1)。
图 7 文本显示控件变化过程RichTextBox1_Change
图8为RichTextBox1失去焦点的过程:如果文本已被修改(Mark2=1),则进行以下3项工作:
(1)将被修改的旧文件内容转移到RichTextBox2控件内备用;
(2)将新文件的内容显示在RichTextBox1控件内;
(3)询问是否保存修改旧文件(Call RTBA_LF00);
无论是否保存修改,之后都需要将标记清除(Mark1=0,Mark2=0),以便一切从头开始。
图 8 文本显示控件失去焦点过程RichTextBox1_LostFocus
特殊情况下,如果文件改动后直接关闭主窗口,将会造成修改不被保存的情况。此时应加入判断,如果有文件被修改(Mark2=1),则先将修改过的文件临时保存,再询问用户是否需要保存(Call RTBA_LF00),最后再关闭程序。过程代码如图9所示。
图 9 关闭主程序过程Form1_Unload
4 问题与结论
为了节省篇幅,突出重点,以上只是简单介绍了程序的基本功能。如果达到实用的程度,还需要加入更多的代码。例如,当窗体有多个可执行控件时(本例只选了一个File1),单击任何一个控件都会引起RichTextBox1控件LostFocus事件的发生。由于失去焦点事件发生在先,因此最后一次点击时,窗体可能不会出现预期的变化,不符合传统的操作习惯。如果要求窗体对最后一次点击做出反应,则应当在RichTextBox1的LostFocus过程中加入更多的代码,判断最后一次点击的是哪一个控件(如C = Me.ActiveControl.Name),并编写代码,引发相应的动作。另外,当使用RichTextBox控件进行保存操作时,如果文件具有只读属性,则保存操作会失败。因此在保存前,应先判断文件的属性,并采取相应的措施,以保证操作的正确。
保存修改后的文件是许多编辑软件最基本的功能,其过程看似简单,实际上具有一定的难度。初学者通过本例,可以学到一些编程的基本技巧,在实践中加以运用和发挥,达到触类旁通、举一反三的效果。
责任编辑:小草