《C#程序設(shè)計及基于工作過程的項(xiàng)目開發(fā)》課件第5章_第1頁
《C#程序設(shè)計及基于工作過程的項(xiàng)目開發(fā)》課件第5章_第2頁
《C#程序設(shè)計及基于工作過程的項(xiàng)目開發(fā)》課件第5章_第3頁
《C#程序設(shè)計及基于工作過程的項(xiàng)目開發(fā)》課件第5章_第4頁
《C#程序設(shè)計及基于工作過程的項(xiàng)目開發(fā)》課件第5章_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目二我的MDI記事本Ⅱ.1任務(wù)一:“我的MDI記事本”主窗體及子窗體設(shè)計Ⅱ.2任務(wù)二:“我的MDI記事本”功能實(shí)現(xiàn)Ⅱ.3任務(wù)三:“我的MDI記事本”的修飾——皮膚Ⅱ.1任務(wù)一:“我的MDI記事本”主窗體及子窗體設(shè)計

Ⅱ.1.1功能描述通過工具箱中RichTextBox控件和ToolStrip控件以及MDI窗體的應(yīng)用,實(shí)現(xiàn)“我的MDI記事本”的父子窗體設(shè)計。“我的MDI記事本”父窗體如圖Ⅱ.1所示,“我的MDI記事本”父子窗體如圖Ⅱ.2所示。圖Ⅱ.1“我的MDI記事本”父窗體圖Ⅱ.2“我的MDI記事本”父子窗體Ⅱ.1.2設(shè)計步驟及要點(diǎn)解析

(1)單擊Notepad,設(shè)置其IsMdiContainer屬性為True,設(shè)置其WindowState屬性為Maximized。在項(xiàng)目一“我的SDI記事本”的基礎(chǔ)上加入新的菜單項(xiàng),并設(shè)置各自的Name和Text屬性,并修改編輯菜單項(xiàng)、窗口菜單項(xiàng)、格式菜單項(xiàng)和查看菜單項(xiàng),如表Ⅱ.1所示。(2)在工具箱中將ToolStrip控件拖放到該窗體,設(shè)置其Name屬性為tsNotepad后,添加所需ToolStripButton,設(shè)置各自的Name和Text屬性,并根據(jù)需要設(shè)置DisplayStyle和Image屬性,如表Ⅱ.2所示。(3)在窗體上拖放控件FontDialog和ColorDialog,并分別設(shè)置對象名稱為fontDlg和colorDlg。

(4)在解決方案資源管理器中右鍵單擊項(xiàng)目名稱,選擇快捷菜單“添加”→“新建文件夾”,并命名為Resources。將欲作為背景的圖片導(dǎo)入Resources文件夾。

(5)在VisualStudio中點(diǎn)擊“項(xiàng)目”→“添加Windows窗體”,或在“解決方案資源管理器”中右鍵單擊本項(xiàng)目,選擇“添加”→“Windows窗體”,輸入名稱“TextForm”,單擊“添加”按鈕。該窗體為子窗體。

(6)在工具箱中將RichTextBox控件拖放到該窗體,并設(shè)置其Name屬性為txtBox,Text屬性為“無標(biāo)題”。其它屬性的設(shè)置見表Ⅱ.3。要點(diǎn)解析:

(1)設(shè)置IsMdiContainer屬性為True表示將當(dāng)前窗體設(shè)置為MDI窗體的父窗體。

(2)“—”為ToolStripSeparator,即作為工具欄按鈕的分隔符。

(6)?BorderStyle屬性為None表示設(shè)置當(dāng)前窗體為無邊框模式;EnableAutoDragDrop屬性為True表示啟用文本和其他數(shù)據(jù)的拖放操作;Modifiers屬性值為Public表示設(shè)置當(dāng)前子窗體的RichTextBox控件對象的可見性級別為公有的,即在父窗體可訪問子窗體的RichTextBox控件;ScrollBars屬性定義滾動條;Multiline屬性值為True表示文本可跨越多行;WordWrap屬性為True表示在當(dāng)前RichTextBox中可自動換行。Ⅱ.1.3知識庫

1.?ToolStrip控件

