private void 新建NToolStripMenuItem_Click(object sender, EventArgs e) { if (cf != null)//如果子窗体没有实例化 { this.statuslabel1.Text = "新建文本"; if (cf.textChange)//如果文本已经被修改 { DialogResult dialogResult = MessageBox.Show("是否保存更改?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) //选择保存修改 { if (FileisOpen) //如果当前状态是保存已经打开的文件,则应该不跳出选择保存文件的路径对话框,默认直接保存文件。 { using (FileStream fs = File.Open(openFileName, FileMode.Create, FileAccess.ReadWrite)) //openfilename因为前面的是否打开文件的flag已经判断了,所以可以不做判null处理。 { byte[] bt = System.Text.Encoding.Default.GetBytes(cf.getText()); //使用默认文本编码保存文件 fs.Write(bt, 0, bt.Length); fs.Close(); //记得一定要关闭流。 cf.Saveed(); //刷新保存为以保存,实则是刷新textchange的状态。 this.statuslabel1.Text = "保存文本成功"; } cf.Close(); //关闭子窗体 openFileName = String.Empty; //全局变量清空 FileisOpen = false; this.OnLoad(e); } else { SaveFile(); //已经选择保存修改之后,由于当前状态为未打开文件,所以使用保存文件对话框保存文件。 cf.Saveed(); //修改文件保存状态。 cf.Close(); //新建窗体,重新初始化等操作 openFileName = String.Empty; FileisOpen = false; this.OnLoad(e); } } else if (dialogResult == DialogResult.No)//选择不保存修改,不管当前状态是否是已经打开文件都直接执行新建窗体操作。 { cf.Close(); openFileName = String.Empty; FileisOpen = false; this.OnLoad(e); } } else//文本并未被修改则可以直接执行新建窗体操作。 { cf.Close(); openFileName = String.Empty; FileisOpen = false; this.OnLoad(e); } } else//子窗体实例化未成功,则请求用户重启软件。 { MessageBox.Show("软件出现问题,请重启软件重试!", "抱歉", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/* * 查找下一个按钮实现方法 * 由于反向查找方法所需要的index与正向查找需要的index的变化是不同的 * 正向查找是改变开始的idnex,反向查找是改变结尾的index */ private void nextFind_Click(object sender, EventArgs e) { RichTextBoxFinds finds = RichTextBoxFinds.None; //枚举默认值 if (isMatchCaps) //如果开启了匹配大小写 { finds = RichTextBoxFinds.None | RichTextBoxFinds.MatchCase; } if (isMatchWords)//如果开启了全词匹配 { finds |= RichTextBoxFinds.WholeWord; } if (isReverse)//如果开启了反向查找 { finds |= RichTextBoxFinds.Reverse; } if (i == 0 && tempi == 0)//反向查找查找到了最开头,判断是否开启了循环查找,如果未开启则提示查找到头了。 { if (!isCircle) { MessageBox.Show("查找也是有底线的!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } if (i >= cf.getText().Length)//正向查找查找到文件结尾之后,判断是否开启了循环查找 { if (!isCircle) { MessageBox.Show("查找也是有底线的!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } tempi = cf.FindText(this.textfind.Text, i, finds); //调用子窗体查找函数查找指定内容 if (isReverse) //如果开启了反向查找,设置index的变化方法 { if (tempi != -1) //就是一直查找到内容,查找不到内容会返回1,richtextbox的查找函数文件的末尾和开头如果都能匹配到查找的内容,不会返回-1,所以要在前面定义两个if判断来提示用户 { i = tempi; //让每次查找的结尾都为上一次查找到的index(0,0的情况前面进行了if判断提示 } else if (tempi == -1) //如果没有查找到内容,或者在限定的范围内没有找到匹配项 { if (i == 0) //如果当前是在全文中都没有找到内容,就提示没有匹配项 { MessageBox.Show("没有查到相关文本内容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else//如果是限定范围内没有找到匹配项 { if (isCircle)//又开启了循环查找的话 { i = 0; //那就重新重头开始查找 tempi = cf.FindText(this.textfind.Text, i, finds); i = tempi; //设置前一个结果的index为搜索范围的结尾 } else if (!isCircle) //没有开启循环查找,提示查找到结尾了 { MessageBox.Show("查找也是有底线的!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } } else//正向查找 { if (tempi != -1)//就是一直查找到内容,查找不到内容会返回1,richtextbox的查找函数文件的末尾和开头如果都能匹配到查找的内容,不会返回-1,所以要在前面定义两个if判断来提示用户 { i = tempi + 1; //设置下一个查找范围为上一个查找到的index的后一位 } else if (tempi == -1) //如果没有查找到内容,或者在限定的范围内没有找到匹配项 { if (i == 0) //如果当前是在全文中都没有找到内容,就提示没有匹配项 { MessageBox.Show("没有查到相关文本内容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else//如果是限定范围内没有找到匹配项 { if (isCircle)//如果开启了循环查找 { i = 0; //那就重新重头开始查找 tempi = cf.FindText(this.textfind.Text, i, finds); i = tempi + 1; //设置下一个查找范围为上一个查找到的index的后一位 } else if (!isCircle) //没有开启循环查找,提示查找到结尾了 { MessageBox.Show("查找也是有底线的!"); } } } } }