Written by Allen Lee 添加配置文件 首先,向項目添加一個Options.xml文件,這個文件將會用來儲存應(yīng)用程序的配置信息: 圖 1 接著,把Options.xml的Copy to Output Directory屬性的值改為Copy if newer: 圖 2 然后,就 " /> 青青视频国产色偷偷,国产在线观看不卡,兔费看少妇性L交大片免费

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

WM有約(二):配置信息


Written by Allen Lee

 

添加配置文件

首先,向項目添加一個Options.xml文件,這個文件將會用來儲存應(yīng)用程序的配置信息:

圖 1

接著,把Options.xml的Copy to Output Directory屬性的值改為Copy if newer:

圖 2

然后,就是為Options.xml添加配置信息了:

代碼 1

那么,我們?nèi)绾问褂眠@個文件呢?關(guān)于這個問題,我首先想到的是為它創(chuàng)建一個OptionManager類,在我的想象里,它應(yīng)該是這樣使用的:

代碼 2

在繼續(xù)之前,我想請你思考一個問題:你會如何實現(xiàn)OptionManager的Options成員呢?下面是我的做法,使用了單例模式和索引器:

代碼 3

當(dāng)然,你也可以學(xué)ConfigurationManager類那樣,通過AppSettings靜態(tài)屬性返回一個NameValueCollection對象。接下來的問題是,如何訪問Options.xml呢?由于Options.xml上面的配置信息實際上只是一組鍵/值對,于是你可以考慮在OptionManager的構(gòu)造函數(shù)里把它們?nèi)孔x到一個內(nèi)部的Dictionary對象里:

代碼 4

LoadOptions方法使用了LINQ to XML來讀取Options.xml里的配置信息,并以Dictionary的形式返回:

代碼 5

這里使用了GetXmlPath方法來獲取Options.xml的路徑:

代碼 6

OptionManager提供了一個Save方法,用于保存配置信息:

代碼 7

其中,SaveOptions方法也使用了LINQ to XML來構(gòu)建并保存配置信息:

代碼 8

最后就是OptionManager的索引器了:

代碼 9

 

設(shè)計選項窗體

說到選項窗體,你會如何設(shè)計?我想象中的選項窗體大致像這樣:

圖 3

我用了一個NumericUpDown控件來收集MaxSelectionCount的配置信息,另外用了兩個DateTimePicker控件分別收集MinDate和MaxDate的配置信息。

接著,我們來看看底下兩個菜單項。Cancel菜單項比較簡單,僅僅把窗體的DialogResult設(shè)為Cancel:

代碼 10

而OK菜單項的任務(wù)就多一點,它要保存用戶的配置信息:

代碼 11

接著就是修改一下主窗體的菜單:

圖 4

Save菜單項和以前一樣,而Options菜單項將會打開選項窗體:

代碼 12

現(xiàn)在,我們來運行一下這個應(yīng)用程序:

圖 5

圖 6

有問題!選項窗體打開的時候,上面的控件沒有反映配置文件里面的信息,這是因為我沒有實現(xiàn)這樣的邏輯,同樣地,這個問題也會發(fā)生在主窗體身上,這意味著無論我們?nèi)绾涡薷呐渲梦募匦聠?a href=/pingce/yingyong/ target=_blank class=infotextkey>應(yīng)用程序之后,主窗體將會恢復(fù)默認(rèn)配置,何等嚴(yán)重!

首先是選項窗體打開的時候需要讀取配置信息到對應(yīng)的控件上:

代碼 13

代碼 14

由于讀取配置信息的代碼和代碼12里的那部分是相同的,所以我把它提取出來,放在SetupOptions方法里,這樣,代碼12就簡化為:

代碼 15

再次運行應(yīng)用程序:

圖 7

這次正常了。不過還有一個小問題,選項窗體里保存配置信息的代碼屬于OK菜單項而不是選項窗體的,當(dāng)用戶單擊窗體右上角的OK按鈕時,雖然窗體的DialogResult屬性返回OK,但實質(zhì)上沒有執(zhí)行任何保存配置信息的操作,這就導(dǎo)致了窗體行為的不一致。解決這個問題的辦法有兩個,一個是去掉窗體右上角的OK按鈕,另一個是把OK菜單項里保存配置信息的代碼放到窗體層面上做。前一種做法很簡單,只需要把選項窗體的ControlBox屬性設(shè)為false就行了。至于后一種做法,在繼續(xù)討論之前,我想先考一考你,我應(yīng)該選擇Deactivate事件還是Closing事件呢?答案是兩個都可以,因為選項窗體是通過ShowDialog方法打開的,關(guān)閉這樣的窗體是真的關(guān)閉了而不是像主窗體那樣最小化到后臺,所以我們可以放膽使用Closing事件:

代碼 16

還有一個不是問題的問題,就是當(dāng)你關(guān)閉選項窗體時,你會發(fā)現(xiàn)畫面突然停頓,你知道這個時候OptionManager在保存配置信息,但用戶并不知道,這可能會給用戶留下不好的印象/感受,要讓用戶知道后臺正在執(zhí)行任務(wù),最簡單的辦法就是在屏幕正中顯示等待指針,當(dāng)然,任務(wù)完成之后記得去掉等待指針,否則……

 

你還想要什么?

下一集,除了上一集剩下的兩個需求之外,我們還會探討兩個新的需求:

  • 支持日期的包含,比如說2009年2月14日被指定為屆時要選的日期。
  • 如果指定一個周期,應(yīng)用程序?qū)C合排除邏輯、包含邏輯和這個周期計算下一個將要被選中的日期,并顯示在主界面上。

 

 

相關(guān)文章:WM有約(一):你好,CF

NET技術(shù)WM有約(二):配置信息,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久视热频国只有精品 | 羞羞影院午夜男女爽爽免费 | 理论937 | 国产精品欧美久久久久天天影视 | 国产精品久久久久久久伊一 | 一个人免费视频在线观看 | 脔到她哭H粗话HWWW男男动漫 | 九九久久精品 | 99久久精品国内 | 国内国外精品影片无人区 | caoporm国产精品视频免费 | 国产亚洲欧美高清在线 | 免费看黄软件 | 无限好资源免费观看 | 内射白嫩少妇超碰 | 抽插性奴中出乳精内射 | 爽爽影院线观看免费 | 国产在线观看香蕉视频 | 久久国产乱子伦精品免费M 久久国产露脸老熟女熟69 | 亚洲欧美国产旡码专区 | 国产伦精品一区二区三区 | 国产精品久久久久久人妻精品蜜桃 | 久久这里有精品 | a在线观看视频 | 中文字幕一区二区三区在线播放 | 中文无码不卡的岛国片国产片 | 久久最新地址获取 | 秋霞电影在线观看午夜伦 | 免费A级毛片无码无遮挡 | 国产成人免费a在线视频app | 97人妻丰满熟妇AV无码 | 99热久久视频只有精品6 | 高肉黄暴NP文公交车 | 北原夏美 快播 | 最近韩国日本免费观看mv免费版 | 欧美一区二区三区播放 | 偷拍亚洲色自拍 | 美艳人妻在厨房翘着屁股 | 久久影院午夜理论片无码 | www免费看.男人的天堂 | 亚洲精品6久久久久中文字幕 |