ToolStrip控件即工具欄控件,一般由多個按鈕、標(biāo)簽等排列組成,通過這些項(xiàng)可以快速地執(zhí)行程序提供的一些常用命令,比使用菜單選擇更加方便快捷。

Windows窗體中添加一個ToolStrip控件后,窗體頂端會出現(xiàn)一個工具欄,單擊工具欄上的小箭頭彈出下拉菜單,其中每一項(xiàng)都是可以使用在工具欄上的項(xiàng)類型,常用的有Button(按鈕)、Label(標(biāo)簽)、ComboBox(組合框)、SplitButton(分隔按鈕)和TextBox(文本框)等控件。單擊某項(xiàng)即可將其添加到工具欄上,也可以通過ToolStrip控件的Items屬性調(diào)用“項(xiàng)集合編輯器”對話框完成工具欄的編輯。

2.?RichTextBox控件

RichTextBox控件不僅允許輸入和編輯文本,同時還提供了標(biāo)準(zhǔn)TextBox控件所沒有的指定格式的許多功能。標(biāo)準(zhǔn)TextBox控件用到的所有屬性、事件和方法,RichTextBox控件幾乎都能支持,且RichTextBox控件并沒有和標(biāo)準(zhǔn)TextBox控件一樣具有64?KB字符容量的限制。對于RichTextBox控件文本的任何部分,均可通過設(shè)定其屬性指定格式,并可以使用控件的方法(LoadFile和SaveFile)直接讀寫文件。RichTextBox控件的屬性或方法見表Ⅱ.5。Ⅱ.2任務(wù)二:“我的MDI記事本”功能實(shí)現(xiàn)

Ⅱ.2.1功能描述

代碼實(shí)現(xiàn)“我的記事本”父子窗體的主要功能。

Ⅱ.2.2功能代碼展示及要點(diǎn)解析

(1)在父窗體類中導(dǎo)入名稱空間。

1usingSystem.IO;

(2)創(chuàng)建父窗體對象并賦值。

2publicstaticNotepadnpForm;

3publicNotepad()

4{

5InitializeComponent();

6npForm=this;

7}代碼分析:

2創(chuàng)建一個靜態(tài)的主窗體對象,便于在子窗體中訪問。

6在構(gòu)造函數(shù)中把自身賦值給這個對象,子窗體就能直接使用Notepad.npForm來

調(diào)用父窗體而不必實(shí)例化。

(3)在父窗體類中定義當(dāng)前激活的子窗體對象。

8TextFormtfForm=newTextForm();

(4)父窗體類的MDI子窗體激活事件。

9privatevoidNotepad_MdiChildActivate(objectsender,System.EventArgse)

10{

11tfForm=(TextForm)this.ActiveMdiChild;

12}

(5)在父窗體類中定義對話框返回值對象。

13publicDialogResultresult;

(6)父窗體“新建”子菜單項(xiàng)。

14privatevoidtsmiNew_Click(objectsender,EventArgse)

15{

16TextFormtfForm=newTextForm();

17tfForm.MdiParent=this;

18tfForm.Show();

19}代碼分析:

17設(shè)置新建窗體的父窗體為當(dāng)前窗體。

18子窗體顯示。

(7)父窗體“退出”子菜單項(xiàng)。

20publicvoidtsmiExit_Click(objectsender,EventArgse)

21{

22this.Close();

23}

代碼分析:

22關(guān)閉當(dāng)前窗體。

(8)父窗體自定義獲取文件的方法。

24privatevoidGetFile(stringpath)

25{

26StreamReadersr=newStreamReader(path,System.Text.Encoding.Default);

27tfForm.txtBox.Text=sr.ReadToEnd();

28tfForm.tempFile=tfForm.txtBox.Text;

29sr.Close();

30}代碼分析:

26定義一個文件流對象為sr,用于讀取指定路徑的文件。

27將文件流中的數(shù)據(jù)賦值為子窗體RichTextBox控件的文本信息。

28將子窗體RichTextBox控件的文本信息賦值給當(dāng)前子窗體的全局變量tempFile。

29關(guān)閉讀文件流。

(9)父窗體“打開”子菜單項(xiàng)。

31privatevoidtsmiOpen_Click(objectsender,EventArgse)

