項(xiàng)目一文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
項(xiàng)目一文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
項(xiàng)目一文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
項(xiàng)目一文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
項(xiàng)目一文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、項(xiàng)目一: 文本編輯器的設(shè)計(jì)與實(shí)現(xiàn)【項(xiàng)目背景】文本編輯器有兩類:?jiǎn)挝臋n和多文檔文本編輯器。單文檔文本編輯器一次只能打開一個(gè)文件,如果要打開另一個(gè)文件,必須關(guān)閉當(dāng)前打開的文件,微軟的寫字板程序就是單文檔字處理程序。多文檔文本編輯器允許同時(shí)打開多個(gè)文件,每個(gè)文件占用一個(gè)子窗口,微軟的Word程序就是多文檔字處理程序。本項(xiàng)目主要介紹建立單文檔文本編輯器的方法,通過分析現(xiàn)有文本編輯器的功能與操作過程,利用C#開發(fā)一個(gè)新的文本編輯器。【主要內(nèi)容與技能要求】(1) 會(huì)進(jìn)行復(fù)雜窗口設(shè)計(jì)(2) 會(huì)對(duì)常見的文本編輯功能進(jìn)行分析與編碼實(shí)現(xiàn)(3) 會(huì)設(shè)計(jì)多文檔窗口一、預(yù)備知識(shí)本項(xiàng)目主要利用RichTextBox控件來

2、構(gòu)成文本編輯區(qū)域。1、RichTextBox控件的主要屬性屬性SelectedText、SelectionLength、SelectionStart: 屬性SelectionFont: 屬性SelectionColor: 屬性Lines: 屬性Modified: 事件SelectionChange:事件TextChanged:2、RichTextBox控件的主要方法方法Clear(): 方法Copy()、Cut()、Paste(): 方法SelectAll(): 方法Find(): 方法SaveFile()和LoadFile(): 方法Undo(): 方法Redo(): 二、功能設(shè)計(jì)與實(shí)現(xiàn)1、

3、剪貼板功能 放RichTextBox控件到窗體。屬性Name=richTextBox1,Dock=Fill,Text=。 private void menuItemEditCut_Click(object sender,EventArgs e)richTextBox1.Cut();/剪切private void menuItemEditCopy_Click(object sender,EventArgs e)richTextBox1.Copy();/拷貝private void menuItemEditPaste_Click(object sender,EventArgs e)richText

4、Box1.Paste();/粘貼private void menuItemEditUndo_Click(object sender,EventArgs e)richTextBox1.Undo();/撤銷private void menuItemEditRedo_Click(object sender,EventArgs e)richTextBox1.Redo();/恢復(fù)2、存取文件功能 文本編輯器都應(yīng)具有文件存取功能,菜單頂級(jí)菜單項(xiàng)“文件”的彈出菜單中一般包括如下菜單項(xiàng):新建、打開、關(guān)閉、保存和另存為等。需要用到打開文件對(duì)話框(OpenFileDialog控件)和保存文件對(duì)話框(SaveFil

5、eDialog控件)。和兩個(gè)對(duì)話框的常用屬性和方法:屬性Filter:例如Filter=“純文本文件(*.txt)|*.txt|所有文件(*.*)|*.*” 屬性FilterIndex: 屬性FileName: 屬性InitialDirectory: 屬性DefaultExt: 方法ShowDialog(): 存取文件功能實(shí)現(xiàn)如下: 把OpenFileDialog和SaveFileDialog控件放到窗體中。為菜單增加頂級(jí)菜單項(xiàng):文件,為其彈出菜單增加菜單項(xiàng):新建、打開.、保存.、另存為.、退出。修改這些菜單項(xiàng)的Name屬性分別為:mainMenuFile、menuItemFileNew、me

6、nuItemFileOpen、menuItemFileSave、menuItemFileSaveAs、menuItemFileExit。 為Form1類中定義變量:string s_FileName=“”,記錄當(dāng)前編輯的文件名 private void menuItemFileNew_Click(object sender,EventArgs e) /新建文件菜單項(xiàng)richTextBox1.Text=; /或richTextBox1.Clear();s_FileName=; /新建文件沒有文件名。 private void menuItemFileOpen_Click( /打開文件菜單項(xiàng)obj

7、ect sender,EventArgs e) if(openFileDialog1.ShowDialog()=DialogResult.OK) s_FileName=openFileDialog1.FileName; richTextBox1.LoadFile(openFileDialog1.FileName,RichTextBoxStreamType.PlainText); private void menuItemFileSaveAs_Click( /另存為菜單項(xiàng)object sender,EventArgs e) if(saveFileDialog1.ShowDialog()=Dial

8、ogResult.OK) s_FileName=saveFileDialog1.FileName;richTextBox1.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText); /注意存取文件類型應(yīng)一致。private void menuItemSaveFile_Click( /保存文件菜單項(xiàng)object sender,EventArgs e)if(s_FileName.Length!=0)richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainTe

9、xt);elsemenuItemFileSaveAs_Click(sender,e);private void menuItemExit_Click( /退出菜單項(xiàng)object sender,EventArgs e)Close(); 3、 修改字體 為修改使用的字體,可打開字體對(duì)話框FontDialog,選擇指定字體。可以按兩種方式修改字體,如果未選中文本,表示以后鍵入的字符將按選定字體輸入。如果選中文本,則僅修改選定文本的字體。修改字符顏色也根據(jù)同樣原則。修改字體要用到FontDialog控件 可以用FontDialog對(duì)話框選定指定字體,F(xiàn)ontDialog控件和OpenDialog控件的

10、屬性和方法基本相同,這里只介紹屬性Font,它代表用FontDialog對(duì)話框選定的字體。 修改字體實(shí)現(xiàn)方法: 放FontDialog控件到窗體,屬性Name=fontDialog1。為菜單增加頂級(jí)菜單項(xiàng):格式,屬性Name為mainMenuModel,為其彈出菜單增加菜單項(xiàng):字體,屬性Name為menuItemModelFont,為菜單“格式|字體”菜單項(xiàng)增加單擊事件處理函數(shù)如下: private void menuItemModelFont_Click(object sender,EventArgs e)if(fontDialog1.ShowDialog()=DialogResult.OK

11、) richTextBox1.SelectionFont=fontDialog1.Font;4、About對(duì)話框 單擊菜單項(xiàng)目|添加Windows窗體菜單項(xiàng),彈出對(duì)話框,添加一個(gè)窗體,修改formAbout窗體屬性StartPosition=CenterParent,修改屬性MaximizeBox=False,MinimizeBox=False,屬性FormBorderStyle=FixedDialog 標(biāo)題為“確定”按鈕單擊事件處理函數(shù)如下:private void button1_Click(object sender,EventArgs e)Close();為菜單增加頂級(jí)菜單項(xiàng):幫助,為

12、其彈出菜單增加標(biāo)題為“關(guān)于”的菜單項(xiàng),屬性Name為menuItemAbout。菜單“幫助|關(guān)于”菜單項(xiàng)單擊事件處理函數(shù)如下: private void menuItemAbout_Click(object sender,EventArgs e)formAbout AboutDialog=new formAbout(); AboutDialog.ShowDialog(this);/打開模式對(duì)話框/注意不能使用Show()函數(shù),它打開非模式對(duì)話框 5、 文本編輯器查找替換功能首先介紹模式對(duì)話框和非模式對(duì)話框的概念。并使用非模式對(duì)話框在文本編輯器中實(shí)現(xiàn)查找和替換功能。 (1)模式對(duì)話框和非模式對(duì)話

13、框 模式對(duì)話框和非模式對(duì)話框的區(qū)別是: 兩類對(duì)話框本質(zhì)上都是窗體,是Form類的派生類,只是打開時(shí)使用的方法不一樣,打開模式對(duì)話框,使用方法ShowDialog(),而打開非模式對(duì)話框,使用方法Show()。 (2)查找替換功能的實(shí)現(xiàn) 建立新窗體,窗體文件名稱為formFindReplace.cs,作為查找替換對(duì)話框。窗體類名也為formFindReplace,為formFindReplace類增加變量:Form1 MainForm1; 屬性StartPosition=CenterParent,MaximizeBox=False,MinimizeBox=False, FormBorderSty

14、le=FixedDialog, Text=“查找和替換” 修改formFindReplace類構(gòu)造函數(shù)如下,增加的參數(shù)form1是主窗體屬性Name的值。public formFindReplace(Form1 form1) InitializeComponent(); MainForm1=form1;/新增語句,記錄主窗體屬性Name的值/有了Form1引用,可以在formFindReplace類中調(diào)用Form1類的公有方法 查找替換對(duì)話框中標(biāo)題為“查找下一個(gè)”按鈕單擊事件函數(shù)如下:private void buttonFind_Click(object sender,EventArgs e

15、)if(textBox1.Text.Length!=0)/MainForm1.FindRichTextBoxString方法見后面定義MainForm1.FindRichTextBoxString(textBox1.Text); elseMessageBox.Show(“查找字符串不能為空”,提示,MessageBoxButtons.OK);/MessageBox是對(duì)話框 查找替換對(duì)話框中標(biāo)題為“替換查到字符”按鈕單擊事件函數(shù)如下:private void buttonReplace_Click(object sender,EventArgs e) if(textBox2.Text.Lengt

16、h!=0) MainForm1.ReplaceRichTextBoxString(textBox2.Text); else / MainForm1.ReplaceRichTextBoxString后面定義 MessageBox.Show(“替換字符串不能為空”,提示, MessageBoxButtons.OK); 為Form1類增加變量:int FindPostion=0,該變量用來記錄下一次查找的開始位置。為Form1窗體菜單的編輯頂級(jí)菜單項(xiàng)的彈出菜單增加菜單項(xiàng):查找和替換,屬性Name為menuItemFindReplace。查找和替換菜單項(xiàng)單擊事件處理函數(shù)如下: private void

