Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
        /*
         * 查找下一个按钮实现方法
         * 由于反向查找方法所需要的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("查找也是有底线的!");
                        }
                    }
                }
            }
        }