32{

33boolalready=false;

34OpenFileDialogdlg=newOpenFileDialog();

35dlg.Filter="文本文件|*.txt|cs文件|*.cs|java文件|*.java|html文件|*.html";

36dlg.Multiselect=true;

37if(dlg.ShowDialog()==DialogResult.OK)

38{

39for(inti=0;i<dlg.FileNames.Length;++i)

40{

41for(intj=0;j<this.MdiChildren.Length;++j)

42{

43MdiChildren[j].Activate();

44if(tfForm.tempFilePath==dlg.FileNames[i])

45{

46already=true;

47break;

48}

49}

50if(already==false)

51{

52tsmiNew_Click(sender,e);

53GetFile(dlg.FileNames[i]);

54tfForm.tempFilePath=dlg.FileNames[i];

55tfForm.Text=Path.GetFileName(dlg.FileNames[i]);

56}

57}

58}

59}代碼分析:

33定義一個布爾類型的局部變量already,用于判斷是否已存在將要打開的文件,初始為False。

34創(chuàng)建打開對話框?qū)ο骴lg。

35設(shè)置打開文件的類型。

36設(shè)置對話框允許選擇多個文件。

39使用循環(huán)變量i指向選擇要打開的文件。

41使用循環(huán)變量j指向每個要打開文件所在的子窗體。

43激活當(dāng)前子窗體。

44判斷當(dāng)前被激活窗體的文件路徑是否與將要打開的文件路徑一致,即若已存在將要打開的文件。

47強(qiáng)制退出當(dāng)前子窗體。

50若將要打開的文件不存在。

52執(zhí)行與子菜單項(xiàng)“新建”一致的功能,調(diào)用該菜單項(xiàng)的單擊事件。

53調(diào)用自定義的打開文件的方法GetFile(),指定當(dāng)前參數(shù)為當(dāng)前打開文件的文件名。

54把文件路徑賦值給當(dāng)前tfForm對象的tempFilePath。

55設(shè)置當(dāng)前窗體的標(biāo)題信息為打開文件的文件名。

(10)父窗體“保存”子菜單項(xiàng)。

60publicvoidSave(stringpath)

61{

62StreamWritersw=newStreamWriter(path,false,System.Text.Encoding.Default);

63sw.Write(tfForm.txtBox.Text);

64tfForm.tempFile=tfForm.txtBox.Text;

65sw.Close();

66}代碼分析:

60自定義直接保存的方法,參數(shù)為保存文件的路徑。

62使用寫文件流創(chuàng)建一個對象sw,其中第1個參數(shù)為路徑;第2個參數(shù)為True表示

在原文本后面繼續(xù)添加,為False則覆蓋原文本;第3個參數(shù)是解碼。

63將當(dāng)前窗體的文本框的文本信息寫到文件流中。

64將當(dāng)前窗體的文本框的文本內(nèi)容賦值給當(dāng)前的窗體對象的tempFile屬性。

65保存并關(guān)閉文件流。

(11)“另存為”子菜單項(xiàng)。

67privatevoidtsmiSaveAs_Click(objectsender,EventArgse)

68{

69SaveFileDialogdlg=newSaveFileDialog();

70dlg.Filter="文本文件|*.txt|cs文件|*.cs|java文件|*.java|html文件|*.html";

71if(dlg.ShowDialog()==DialogResult.OK)

72{

73Save(dlg.FileName);

74tfForm.tempFilePath=dlg.FileName;

75tfForm.Text=Path.GetFileName(dlg.FileName);

76}

77}代碼分析:

69創(chuàng)建保存文件對話框?qū)ο蟆?/p>

70設(shè)置保存文件對話框保存的文件類型。

73調(diào)用自定義的保存方法,指定參數(shù)值為當(dāng)前保存對話框所指定的文件名。

74把文件路徑賦值給當(dāng)前tfForm對象的tempFilePath。

75將當(dāng)前窗體的標(biāo)題欄信息設(shè)置為已經(jīng)保存的文件名。

(12)父窗體“保存”子菜單項(xiàng)。

78privatevoidtsmiSave_Click(objectsender,EventArgse)

79{

80if(tfForm.tempFilePath=="")

81tsmiSaveAs_Click(sender,e);

82else

83Save(tfForm.tempFilePath);

84}代碼分析:

