C# 編程實驗之模擬實現Windows記事本

爲了弄這個記事本用了我好久時間,各種上網查資料,目前實現功能不多,有新建,打開,保存,另存爲,查找,查找下一個等,應該目前是網上最全面的吧,雖然沒有完全實現,廢話不多說,直接開始

使用控件截圖

form1截圖

form2截圖

form3截圖

form5截圖

form代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace windows_txt
{
    public partial class Form1 : Form
    {
        public int a = 0;
        public int i = -1;
        public int k = 0;
        public int j = 0;
        public int b = 0;
        public int c = 0;
        public int d = 0;
        public int f = 0;
        public string rtb = "";

        private FontDialog fontDialog1 = new FontDialog();
        private OpenFileDialog spenFileDialog1 = new OpenFileDialog();
        //private SaveFileDialog saveFileDialog1 = new SaveFileDialog();


        public Form1()
        {
            InitializeComponent();
        }


        [System.Runtime.InteropServices.DllImport("User32.DLL")]
        public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int iParam);
        private const int EM_LINEFROMCHAR = 0xC9;
        private const int EM_LINEINDEX = 0xBB;

        private Point GetCursorPos(RichTextBox richtextBox)
        {
            Point cursorPos = new Point(0, 0);
            int x, y;
            y = SendMessage(richtextBox.Handle, EM_LINEFROMCHAR, richtextBox.SelectionStart, 0);
            x = richtextBox.SelectionStart - SendMessage(richtextBox.Handle, EM_LINEINDEX, y, 0);
            cursorPos.Y = ++y;
            cursorPos.X = ++x;
            return cursorPos;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            自動換行ToolStripMenuItem.Checked = false;
            d = 1;
            saveFileDialog1.FileName = "*.txt";
            openFileDialog1.FileName = "*.txt";

            richTextBox1.ContextMenuStrip = contextMenuStrip1;
            timer1.Enabled = true;
            timer1.Interval = 100;

            this.toolStripStatusLabel1.Text = "系統當前時間:" + DateTime.Now.ToString();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)    //關閉窗口彈出對話框,在Form1的事件中加入FormClosing事件。
        {
            DialogResult result;
            try
            {
                if (rtb != richTextBox1.Text)
                {
                    result = MessageBox.Show("文件 " + this.Text + " 的文字已經改變。\r\n\r\n想保存文件嗎?", "記事本", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
                    if (result == DialogResult.Yes)
                    {
                        saveFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                        if (saveFileDialog1.ShowDialog() == DialogResult.Yes)
                        {
                            richTextBox1.SaveFile(saveFileDialog1.FileName.ToString(), RichTextBoxStreamType.PlainText);
                            richTextBox1.Text = "";
                        }
                        else
                        {
                            e.Cancel = true;
                        }
                    }
                    else if (result == DialogResult.No)
                    {
                        this.Dispose();
                    }
                    else
                        e.Cancel = true;
                }
            }
            catch { }
        }

        private void ContextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
        }

        private void RichTextBox1_TextChanged(object sender, EventArgs e)
        {
        }

        

        private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.FileName = "*.txt";
            openFileDialog1.FileName = "*.txt";
            DialogResult result;
            try
            {
                if (rtb != richTextBox1.Text)
                {
                    result = MessageBox.Show("文件 " + this.Text + " 的文字已經改變。\r\n\r\n想保存文件嗎?", "記事本", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
                    if (result == DialogResult.Yes)
                    {
                        saveFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                        saveFileDialog1.ShowDialog();
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        richTextBox1.Text = "";
                        rtb = richTextBox1.Text;
                    }
                    else if (result == DialogResult.No)
                    {
                        richTextBox1.Text = "";
                        rtb = richTextBox1.Text;
                    }
                }
                else
                {
                    richTextBox1.Text = "";
                    rtb = richTextBox1.Text;
                    this.Text = "無標題-記事本";
                    剪切ToolStripMenuItem.Enabled = true;
                    複製ToolStripMenuItem.Enabled = true;
                    刪除ToolStripMenuItem.Enabled = true;
                    查找ToolStripMenuItem.Enabled = true;
                    查找下一個ToolStripMenuItem.Enabled = true;
                    
                }
            }
            catch { }
        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {

        }


        //判斷文檔內容是否修改,若修改先保存。否則可以打開。
        private void 打開ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result;
            try
            {
                if (rtb != richTextBox1.Text)
                {
                    result = MessageBox.Show("文件 " + this.Text + " 的文字已經改變。\r\n\r\n想保存文件嗎?", "記事本", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
                    if (result == DialogResult.Yes)
                    {
                        saveFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                        saveFileDialog1.ShowDialog();
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        openFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                        openFileDialog1.ShowDialog();
                        richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        rtb = richTextBox1.Text;
                    }
                    else if (result == DialogResult.No)
                    {
                        openFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                        openFileDialog1.ShowDialog();
                        richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        rtb = richTextBox1.Text;
                    }
                }
                else
                {
                    openFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                    openFileDialog1.ShowDialog();
                    richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                    rtb = richTextBox1.Text;
                }
                this.Text = Path.GetFileName(openFileDialog1.FileName) + "- 記事本";
                saveFileDialog1.FileName = openFileDialog1.FileName;
                撤銷ToolStripMenuItem.Enabled = false;
            }
            catch { }
        }

        private void 撤銷ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (a == 0)
            {
                richTextBox1.Undo();
                a = 1;
            }
            else if (a == 1)
            {
                richTextBox1.Redo();
                a = 0;
            }
        }

        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.Text == "無標題-記事本")
                {
                    if (d == 1)
                    {
                        saveFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                        saveFileDialog1.ShowDialog();
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        this.Text = Path.GetFileName(saveFileDialog1.FileName) + "- 記事本";
                    }
                }
                else
                {
                    saveFileDialog1.Filter = @"|*.txt;*.cs";
                    if (this.Text == Path.GetFileName(openFileDialog1.FileName) + "- 記事本")
                        richTextBox1.SaveFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                    else
                        richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                }
                rtb = richTextBox1.Text;
            }
            catch { }
        }

        private void 另存爲ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (d == 1)
                {
                    saveFileDialog1.Filter = @"文本文檔(*.txt)|*.txt|所有格式|*.txt;*.doc;*.cs;*.rtf;*.sln";
                    saveFileDialog1.ShowDialog();
                    richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                    this.Text = Path.GetFileName(saveFileDialog1.FileName) + "- 記事本";
                    rtb = richTextBox1.Text;
                }
            }
            catch { }
        }

        private void 頁面設計ToolStripMenuItem_Click(object sender, EventArgs e)
        {/*
            try
            {
                pageSetupDialog1.Document = printDocument1;
                pageSetupDialog1.Document.DefaultPageSettings.Color = false;
                this.pageSetupDialog1.ShowDialog();
            }
            catch { }*/
        }

        private void 打印ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            /*try
            {
                printDialog1.Document = printDocument1;
                if (printDialog1.ShowDialog() == DialogResult.OK)
                {
                    printDocument1.Print();
                }
            }
            catch
            {
                MessageBox.Show("未安裝打印機!");
            }*/
        }

        private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Cut();
        }

        private void 複製ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Copy();
        }

        private void 粘貼ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Paste();
        }

        private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectedText = "";
        }

        private void 查找ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            this.richTextBox1.HideSelection = false;
            f2.ShowDialog();
        }

        private void 查找下一個ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            this.richTextBox1.HideSelection = false;
            f2.Show();
            //f2.f1 = this;
        }

        private void 替換ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3();
            f3.Show();
            f3.f1 = this;
        }

        private void 轉到ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form5 f5 = new Form5
            {
                LineNumber = SendMessage(this.richTextBox1.Handle, EM_LINEFROMCHAR, this.richTextBox1.SelectionStart, 0) + 1
            };
            if ((f5.ShowDialog() == DialogResult.OK) && (f5.LineNumber < this.richTextBox1.Lines.Length))
            {
                this.richTextBox1.SelectionLength = 0;
                this.richTextBox1.SelectionStart = SendMessage(this.richTextBox1.Handle, EM_LINEINDEX, f5.LineNumber - 1, 0);
                this.richTextBox1.Focus();
                Point cursorPos = GetCursorPos(this.richTextBox1);
                this.toolStripStatusLabel2.Text = "行:" + cursorPos.Y.ToString() + " 列:" + cursorPos.X.ToString();
            }
        }

        private void 全選ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectAll();
        }

        private void 日期時間ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = richTextBox1.Text + DateTime.Now.ToString();
        }

        private void 自動換行ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (j == 0)
            {
                轉到ToolStripMenuItem.Enabled = false;
                if (狀態欄ToolStripMenuItem.Checked == true)
                {
                    statusStrip1.Hide();
                    狀態欄ToolStripMenuItem.Checked = false;
                    自動換行ToolStripMenuItem.Checked = false;
                    狀態欄ToolStripMenuItem.Enabled = false;
                    richTextBox1.WordWrap = true;
                    b = 1;
                }
                else
                {
                    richTextBox1.WordWrap = true;

                    自動換行ToolStripMenuItem.Checked = true;
                    狀態欄ToolStripMenuItem.Enabled = true;
                }
                j = -1;
            }
            else
            {
                轉到ToolStripMenuItem.Enabled = true;
                if (b == 1)
                {
                    statusStrip1.Show();
                    狀態欄ToolStripMenuItem.Checked = true;
                    richTextBox1.WordWrap = false;
                    狀態欄ToolStripMenuItem.Enabled = true;
                    自動換行ToolStripMenuItem.Checked = false;
                    b = 0;
                }
                else
                {
                    自動換行ToolStripMenuItem.Checked = false;
                    狀態欄ToolStripMenuItem.Enabled = true;
                    richTextBox1.WordWrap = false;
                }
                j = 0;
            }
        }

        private void 字體ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (richTextBox1.SelectionLength > 0)
                if (fontDialog1.ShowDialog() == DialogResult.OK)
                {
                    richTextBox1.SelectionFont = fontDialog1.Font;
                }
        }

        private void 狀態欄ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (k == -1)
            {
                statusStrip1.Show();
                狀態欄ToolStripMenuItem.Checked = true;
                k = 0;
            }
            else
            {
                statusStrip1.Hide();
                狀態欄ToolStripMenuItem.Checked = false;
                k = -1;
            }
        }



        //contentmenustrip1的內容實現
        private void 撤銷ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (a == 0)
            {
                richTextBox1.Undo();
                a = 1;
            }
            else if (a == 1)
            {
                richTextBox1.Redo();
                a = 0;
            }
        }

        private void 剪切ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            richTextBox1.Cut();
        }

        private void 複製ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            richTextBox1.Copy();
        }

        private void 粘貼ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            richTextBox1.Paste();
        }

        private void 刪除ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectedText = "";
        }

        private void 全選ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectAll();
        }
    }

}