17、 menuItemFindReplace_Click(object sender,EventArgs e)FindPostion=0;/下句中的this是Form1類對(duì)象引用formFindReplace FindReplaceDialog=new formFindReplace(this);FindReplaceDialog.Show(); /打開非模式對(duì)話框使用Show()方法 定義FindRichTextBoxString方法 public void FindRichTextBoxString(string FindString)if(FindPostion=richTextBox1.T

18、ext.Length) MessageBox.Show(“已到文本底部,再次查找將從文本開始處查找”,提示,MessageBoxButtons.OK); FindPostion=0;/下次查找的開始位置 return; FindPostion=richTextBox1.Find(FindString,FindPostion,RichTextBoxFinds.MatchCase);if(FindPostion=-1)/-1表示未找到匹配字符串,提示用戶MessageBox.Show(未找到匹配字符串,再次查找將從文本開始處查找,提示, MessageBoxButtons.OK); FindPos

19、tion=0; /下次查找的開始位置 else/找到匹配字符串 richTextBox1.Focus(); /主窗體成為注視窗口 FindPostion+=FindString.Length; /下次查找的開始位置在此次找到字符串之后替換字符串的方法 :public void ReplaceRichTextBoxString(string ReplaceString)if(richTextBox1.SelectedText.Length!=0)richTextBox1.SelectedText=ReplaceString;/替換被選定的字符串 6、對(duì)話框MessageBox MessageBo

20、x.Show(this,要保存當(dāng)前更改嗎?,保存更改嗎?,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question); 7、 提示保存已被修改的文件 為Form1類增加一個(gè)bool變量bSave=false作為標(biāo)記,用來跟蹤控件RichTextBox中的文本內(nèi)容是否被修改。在程序開始運(yùn)行、建立和打開一個(gè)新文件后,bSave=false,表示如果關(guān)閉當(dāng)前文件,不必提示用戶保存當(dāng)前文件。當(dāng)RichTextBox控件中的文本被修改,將激活RichTextBox控件TextChanged事件,在該事件處理函數(shù)中,使bSave=true,表示關(guān)閉當(dāng)前文件

21、前,要詢問用戶是否保存當(dāng)前已被修改的文件。首先在主窗體Form1類中增加一個(gè)函數(shù),其功能是如果檢查到當(dāng)前文件已被修改,用對(duì)話框詢問用戶是否保存當(dāng)前文件,根據(jù)用戶的選擇作相應(yīng)的處理,該函數(shù)返回true,表示繼續(xù)操作, 該函數(shù)返回false,表示忽略此次操作。之所以要增加這個(gè)函數(shù)是因?yàn)橛腥幰玫酱撕瘮?shù)。該函數(shù)定義如下: public bool IfSaveOldFile() bool ReturnValue=true;if(bSave)System.Windows.Forms.DialogResult dr; dr=MessageBox.Show(this,“要保存當(dāng)前更改嗎?”, 保存更改嗎?

22、, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);switch(dr)/根據(jù)用戶選擇做相應(yīng)處理 case System.Windows.Forms.DialogResult.Yes:bSave=false;/保存文件后,應(yīng)使bSave為falseif(s_FileName.Length!=0)richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText); else SaveFileDialog saveFileDialog1=new SaveFileDialo

23、g();if(saveFileDialog1.ShowDialog()=DialogResult.OK) s_FileName=saveFileDialog1.FileName; richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText); /返回true通知調(diào)用本方法的程序本次操作繼續(xù)ReturnValue=true; break;/單擊了no按鈕,不保存case System.Windows.Forms.DialogResult.No:bSave=false;ReturnValue=true;break;/單擊了Can

24、cel按鈕case System.Windows.Forms.DialogResult.Cancel: ReturnValue=false; break; /返回false,通知調(diào)用本方法的程序,本次操作取消return ReturnValue;在菜單“文件|新建”和“文件|打開”菜單項(xiàng)的事件函數(shù)的第1條語句前增加如下語句: if(!IfSaveOldFile()/如果返回false本次操作取消 return;修改菜單“文件|保存.”菜單項(xiàng)單擊事件處理函數(shù)如下:private void menuItemSaveFile_Click(object sender,EventArgs e)if(s_FileName.Length!=0)bSave=false; richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);elsemenuItemSav

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論