80若存儲路徑的全局變量為空,則為首次保存。

81首次保存執(zhí)行與“另存為”子菜單項(xiàng)單擊事件一致的功能。

83若不是首次保存,則調(diào)用直接保存的方法沿用原有的路徑直接保存。

(13)父窗體“剪切”子菜單項(xiàng)。

85publicvoidtsmiCut_Click(objectsender,EventArgse)

86{

87tfForm.txtBox.Cut();

88}

(14)父窗體“復(fù)制”子菜單項(xiàng)。

89publicvoidtsmiCopy_Click(objectsender,EventArgse)

90{

91tfForm.txtBox.Copy();

92}

(15)父窗體“粘貼”子菜單項(xiàng)。

93publicvoidtsmiPaste_Click(objectsender,EventArgse)

94{

95tfForm.txtBox.Paste();

96}

(16)父窗體“撤銷”子菜單項(xiàng)。

97publicvoidtsmiUn_Click(objectsender,EventArgse)

98{

99tfForm.txtBox.Undo();

100}

(17)父窗體“恢復(fù)”子菜單項(xiàng)。

101publicvoidtsmiRe_Click(objectsender,EventArgse)

102{

103tfForm.txtBox.Redo();

104}

(18)父窗體“刪除”子菜單項(xiàng)。

105publicvoidtsmiDel_Click(objectsender,EventArgse)

106{

107tfForm.txtBox.SelectedText="";

108}

(19)父窗體“全選”子菜單項(xiàng)。

109publicvoidtsmiSelectAll_Click(objectsender,EventArgse)

110{

111tfForm.txtBox.SelectAll();

112}

(20)父窗體“自動換行”子菜單項(xiàng)。

113privatevoidtsmiWordWrap_Click(objectsender,EventArgse)

114{

115if(tfForm.txtBox.WordWrap==false)

116{

117tfForm.txtBox.ScrollBars=RichTextBoxScrollBars.ForcedVertical;

118tfForm.txtBox.WordWrap=true;

119}

120else

121{

122tfForm.txtBox.WordWrap=false;

123tfForm.txtBox.ScrollBars=RichTextBoxScrollBars.ForcedBoth;

124}

125}代碼分析:

115判斷是否支持自動換行。

117設(shè)置當(dāng)前子窗體對象的文本框滾動條為垂直滾動條。

118設(shè)置自動換行。

122取消自動換行。

123設(shè)置當(dāng)前子窗體對象的文本框滾動條為垂直和水平滾動條。

(21)父窗體“字體”子菜單項(xiàng)。

126privatevoidtsmiFont_Click(objectsender,EventArgse)

127{

128if(fontDlg.ShowDialog()==DialogResult.OK)

129{

130if(tfForm.txtBox.SelectedText!="")

131tfForm.txtBox.SelectionFont=fontDlg.Font;

132else

133tfForm.txtBox.Font=fontDlg.Font;

134}

135}代碼分析:

130判斷當(dāng)前是否有選中的文本。

131改變當(dāng)前選中文本的字體為字體對話框中所選擇的字體。

133若沒有選中文字,則將所有文本的字體設(shè)置為字體對話框所選中的字體。

(22)父窗體“顏色”子菜單項(xiàng)。

136privatevoidtsmiColor_Click(objectsender,EventArgse)

137{

138if(colorDlg.ShowDialog()==DialogResult.OK)

139{

140if(tfForm.txtBox.SelectedText!="")

141tfForm.txtBox.SelectionColor=colorDlg.Color;

142else

143tfForm.txtBox.ForeColor=colorDlg.Color;

144}

145}代碼分析:

138打開顏色對話框,并判斷是否按下對話框的“確定”按鈕。

140判斷當(dāng)前是否有選中的文本。

141設(shè)置當(dāng)前選中文本的顏色為顏色對話框中所選擇的顏色。

143設(shè)置文本框中的所有文本的顏色為顏色對話框中所選擇的顏色。

(23)父窗體“狀態(tài)欄”子菜單項(xiàng)。

146privatevoidtsmiStatusBar_Click(objectsender,EventArgse)

