繆平 朱曉輝 丁浩
摘 要:隨著軟件規(guī)模的擴(kuò)大和復(fù)雜性的提高,通常使用團(tuán)隊(duì)開發(fā)模式完成軟件的設(shè)計(jì)與開發(fā),通過多人分工協(xié)作可有效提升軟件開發(fā)效率,但也存在編碼風(fēng)格不一致、命名方式不規(guī)范、界面風(fēng)格不統(tǒng)一等問題,導(dǎo)致后期維護(hù)困難,也給用戶使用帶來不便。針對以上問題,基于WinForm界面的統(tǒng)一管理與優(yōu)化提出了用戶界面自定義和軟件界面統(tǒng)一管理兩種方式。實(shí)驗(yàn)結(jié)果表明,這兩種方式能夠在保證項(xiàng)目開發(fā)效率的基礎(chǔ)上使命名方式規(guī)范、控件風(fēng)格一致,令開發(fā)的軟件更方便用戶使用。
關(guān)鍵詞:WinForm;用戶界面自定義;軟件界面統(tǒng)一管理
DOI:10.11907/rjdk.171407
中圖分類號:TP301 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2017)009-0001-03
Abstract:With the increase of complexity and scale of software development, the team development model is usually used to design and develop software, which can improve software development efficiency with the help of cooperation between team members. However, it can also result in several issues such as inconsistent coding style, irregular naming rules, incongruous graphical user interface (GUI) and so on and make the software difficult to maintain and inconvenient to use. Based on these observation, we propose a user-defined GUI methodology and a unified GUI management to manage and optimize the GUI of WinForm applications. Experiment results show that these two methods can not only improve the software development efficiency but also can keep the consistent coding style and naming rules and make the software easier to use.
Key Words:WinForm; user-defined GUI; unified GUI management
0 引言
隨著計(jì)算機(jī)軟件技術(shù)的發(fā)展以及軟件開發(fā)規(guī)模的逐漸擴(kuò)大,各種開發(fā)平臺得到了廣泛運(yùn)用[1]。WinForm是.Net開發(fā)平臺中對Windows Form的一種稱謂。.NET開發(fā)平臺具有開發(fā)效率高、人機(jī)交互界面友好等優(yōu)勢。從用戶角度而言,WinForm人機(jī)界面友善,且程序開發(fā)完成并發(fā)布后僅需消耗少量的服務(wù)器資源,從而節(jié)約了大量成本[2]。而且WinForm系統(tǒng)對數(shù)據(jù)庫處理提供全面支持,可以訪問數(shù)據(jù)庫中的數(shù)據(jù),并在窗體上顯示和操作數(shù)據(jù);對軟件開發(fā)人員而言,WinForm系統(tǒng)維護(hù)更加容易,且WinForm控件使用靈活,減少了軟件開發(fā)人員的代碼編寫難度,提高了軟件開發(fā)效率。同時(shí),WinForm控件具有向?qū)Чδ?,可為軟件開發(fā)者提供窗體創(chuàng)建、數(shù)據(jù)處理、打包和部署等分步指導(dǎo),非常適合新手入門使用。因此,使用WinForm的軟件開發(fā)者逐漸增多。然而,軟件開發(fā)中編碼風(fēng)格不一致、命名方式不規(guī)范、界面風(fēng)格不統(tǒng)一等問題,將導(dǎo)致后期維護(hù)困難,并給用戶使用帶來極大困難[3],例如:對用于表示“公司編號”的Label控件,由于缺少統(tǒng)一規(guī)范,使得軟件開發(fā)人員將其表示為“公司”、“公司號”等,導(dǎo)致用戶在使用過程中因這些不同名稱而產(chǎn)生困擾。同時(shí),對于一個(gè)大規(guī)模的項(xiàng)目而言,因前期系統(tǒng)開發(fā)中字段命名的隨意性,使得后期維護(hù)十分困難,軟件開發(fā)者將花費(fèi)大量時(shí)間作維護(hù)。為解決這一問題,開發(fā)了自定義控件,通過自定義字段與數(shù)據(jù)庫連接,獲取控件界面規(guī)范,使控件自動生成統(tǒng)一、規(guī)范的界面。同時(shí),為自定義控件開發(fā)一個(gè)用戶界面自定義功能,使用戶能夠自定義控件界面屬性,以增強(qiáng)軟件易用性。
1 WinForm界面統(tǒng)一管理
在軟件開發(fā)中,WinForm控件的統(tǒng)一優(yōu)化管理分為兩大類:①用戶按需求自定義修改;②程序員開發(fā)時(shí)通過自定義控件規(guī)范控件各種屬性。其中,用戶自定義修改可使用戶根據(jù)需求,給相應(yīng)控件添加備注來自定義程序的用戶界面。同時(shí),針對現(xiàn)有程序中同一類型控件名稱不統(tǒng)一的問題,用戶可以通過自定義控件屬性進(jìn)行手動修改,既滿足了用戶需求,又實(shí)現(xiàn)了控件屬性的統(tǒng)一化。通過自定義控件來規(guī)范控件名稱則是在系統(tǒng)初始階段就進(jìn)行統(tǒng)一化的管理。圖1為系統(tǒng)界面統(tǒng)一管理的兩個(gè)流程[4]。
1.1 軟件界面統(tǒng)一管理
在WinForm開發(fā)中,Visual Studio雖然自帶大量控件,這些控件使用靈活、簡單,但只依靠這些控件無法滿足用戶的各種界面需求,而自定義控件能夠使程序員在開發(fā)中定義一些滿足自己需要的特殊控件。這些控件可以在原控件基礎(chǔ)上重新定義一些屬性,以滿足特殊的功能需求。在WinForm界面的統(tǒng)一管理與優(yōu)化過程中,為了保持控件運(yùn)行時(shí)界面風(fēng)格的一致性,通過修改自定義控件中的AutoId值來自動查詢控件屬性數(shù)據(jù)庫,并獲得控件所有屬性。操作流程如圖2所示。
在數(shù)據(jù)庫中,不同的AutoId表示不同類型的自定義控件,通過AutoId與窗體上的自定義控件相關(guān)聯(lián),從而為這些控件提供統(tǒng)一的界面屬性標(biāo)準(zhǔn)。表1為控件屬性數(shù)據(jù)表結(jié)構(gòu)。endprint
1.1.1 自定義控件開發(fā)
以DataGridView為例來說明自定義控件開發(fā)過程。該控件需要修改每列的列名:HeaderText。自定義一個(gè)名為UDataGridView的控件,該控件在DataGridView的基礎(chǔ)上創(chuàng)建一個(gè)新的數(shù)組屬性,數(shù)組中的每個(gè)元素代表控件中對應(yīng)的列[5],通過查詢數(shù)據(jù)庫自動獲取每一列對應(yīng)的HeaderText屬性值。其基本過程如下:
(1)創(chuàng)建自定義控件,并將自定義控件命名為UDataGridView,該控件的創(chuàng)建是為了代替DataGridView。因此,該控件繼承了DataGridView類。
(2)定義一個(gè)新的屬性,命名為AutoId。
private string[] autoId=new string[10];
public string[] AutoId {
get
{
return autoId;
}
set
{
if (autoId != null)
{
autoId = value;
OnIdChanged(this, new EventArgs());
}
}
}
(3)定義一個(gè)事件,在事件中使控件HeaderText的值根據(jù)AutoId的變量進(jìn)行變更。
private void UDataGridView_OnIdChanged(object sender, EventArgs e)
{
try
{
for (inti = 0; i
{
DataGridViewTextBoxColumn c1 = new DataGridViewTextBoxColumn();
this.Columns.Insert(i,c1);
this.Columns[i].HeaderText =Name[i];
}
}catch (Exception ex)
{
throw new Exception("標(biāo)簽自動賦值失?。。埽躰" +
ex.Message);
}
}
(4)在控件初始化事件中綁定該事件。
(5)由于控件本身自帶某些事件,因此其它事件可以通過重寫的方法實(shí)現(xiàn),如:因text值更改而改變控件的寬度,可以重寫OnTextChanged(EventArgs e)方法。
1.1.2 自定義控件使用效果
在自定義控件代碼編寫完成后,進(jìn)行重新編譯,在工具箱中找到自定義控件,如圖3所示。點(diǎn)擊UDataGridView按鈕移動至Form界面,在UDataGridView屬性列中可以查看定義的屬性AutoId,如圖4所示。因?yàn)锳utoId是一個(gè)數(shù)組形式,在賦值時(shí),點(diǎn)擊AutoId賦值按鈕,彈出賦值界面,根據(jù)操作指南在賦值界面中輸入cid、age、name,控件會根據(jù)這3個(gè)字段依次查詢數(shù)據(jù)庫,獲取數(shù)據(jù)庫信息,創(chuàng)建UDataGridView控件的屬性列,并根據(jù)數(shù)據(jù)庫信息,給相應(yīng)的屬性列賦值。
1.2 用戶自定義界面
1.2.1 自定義界面設(shè)計(jì)與開發(fā)
通過自定義控件在軟件開發(fā)階段實(shí)現(xiàn)了命名方式和控件界面的一致性。但是,用戶對于數(shù)據(jù)庫中的控件規(guī)范化管理規(guī)則可能不太滿意,希望能夠自定義界面,以滿足自身需求。為此,本文開發(fā)了用戶自定義界面功能,其流程如下:①用戶右擊需要進(jìn)行界面自定義的控件;②點(diǎn)擊修改樣式,彈出修改樣式界面,用戶可在界面中修改控件顏色、內(nèi)容、字體等屬性;③在相應(yīng)的文本框中填寫需要修改的樣式,并將修改后的結(jié)果存入數(shù)據(jù)庫中;④自動修改相應(yīng)控件的各類屬性;⑤當(dāng)用戶對自身設(shè)計(jì)的控件屬性不滿意時(shí),在樣式修改界面中點(diǎn)擊還原按鈕,控件將還原成初始狀態(tài)。
在WinForm需要通過事件來觸發(fā)功能調(diào)用,若每修改一個(gè)控件屬性就要編寫一個(gè)點(diǎn)擊事件跳轉(zhuǎn)到用戶自定義界面,則會大大增加工作難度。因此,將跳轉(zhuǎn)界面寫到函數(shù)中,在Form加載時(shí)遍歷所有控件,自動為每個(gè)控件添加自定義界面事件,并通過參數(shù)調(diào)用函數(shù)。
1.2.2 數(shù)據(jù)庫設(shè)計(jì)
自定義界面數(shù)據(jù)庫如表2所示,由于不同用戶對同一界面有不同的自定義需求。因此,表2加入了用戶信息。
1.2.3 界面初始化
由上文可知,在用戶修改界面之后,會將修改控件的信息存入數(shù)據(jù)庫。因此,在每一個(gè)窗體界面啟動過程中,需要將已被用戶修改的控件重新賦值。這里使用遍歷控件的方法來修改控件屬性,但是對于一些特殊的組合控件,用戶修改的是組合控件內(nèi)部的控件,僅僅通過遍歷的方式無法獲得界面中的所有控件。因此,在系統(tǒng)遍歷之前需要將所有組合控件存入數(shù)據(jù)庫,具體操作流程如下:①遍歷空間中的所有組合控件,將組合控件存入數(shù)據(jù)庫中;②系統(tǒng)啟動時(shí),遍歷所有控件,并查詢數(shù)據(jù)庫,若為數(shù)據(jù)庫中的組合控件,遍歷組合控件中的所有控件。將所有控件存入D={D1,…Dn}中;③查詢數(shù)據(jù)庫,若Di在數(shù)據(jù)庫中,依照數(shù)據(jù)庫修改控件Di的所有屬性。
2 結(jié)語
在WinForm界面統(tǒng)一化管理方法中,采用用戶界面自定義和軟件界面統(tǒng)一管理兩種方法可以使軟件在開發(fā)和運(yùn)行過程中保持控件風(fēng)格統(tǒng)一、命名方式規(guī)范。但系統(tǒng)還存在一些問題,由于系統(tǒng)每次運(yùn)行時(shí),都需要遍歷系統(tǒng)中的所有控件,當(dāng)控件數(shù)量很多時(shí),系統(tǒng)將耗費(fèi)一部分額外時(shí)間去處理,導(dǎo)致系統(tǒng)運(yùn)行效率降低。為了改善這一問題,下一階段將重點(diǎn)研究如何在現(xiàn)有的管理方法中進(jìn)一步提高軟件運(yùn)行效率。同時(shí),自定義控件的開發(fā)規(guī)則依賴于數(shù)據(jù)庫中存放控件的開發(fā)規(guī)則,這些開發(fā)規(guī)則目前需要手動錄入,因此控件規(guī)則的維護(hù)和完善仍然需要花費(fèi)大量時(shí)間。
參考文獻(xiàn):
[1] JOHNSHARP,夏普,周靖.Visual C# 2005從入門到精通[M].北京:清華大學(xué)出版社,2006.
[2] 劉輝,常婉綸.基于C#的Winform程序參數(shù)傳遞和同步顯示的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(14):64-66.
[3] 白雪冰.分析C#程序設(shè)計(jì)語言中參數(shù)的傳遞[J].電腦知識與技術(shù):學(xué)術(shù)交流,2007,3(8):749-750.
[4] 王海群.大型超市商店形象對顧客滿意與忠誠的影響研究[D].杭州:浙江大學(xué),2006.
[5] 陳鋒文,周軍建.基于C#的學(xué)生成績管理系統(tǒng)的研究[J].軟件導(dǎo)刊,2012,11(1):33-34.
(責(zé)任編輯:黃 健)endprint