form2代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace windows_txt
{
    public partial class Form2 : Form
    {

        Form1 f1 = new Form1();
        public string str;
        int index = 0;

        public Form2(Form1 f)
        {
            InitializeComponent();
            this.f1 = f;
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void Form2_Load(object sender, EventArgs e)
        {
            //f1 = (Form1)this.Owner;//使form2歸form1所有
            //index = f1.myindex;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            if(radioButton1.Checked)
            {
                if (textBox1.Text.Length <= 0)
                    return;
                if (index == 0)//如果光標在最開始
                    return;

                //搜索的起點
                int startIndex = index - textBox1.Text.Length;
                if (startIndex <= 0)
                    startIndex = 0;

                index = (f1.Controls.Find("richTextBox1", true)[0]).Text.IndexOf(textBox1.Text,startIndex);

                if(index == -1)
                {
                    MessageBox.Show("do not find");
                    index = f1.richTextBox1.Text.IndexOf(f1.richTextBox1.SelectedText);
                }
                else
                {
                    f1.richTextBox1.Select(index,textBox1.Text.Length);//選中文本
                    index -= 1;
                    if (startIndex <= 0)
                        startIndex = 0;
                    f1.Activate();
                }
            }
            else
            {
                if (textBox1.Text.Length <= 0)
                    return;

                //搜索
                index = (f1.Controls.Find("richTextBox1", true)[0]).Text.IndexOf(textBox1.Text, index);

                if(index == -1)
                {
                    MessageBox.Show("do not find");
                    index = f1.richTextBox1.Text.IndexOf(f1.richTextBox1.SelectedText)+1;
                }
                else
                {
                    f1.richTextBox1.Select(index,textBox1.Text.Length);//選中文本

                    index = index + textBox1.Text.Length;
                    f1.Activate();
                }

            }


            
        }
    }
}

form3代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace windows_txt
{
    public partial class Form3 : Form
    {

        public Form1 f1 = new Form1();

        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {

        }
    }
}

form5和form3沒有實現,所以給了代碼也沒用

下面給一些我查到的對我編程有用的截圖

 

先寫到這裏吧

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章