147{

148if(tsmiStatusBar.Checked==true)

149ssNotPad.Visible=true;

150else

151ssNotPad.Visible=false;

152}代碼分析:

148判斷“狀態(tài)欄”子菜單項(xiàng)是否為選中狀態(tài)。

149若“狀態(tài)欄”子菜單項(xiàng)為選中狀態(tài),則狀態(tài)欄可見。

151若“狀態(tài)欄”子菜單項(xiàng)為非選中狀態(tài),則狀態(tài)欄不可見。

(24)父窗體“背景圖片”子菜單項(xiàng)。

153privatevoidtsmiBI2_Click(objectsender,EventArgse)

154{

155this.BackgroundImage=Properties.Resources.秋千_1440_900_;

156}代碼分析:

155使用“Properties.Resources.圖片名稱”引用一張圖片作為當(dāng)前窗體的背景圖片。

(25)父窗體“水平平鋪”工具欄按鈕。

157privatevoidtsBtnHorizontal_Click(objectsender,EventArgse)

158{

159this.LayoutMdi(MdiLayout.TileHorizontal);

160}代碼分析:

159使用MDI窗體的排列方法LayoutMdi,設(shè)置子窗體的布局為水平平鋪。

(26)父窗體“層疊排放”工具欄按鈕。

161privatevoidtsBtnCascade_Click(objectsender,EventArgse)

162{

163this.LayoutMdi(MdiLayout.Cascade);

164}

代碼分析:

163使用MDI窗體的排列方法LayoutMdi,設(shè)置子窗體的布局為層疊排放。

(27)父窗體“新建”工具欄按鈕。

165privatevoidtsBtnNew_Click(objectsender,EventArgse)

166{

167tsmiNew_Click(sender,e);

168}

代碼分析:

167“新建”按鈕執(zhí)行與“新建”菜單項(xiàng)一致的功能,調(diào)用“新建”子菜單項(xiàng)的單擊事件。由于“新建”按鈕被單擊后所操作對象為新的子窗體,并沒有操作原來存在的子窗體,所以此時直接調(diào)用菜單的單擊事件。

(28)父窗體“打開”工具欄按鈕。

169privatevoidtsBtnOpen_Click(objectsender,EventArgse)

170{

171tsmiOpen_Click(sender,e);

172}

(29)父窗體“退出”工具欄按鈕。

173privatevoidtsBtnExit_Click(objectsender,EventArgse)

174{

175tsmiExit_Click(sender,e);

176}

(30)父窗體“關(guān)閉文本”工具欄按鈕。

177privatevoidtsBtnClose_Click(objectsender,EventArgse)

178{

179if(this.ActiveMdiChild!=null)

180tfForm.Close();

181}

代碼分析:

180若存在活動子窗體,則當(dāng)前子窗體關(guān)閉。

(31)父窗體“保存”工具欄按鈕。

182privatevoidtsBtnSave_Click(objectsender,EventArgse)

183{

184if(this.ActiveMdiChild!=null)

185tsmiSave_Click(sender,e);

186}

(32)父窗體“顏色”工具欄按鈕。

187privatevoidtsBtnColor_Click(objectsender,EventArgse)

188{

189if(this.ActiveMdiChild!=null)

190tsmiColor_Click(sender,e);

191}

(33)父窗體自定義Change方法,用于關(guān)閉文本或退出時提示是否保存。

192publicvoidChange(objectsender,EventArgse)

193{

194if(this.ActiveMdiChild!=null)

195{

196if(tfForm.txtBox.Text!=tfForm.tempFile)

197{

198result=MessageBox.Show(“文件”+tfForm.Text+“的文字已經(jīng)改變。\n\n想保存文件嗎?”,“我的記事本”,MessageBoxButtons.YesNoCancel,MessageBoxIcon.Exclamation);

199if(result==DialogResult.Yes)

200tsmiSave_Click(sender,e);

201}

202else

203result=DialogResult.None;

204}

205}代碼分析:

194判斷是否存在活動的子窗體。

196判斷當(dāng)前文本框內(nèi)的文本與打開或保存時存儲在tempFile中的文本是否一致。

198顯示消息框提示是否保存,并把對話框返回值賦值給result。

199判斷是否按下消息框的“確定”按鈕。

200若按下消息框的“確定”按鈕,則調(diào)用“保存”子菜單項(xiàng)的單擊事件。

203若當(dāng)前文本框內(nèi)的文本與打開或保存時存儲在tempFile中的文本一致,則result值設(shè)定為無。

(34)父窗體的FormClosing事件。

206privatevoidNotepad_FormClosing(objectsender,FormClosingEventArgse)

207{

208while(this.ActiveMdiChild!=null)

209{

210Change(sender,e);

211if(result==DialogResult.Cancel){

212e.Cancel=true;

213break;}

214else

215tfForm.Dispose();

216}

217}代碼分析:

208循環(huán)判斷是否存在子窗體。

210當(dāng)存在子窗體時,調(diào)用自定義的Change方法,進(jìn)行文本的保存。

211判斷顯示消息框時是否按下“取消”按鈕。

212若顯示消息框時按下“取消”按鈕,則取消父窗體的關(guān)閉。

213強(qiáng)制退出循環(huán)體。

215若顯示消息框時按下非取消按鈕,則釋放子窗體。

(35)父窗體“文件”菜單的DropDownOpened事件。

218privatevoidtsmiFile_DropDownOpened(objectsender,EventArgse)

219{

220if(this.ActiveMdiChild==null)

221{

222tsmiSave.Enabled=false;

223tsmiSaveAs.Enabled=false;

224}

225else

226{

227tsmiSave.Enabled=true;

228tsmiSaveAs.Enabled=true;

229}

230}代碼分析:

218菜單項(xiàng)的DropDownOpened事件用來確定子菜單項(xiàng)什么時候可用什么時候不

可用。

220判斷是否存在活動的子窗體。

222若不存在活動的子窗體,則“保存”子菜單項(xiàng)不可用。

223若不存在活動的子窗體,則“另存為”子菜單項(xiàng)不可用。

227若存在活動的子窗體,則“保存”子菜單項(xiàng)可用。

228若存在活動的子窗體,則“另存為”子菜單項(xiàng)可用。

(36)父窗體“編輯”菜單的DropDownOpened事件。

231publicvoidtsmiEdit_DropDownOpened(objectsender,EventArgse)

232{

233if(this.ActiveMdiChild==null)

234{

235tsmiUn.Enabled=false;

236tsmiRe.Enabled=false;

237tsmiCopy.Enabled=false;

238tsmiCut.Enabled=false;

239tsmiPaste.Enabled=false;

240tsmiDel.Enabled=false;

241tsmiSelectAll.Enabled=false;

242}

243else

244{

245if(tfForm.txtBox.SelectedText!="")

246{

247tsmiCopy.Enabled=true;

248tsmiCut.Enabled=true;

249tsmiDel.Enabled=true;

250}

251else

252{

253tsmiCopy.Enabled=false;

254tsmiCut.Enabled=false;

255tsmiDel.Enabled=false;

256}

257if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)==true)

258tsmiPaste.Enabled=true;

259else

260tsmiPaste.Enabled=false;

261if(tfForm.txtBox.CanUndo==true)

262tsmiUn.Enabled=true;

263else

264tsmiUn.Enabled=false;

265if(tfForm.txtBox.CanRedo==true)

266tsmiRe.Enabled=true;

267else

268tsmiRe.Enabled=false;

269if(tfForm.txtBox.Text!="")

270tsmiSelectAll.Enabled=true;

271else

272tsmiSelectAll.Enabled=false;

273}

274}代碼分析:

233若不存在活動的子窗體,則“編輯”菜單下的所有子菜單項(xiàng)不可用。

245若存在活動的子窗體并且文本框中有選中的文本,則“剪切”、“復(fù)制”、“刪

除”子菜單項(xiàng)可用。

251若存在活動的子窗體并且文本框中有選中的文本,則“剪切”、“復(fù)制”、“刪

除”子菜單項(xiàng)不可用。

257判斷當(dāng)前系統(tǒng)剪貼板是否存在可以粘貼的文本數(shù)據(jù)。

258若當(dāng)前系統(tǒng)剪貼板存在可以粘貼的文本數(shù)據(jù),則“粘貼”子菜單項(xiàng)可用。

260若當(dāng)前系統(tǒng)剪貼板不存在可以粘貼的文本數(shù)據(jù),則“粘貼”子菜單項(xiàng)不可用。

261判斷是否能撤銷前一個操作。

262若能撤銷前一個操作,則“撤銷”子菜單項(xiàng)可用。

264若不能撤銷前一個操作,則“撤銷”子菜單項(xiàng)不可用。

265判斷是否能對撤銷的操作重新應(yīng)用。

266若能對撤銷的操作重新應(yīng)用,則“恢復(fù)”子菜單項(xiàng)可用。

268若不能對撤銷的操作重新應(yīng)用,則“恢復(fù)”子菜單項(xiàng)不可用。

269判斷文本框內(nèi)的文本是否為空。

270若文本框內(nèi)的文本內(nèi)容不為空,則“全選”子菜單項(xiàng)可用。

272若文本框內(nèi)的文本內(nèi)容為空,則“全選”子菜單項(xiàng)不可用。

(37)父窗體“格式”菜單的DropDownOpened事件。

275privatevoidtsmiFormat_DropDownOpened(objectsender,EventArgse)

276{

277if(this.ActiveMdiChild==null)

278{

279tsmiWordWrap.Enabled=false;

280tsmiFont.Enabled=false;

281tsmiColor.Enabled=false;

282}

283else

284{

285tsmiWordWrap.Enabled=true;

286tsmiFont.Enabled=true;

287tsmiColor.Enabled=true;

288}

289}代碼分析:

277若不存在活動的子窗體,則“格式”下所有子菜單項(xiàng)“自動換行”、“字體”、“顏

色”不可用。

283若存在活動的子窗體,則“格式”下所有子菜單項(xiàng)“自動換行”、“字體”、“顏色”可用。

(38)在子窗體類中定義各個成員變量。

290publicstringtempFilePath="無標(biāo)題";

291publicstringtempFile="";

代碼分析:

290該變量用于存儲打開或保存文件時的路徑。

291該變量用于存儲打開或保存文件時RichTextBox的文本內(nèi)容。

(39)子窗體RichTextBox的MouseDown事件。

292privatevoidtxtBox_MouseDown(objectsender,MouseEventArgse)

293{

294if(e.Button==MouseButtons.Right)

295this.txtBox.ContextMenuStrip=this.contextMenuStrip1;

296}代碼分析:

294判斷是否在RichTextBox中按下鼠標(biāo)右鍵。

295若在RichTextBox中按下鼠標(biāo)右鍵,則設(shè)置文本框的快捷菜單為編輯菜單。

(40)子窗體菜單“粘貼”的單擊事件。

297privatevoidtsmiPaste_Click(objectsender,EventArgse)

298{

299Notepad.npForm.tsmiPaste_Click(sender,e);

300}

代碼分析:

299使用靜態(tài)父窗體對象npForm調(diào)用主窗體的“粘貼”子菜單項(xiàng),余下的“剪切”、“復(fù)制”、“刪除”、“全選”、“撤銷”、“恢復(fù)”使用相同方法調(diào)用。

(41)子窗體快捷菜單打開時子菜單能否使用的判斷。

301privatevoidcontextMenuStrip1_Opened(objectsender,EventArgse)

302{

303if(txtBox.SelectedText!="")

304{

305tsmiCopy.Enabled=true;

306tsmiCut.Enabled=true;

307tsmiDel.Enabled=true;

308}

309else

310{

311tsmiCopy.Enabled=false;

312tsmiCut.Enabled=false;

313tsmiDel.Enabled=false;

314}

315if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))

316tsmiPaste.Enabled=true;

317else

318tsmiPaste.Enabled=false;

319if(txtBox.CanUndo==true)

320tsmiUn.Enabled=true;

321else

322tsmiUn.Enabled=false;

323if(txtBox.CanRedo==true)

324tsmiRe.Enabled=true;

325else

326tsmiRe.Enabled=false;

327if(txtBox.Text!="")

328tsmiAll.Enabled=true;

329else

330tsmiAll.Enabled=false;

331}

(42)子窗體的FormClosing事件。

332privatevoidTextForm_FormClosing(objectsende

溫馨提示

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

評論

0/150

提交評論