1. Trang chủ
  2. » Công Nghệ Thông Tin

Tự học Microsoft C# và NET.Framework

24 215 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

T Hc C# và .NET Framework VI-893 28. Giao din ng th h tr đa ng Các bn đã đc hng dn đ thit lp lp đi tng BienDich  chng 16 đ h tr cho nhng phn mm đa ngôn ng. Trong chng này, các bn s đc hng dn đ thit k và phát trin k thut h tr đa ngôn ng có th áp dng cho nhng phn mm có giao din Windows, và nhng phn mm mng ASP.NET dùng web-forms. VS cng h tr đa ngôn ng cho các trình án vi phng pháp dùng nhng tp tin tài nguyên (resource file) có ni tip ng mc đnh là *.resx. Nhng tp tin này đc biên lp và đa vào linh kin, tr thành mt phn ca lý lch d liu (metadata). Ngoài ra, khi mun dùng nhng d liu đc lu gi trong tp tin tài nguyên, các bn phi quy chiu nhng không gian tên nh System.Globalization, System.Resource, System.Reflection, và dùng nhng lp đi tng thuc nhng không gian tên trên đ có th ly v nhng chui ký t có ngôn ng mun dùng. Tuy nhiên, chng sách này không hng dn các bn v phng thc h tr đa ngôn ng phc tp ca VS. Các bn s đc hng dn đ dùng mt tp tin XML duy nht đ h tr k thut đa ngôn ng. Li đim ca phng thc này, là tp tin XML có th đc thay đi sau khi phn mm đã đc phát hành. Do đó, nhng ngôn ng mi có th đc đa thêm vào tp tin XML bt c lúc nào. Thí d nh, các bn có mt phn mm ng dng đã đc phát trin đ h tr Anh ng và Vit ng. Sau khi phn mm đã đc phát hành, các bn có yêu cu h tr cho Pháp ng. Các bn ch cn gi gi mt tp tin XML có h tr Pháp ng ti khách hàng, thì lp tc, phn mm ca các bn s có th hin th Pháp ng trên nhng giao din ng th. Tìm hiu v lp đi tng Control Nh các bn đã đc hng dn, tt c nhng lp đi tng .NET Framework đu tha k trc tip hoc gián tip t lp đi tng nn System.Object. Lp đi tng Control, thuc không gian tên System.Windows.Forms, là mt lp đi tng trong .NET Framework. Do đó, lp Control cng đc tha k gián tip t lp đi tng System.Object nh bt c mt lp đi tng nào khác. Lp đi tng Control h tr 2 chc nng kéo và th. Do đó, tt c nhng lp đi tng có giao din ng th thuc không gian tên System.Windows.Forms có th kéo và th xung mt lp đi tng Form  khung thit kt đu đc thà k t lp Control. Ngc li, tt c nhng lp đi tng thuc không gian tên System.Windows.Form không th kéo và th xung khung thit k, là nhng lp đi tng không đc tha k t lp Control. Thí d nh lp đi tng System.Windows.Forms.ToolStripMenuItem, tuy có giao din ng th, nhng không thuc v lp đi tng Control. Do đó, các bn không th kéo và th mt đi tng ca lp System.Windows.Forms.ToolStripMenuItem xung khung thit k. Mc dù th, sau khi kéo và th mt đi tng MenuStrip xung khung thit k, các bn có th to nhng thuc đn, là nhng đi tng lp ToolStripMenuItem. Dng lp đi tng Control có trên 100 thành viên. Nhng trong phm vi h tr k thut đa ngôn ng, chúng ta ch lu ý ti 2 thành viên ca dng lp này: đó là thuc tính Controls, và thuc tính Text Thuc Bn tho, copyrights 2010, Quang t VI-894 Lp trình vi giao din Windows | Quang-t tính Text đc dùng đ lu gi mt chui ký t cho nhng đi tng lp Control thuc v mt khung trình (Form). Do đó, trng tâm ca k thut h tr đa ngôn ng, là làm sao có th phiên dch chui ký t đc lu gi trong thuc tính Text, và cp nht chui ký t này vi mt chui ký t đã đc phiên dch. Tìm hiu v thành viên Controls trong lp đi tng Form Lp đi tng Form đc thà k gián tip t lp đi tng Control (do đó, đc tha hng thành viên Controls và Text). Thành viên Controls thuc dng ControlCollection, đc dùng đ lu tr mt tp hp nhng đi tng lp Control. im quan trng nht, là tt c nhng đi tng lp Control đc lu gi trong thành viên Controls đu đc hin th trên khung trình, ngoi tr nhng đi tng đã đc du đi bng cách gi hàm Control.Hide()  tng đi tng lp. Do đó, trên phng din k thut ng th, mt khung trình thuc lp đi tng Form, là mt đi tng lp Control gm có nhng đi tng lp Control có nhng đi tng lp Control/Object , nh minh ha di đây: Minh-ha 28-1: Cu trúc cn bn ca mt khung trình (Form) Da theo cu trúc trên, các bn có th vit mã ngun đ duyt qua tt c nhng đi tng có giao din ng th trong mt khung trình rt d dàng, bt đu t thành viên ca Controls ca khung trình, nh sau: private static void DuyetForm() { frmQLDoanhNghiep frmDN = new frmQLDoanhNghiep(); DuyetControls((Control) frmDN); } private static void DuyetControls(Control ctrl) { if (null != ctrl.Controls && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { DuyetControls(childCtrl); } } } Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-895 2 hàm mu trên đc vit đ duyt qua tt c nhng đi tng lp Control. Hàm DuyetForm() khi to mt đi tng lp Form có dng frmQLDoanhNghiep. Sau đó gi hàm DuyetControls() vi tham s là đi tng lp Form đc ép dng qua dng lp Control. Hàm DuyetControls() là mt hàm lp (recursive method), đc dùng đ duyt qua tt c nhng đi tng thuc dng Control đc lu gi trong thành viên Controls. Mã ngun đã đc vit rt đn gin, nhng vô cùng hiu qu. Và, nu các bn có th duyt qua tt c các đi tng có giao din ng th thuc dng lp Control nh đã thc hin trong hàm mu DuyetControls() trên, d nhiên các bn có th gi hàm BienDich.Translate() đã đc phát trin trong linh kin UtilCommon.dll đ phiên dch nhng chui ký t lu tr trong thuc tính Text. Tuy nhiên, vn còn có nhng giao din ng th thuc nhng dng lp đi tng không đc tha k t dng lp Control cn phi đc x lý thích hp. Trong nhng phn k tip, các bn s đc hng dn đ áp dng k thut đa ngôn ng cho trình án QLDoanhNghiep. Ni rng lp đi tng Form Trong chng 13, các bn đã đc hng dn v phng pháp vit nhng hàm ni rng cho mt lp đi tng đã đc phát trin bi mt mt “thành phn th 3”, mà không cn phi có mã ngun ca lp đi tng đó (hàm ni rng đc h tr k t phiên bn .NET 3.5). Mc dù có ít nht là 3 phng án đ phát trin k thut đa ngôn ng, nhng phng án dùng hàm ni rng có th gi là mt phng án tuyt cú nht. Các bn hãy to mt lp đi tng mi có dng tnh, có tên là FormExt. Lp FormExt s có 3 hàm ni rng cho lp đi tng Form, đc vit nh sau: public static class FormExt { public static BienDich bienDich = new BienDich(); public static void LoadDictionary(this Form frm, string xmlDictionaryFile, string language) { bienDich.LoađDictionary(xmlDictionaryFile, language); } public static void SaveDictionary(this Form frm,string xmlDictionaryFile) { bienDich.SaveDictionary(xmlDictionaryFile); } public static void Translate(this Form frm) { string formName = frm.Name.Substring(1 + frm.Name.LastIndexOf('.', 0)); Translate(formName,(Control)frm); // Phi ép dng, nu không s lp ti hàm này. } } Dng lp FormExt đnh ngha thành viên bienDich, thuc dng lp BienDich. Thành viên này đc khi to khi mt đi tng lp Form đu tiên ca mt phn mm đc khi to. Thí d nh, nu các bn khi Bn tho, copyrights 2010, Quang t VI-896 Lp trình vi giao din Windows | Quang-t đng phn mm QLDoanhNghiep, khung trình đu tiên đc khi to thuc v dng lp frmQLDoanhNghiep. Khi đi tng lp frmQLDoanhNghiep đc khi to, thành viên bienDich cng s đc khi to. im quan trng cn lu ý là, cho dù phn mm QLDoanhNghiep có rt nhiu khung trình khác nhau, nhng ch có mt đi tng lp BienDich đc khi to, vì thành viên bienDich thuc v dng tnh. Hàm ni rng LoadDictionary() có 3 tham s. Vì là hàm ni rng cho dng lp Form, nên tham s đu tiên bt buc phi là mt tham s this thuc dng Form. Tham s th hai là tên ca tp tin XML vi khuôn mu đã đc n đnh (xin tham kho chng 16). Tham s cui cùng là ký s ca ngôn ng th hai, cng là ngôn ng s đc biên dch qua t ngôn ng chính, và đc hin th trong nhng giao din ng th. Phn mm h tr đa ngôn ng ch nên gi hàm LoadDictionary() mt ln duy nht khi khung trình đu tiên đc khi to. Tuy nhiên, nu hàm này đc gi ln th hai, không có chuyn gì s xy ra, và giòng vn hành s lp tc quay v hàm gi, vì hàm LoadDictionary() trong lp đi tng BienDich ch ti tp tin XML lên b nh mt ln duy nht nh sau: public void LoadDictionary(string xmlDictionaryFile, string Language) { try { if (xmlDic == null) { xmlDic = new XmlDocument(); xmlDic.Load(xmlDictionaryFile); CurrentLanguage = Language; isFileChanged = false; } } catch (System.Xml.XmlException xmlError) { string msg = String.Format("Could not load file {0}", xmlDictionaryFile); throw new Exception(msg, xmlError); } } Nh đã thy  trên, hàm LoadDictionary() thm tra trng xmlDic trc khi tip ni vi nhng cú pháp dùng đ ti tp tin XML lên b nh. Nu xmlDic không có giá tr = null, có ngha là tp tin XML đã đc ti lên b nh, giòng vn hành s lp tc quay tr v hàm gi. Hàm ni rng th 2 là hàm SaveDictionary(). Hàm này đc gi đ ni tip hóa ngun d liu XML t b nh xung tp tin đc ch đnh qua tham s. Các bn s đc hng dn tham kho v công dng và mc đích ca hàm này trong nhng phn k tip. Hàm ni rng th 3 là hàm Translate(). ây là hàm ch yu dùng cho vic phiên dch. Hàm này ch nên gi mt ln duy nht cho mt khung trình. a đim thích hp nht đ gi hàm này nm trong phm vi ca s tác Form.Load(). S tác Form.Load() đc kích hot 1 ln duy nht khi mt khung trình đc Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-897 hin th ln đu tiên. Khi s tác Form.Load() đc kích hot, đi tng dng lp Form đã qua giai đon khi to, tt c nhng đi tng dng Control thuc v khung trình đu đã đc thit lp. Hàm ni rng Form.Translate() duyt qua tt c nhng đi tng lp Control thuc v khung trình, và gi hàm BienDich.Translate() đ phiên dch tt c nhng chui ký t đc hin th trên khung trình. D nhiên, hàm này tuyt đi không phiên dch nhng chui ký t thuc quyn s hu ca ngi x dng (chng hn nh nhng chui ký t trong thuc tính Text ca đi tng lp TextBox), vì đó là nhng chui ký t thuc v d liu. FormExt.Translate() cng là mt chng hàm gm có 4 hàm, vi mt hàm ni rng duy nht có dng chung. 3 hàm còn li đc phong kín vi dng t. Nh các bn đã thy  phn trên, hàm ni rng FormExt.Translate() ch đn gin có 2 giòng mã ngun nh sau: string formName = frm.Name.Substring(1 + frm.Name.LastIndexOf('.', 0)); Translate(formName,(Control)frm); // Phi ép dng, nu không s lp ti hàm này. Giòng mã ngun th nht to mt chui ký t đ lu gi tên ca dng lp thuc v khung trình. Thí d nh, nu hàm Translate() đc gi t đi tng lp frmQLDoanhNghiep, chui ký t s có giá tr = ”frmQLDoanhNghiep”. Nu các bn còn nh nhng gì đã đc trong chng 16, thì tên dng lp ca mt khung trình s đc dùng làm th XML đ có th giúp cho vic tìm kim d liu trong ngun d liu XML đc mau chóng hn. Giòng mã ngun th hai gi hàm Translate() có tham s thuc dng lp Control. Do đó, khi đa đi tng lp Form vào tham s, đi tng này đc ép qua dng Control. Chng hàm Translate() Nh đã đ cp đn  phn trên, chng hàm Translate() gm có 4 hàm, gm có 1 hàm ni rng và 3 hàm đc phong kín di dng t. Hàm Translate() ni rng đã đc tham kho  phn trên. 3 hàm còn li đc vit nh sau: Hàm Translate(string,Control) /// <summary> /// Hàm lp x lý biên dch cho dng Control /// </summary> /// <param name="ctrl"></param> private static void Translate(string formName,Control ctrl) { if (null != ctrl.Controls && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { Translate(formName, childCtrl); } } if (ctrl is MenuStrip) { Bn tho, copyrights 2010, Quang t VI-898 Lp trình vi giao din Windows | Quang-t foreach (ToolStripItem mnuItem in ((MenuStrip)ctrl).Items) { Translate(mnuItem); } } else if (ctrl is DataGridView) { foreach (DataGridViewColumn dtaColumn in ((DataGridView)ctrl).Columns) { Translate(formName, (Object)dtaColumn); } } Translate(formName, (Object)ctrl); } Hàm Translate() có tham s thuc dng Control trên, là khi đim ca nhng thao tác x lý cho chc nng phiên dch ca mt khung trình. ây là mt hàm lp đc dùng đ duyt qua tt c nhng đi tng thuc dng Control trong mt khung trình. Lu ý là khi mt đi tng Control thuc dng MenuStrip hoc DataGridView, là nhng dng có lu gi nhng giao din ng th không thuc dng lp Control, nên phi có nhng x lý khác bit. Khi mã ngun trong phm vi x lý cho DataGridView ch yu dành cho vic biên dch nhng chui ký t lu tr trong thuc tính ColumnHeader ca nhng đi tng dng DataGridViewColumn. Nhng chui ký t này cng có th đc phiên dch trc tip khi nhng đi tng DataGridViewColumn đc khi to. Do đó, khi mã ngun này đc vit  đây nhm mc đích hng dn các bn tham kho v nhng phng cách duyt xung nhng đi tng dng Object đc lu gi trong mt đi tng dng Control, thay vì có mc đích thc dng. Riêng khi mã ngun trong phm vi x lý cho MenuStrip là mt trng hp x lý đc bit. MenuStrip là mt trình đn thuc dng Control có th kéo và th xung mt khung trình. i tng MenuStrip lu gi mt tp hp nhng đi tng có dng lp ToolStripItem trong thuc tính Items. Và nhng đi tng thuc dng ToolStripItem này có thuc tính DropDownItems, đc dùng đ lu gi mt tp hp nhng đi tng cng thuc dng lp ToolStripItem. Do đó, khi duyt qua nhng đi tng lp ToolStripItem trong đi tng lp MenuStrip, thao tác x lý gi hàm Translate(ToolStripItem), là mt hàm lp, đc dùng đ duyt xung tt c nhng thuc đn thuc v mt trình đn. Hàm Translate(ToolStripItem) /// <summary> /// Hàm lp x lý biên dch cho ToolStripItem /// </summary> /// <param name="mnu"></param> private static void Translate(ToolStripItem mnu) { if (mnu is ToolStripMenuItem) { foreach (ToolStripItem mnuChild in ((ToolStripMenuItem)mnu).DropDownItems) { Translate(mnuChild); } } Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-899 mnu.Text = BienDich.Translate("Menu",mnu.Text); } Hàm Translate(ToolStripItem), nh đã đ cp đn  phn trên, đc dùng đ x lý phiên dch cho nhng thuc đn thuc v mt trình đn. ây là mt hàm lp có mã ngun rt đn gin vi vòng lp foreach() đc dùng đ duyt qua nhng thuc đn trong DropDownItems. im đc bit là  giòng mã ngun cui cùng, thay vì gi hàm Translate(Object) đ phiên dch chui ký t cho thuc đn, hàm này trc tip gi hàm BiênDich.Translate() đ tc đ có th đc mau chóng hn. Hàm Translate(string, Object) private static void Translate(string formName,Object doiTuong) { switch (DangDuLieu(doiTuong)) { //Nhng dng lp tha k t Control case ClassType.System_Windows_Forms_Button: case ClassType.System_Windows_Forms_CheckBox: case ClassType.System_Windows_Forms_Form: case ClassType.System_Windows_Forms_Label: case ClassType.System_Windows_Forms_RadioButton: case ClassType.System_Windows_Forms_TabPage: ((Control)doiTuong).Text = BienDich.Translate(formName, ((Control)doiTuong).Text); break; //Nhng dng lp tha k t ToolStripItem case ClassType.System_Windows_Forms_ToolStripItem: case ClassType.System_Windows_Forms_ToolStripMenuItem: ((ToolStripItem)doiTuong).Text = BienDich.Translate("Menu", ((ToolStripItem)doiTuong).Text); break; //Nhng dng lp tha k t ColumnHeader case ClassType.System_Windows_Forms_ColumnHeader: ((ColumnHeader)doiTuong).Text = BienDich.Translate("CSDL", ((ColumnHeader)doiTuong).Text); break; case ClassType.System_Windows_Forms_DataGridViewColumn: ((DataGridViewColumn)doiTuong).HeaderText = BienDich.Translate(formName, ((DataGridViewColumn)doiTuong).HeaderText); break; } } Hàm Translate( string,Object) là hàm cui cùng trong chng hàm Translate(). Hàm này nhn tham s có dng Object, và gi hàm DangDuLieu() đ xác đnh dng lp đi tng ca tham s đoiTuong. Sau khi đã xác đnh đc dng lp ca tham s, t khóa switch{}đc dùng đ x lý vic phiên dch da theo nhng dng lp khác nhau. Chú thích và cú pháp vit trong hàm tha đ đ chú gii rt rõ ràng nhng thao tác x lý cho vic phiên dch cho đi tng nhn đc qua tham s. Toàn b lp đi tng FormExt, vi nhng hàm ni rng cho dng lp System.Windows.Forms.Form, đc vit nh sau: using System; using System.Collections.Generic; Bn tho, copyrights 2010, Quang t VI-900 Lp trình vi giao din Windows | Quang-t using System.Windows.Forms; namespace PhuongDong.UtilCommon { public enum ClassType { NotHandle, System_Windows_Forms_Button, System_Windows_Forms_CheckBox, System_Windows_Forms_ColumnHeader, System_Windows_Forms_DataGridViewColumn, System_Windows_Forms_Form, System_Windows_Forms_Label, System_Windows_Forms_RadioButton, System_Windows_Forms_TabPage, System_Windows_Forms_ToolStripMenuItem, System_Windows_Forms_ToolStripItem } public static class FormExt { public static BienDich bienDich = new BienDich(); public static void LoadDictionary(this Form frm, string xmlDictionaryFile, string language) { bienDich.LoadDictionary(xmlDictionaryFile, language); } public static void SaveDictionary(this Form frm, string xmlDictionaryFile) { bienDich.SaveDictionary(xmlDictionaryFile); } public static void Translate(this Form frm) { string formName = frm.Name.Substring(1 + frm.Name.LastIndexOf('.', 0)); Translate(formName, (Control)frm); // Phi ép dng, nu không s lp ti hàm này. } /// <summary> /// Hàm lp x lý biên dch cho dng Control /// </summary> /// <param name="ctrl"></param> private static void Translate(string formName, Control ctrl) { if (null != ctrl.Controls && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { Translate(formName, childCtrl); } } if (ctrl is MenuStrip) { foreach (ToolStripItem mnuItem in ((MenuStrip)ctrl).Items) { Translate(mnuItem); } } Bn tho, copyrights 2010, Quang t T Hc C# và .NET Framework VI-901 else if (ctrl is DataGridView) { foreach (DataGridViewColumn dtaColumn in ((DataGridView)ctrl).Columns) { Translate(formName, (Object)dtaColumn); } } Translate(formName, (Object)ctrl); } /// <summary> /// Hàm lp x lý biên dch cho ToolStripItem /// </summary> /// <param name="mnu"></param> private static void Translate(ToolStripItem mnu) { if (mnu is ToolStripMenuItem) { foreach (ToolStripItem mnuChild in ((ToolStripMenuItem)mnu).DropDownItems) { Translate(mnuChild); } } mnu.Text = BienDich.Translate("Menu", mnu.Text); } private static void Translate(string formName, Object doiTuong) { switch (DangDuLieu(doiTuong)) { //Nhng dng lp tha k t Control case ClassType.System_Windows_Forms_Button: case ClassType.System_Windows_Forms_CheckBox: case ClassType.System_Windows_Forms_Form: case ClassType.System_Windows_Forms_Label: case ClassType.System_Windows_Forms_RadioButton: case ClassType.System_Windows_Forms_TabPage: ((Control)doiTuong).Text = BienDich.Translate(formName, ((Control)doiTuong).Text); break; //Nhng dng lp tha k t ToolStripItem case ClassType.System_Windows_Forms_ToolStripItem: case ClassType.System_Windows_Forms_ToolStripMenuItem: ((ToolStripItem)doiTuong).Text = BienDich.Translate("Menu", ((ToolStripItem)doiTuong).Text); break; //Nhng dng lp tha k t ColumnHeader case ClassType.System_Windows_Forms_ColumnHeader: ((ColumnHeader)doiTuong).Text = BienDich.Translate("CSDL", ((ColumnHeader)doiTuong).Text); break; case ClassType.System_Windows_Forms_DataGridViewColumn: ((DataGridViewColumn)doiTuong).HeaderText = BienDich.Translate(formName, ((DataGridViewColumn)doiTuong).HeaderText); break; Bn tho, copyrights 2010, Quang t VI-902 Lp trình vi giao din Windows | Quang-t } } private static ClassType DangDuLieu(Object ctrl) { ClassType dangDuLieu; if (ctrl is Button) dangDuLieu = ClassType.System_Windows_Forms_Button; else if (ctrl is System.Windows.Forms.CheckBox) dangDuLieu = ClassType.System_Windows_Forms_CheckBox; else if (ctrl is System.Windows.Forms.ColumnHeader) dangDuLieu = ClassType.System_Windows_Forms_ColumnHeader; else if (ctrl is System.Windows.Forms.DataGridViewColumn) dangDuLieu = ClassType.System_Windows_Forms_DataGridViewColumn; else if (ctrl is System.Windows.Forms.Form) dangDuLieu = ClassType.System_Windows_Forms_Form; else if (ctrl is System.Windows.Forms.Label) dangDuLieu = ClassType.System_Windows_Forms_Label; else if (ctrl is System.Windows.Forms.RadioButton) dangDuLieu = ClassType.System_Windows_Forms_RadioButton; else if (ctrl is System.Windows.Forms.TabPage) dangDuLieu = ClassType.System_Windows_Forms_TabPage; else if (ctrl is System.Windows.Forms.ToolStripItem) dangDuLieu = ClassType.System_Windows_Forms_ToolStripItem; else if (ctrl is System.Windows.Forms.ToolStripMenuItem) dangDuLieu = ClassType.System_Windows_Forms_ToolStripMenuItem; else dangDuLieu = ClassType.NotHandle; return dangDuLieu; } } } Toàn b lp FormExt đc phát trin cha đy 3 trang giy, cho 3 hàm ni rng rt có nng lc trong chc nng phiên dch. Phát trin lp đi tng BienDich Lp đi tng BienDich là thành phn ch yu h tr chc nng đa ngôn ng cho mt phn mm. Nhng hàm ni rng cho dng lp Form, khi tìm thy mt giao din ng th, đu gi hàm BienDich.Translate() đ phiên dch mt chui ký t t Anh ng qua mt ngôn ng ch đnh. Mi khi cn phi hin th mt thông tin qua hàm MessageBox.Show(), hoc khi cn phi phiên dch bt c mt chui ký t nào, hàm BienDich.Translate() cng có th đc gi trc tip t bt c mt đa đim nào trong mã ngun. Dng lp BienDich đnh ngha 3 thuc tính sau đây: static XmlDocument xmlDic = null; static bool isFileChanged = false; static string CurrentLanguage = string.Empty; Thuc tính xmlDic thuc dng XmlDocument, đc dùng đ lu gi ngun d liu XML đc ti lên t mt tp tin XML có khuôn mu n đnh, và có nhng th <English> đc lng trong nhng th Cha. Mi th <English> có thuc tính Text đc dùng đ lu gi mt chui ký t Anh ng. Lng trong th <English> là mt hay nhiu th con. Mi th con lu gi mt chui ký t đã đc phiên dch cho mt ngôn ng khác, và tên ca nhng th con này ch đnh ngôn ng đã đc phiên dch. Thuc tính xmlDic Bn tho, copyrights 2010, Quang t [...]... VI-915 t T H c C# và NET Framework L p trình v i giao di n Windows | Quang- B VI-916 nt h o, c op yri gh ts 20 10 ,Q ua ng t t Tái x d ng T p tin XML, và linh ki n utilcommon.dll có th tái x d ng cho b t c m t ph n m m nào, k c nh ng ph n m m WPF, và nh ng web-forms ASP.NET n gi n và d áp d ng V i v n v n 3 hàm n i r ng, vi c áp d ng k thu t h tr a ngôn ng cho m t ph n m m th t n gi n và d dàng Ch dùng... Anh ng c n c d ch thu t vào m t th < English> Hàm này h i ph c t p (và thông minh) vì ph i cho thêm c th Cha c a th < English> vào ngu n d li u XML, n u th Cha không t n t i trong ngu n d li u Sau khi th < English> cho câu v n c n c d ch thu t c a vào ngu n d li u, thu c tính isFileChanged c gán cho giá tr = true, khi hàm SaveDictionary() c g i, ngu n d li u XML s c l u nh p vào t p tin XML namespace... n ch c n ánh x s tác Load n m t hàm u nhi m, và g i hàm n i r ng Translate(), thí d nh v i l p i t ng frmCaNhan, nh sau: op yri gh ts n ây các b n có th biên l p và ch y th ph n m m QLDoanhNghiep.exe Khung trình chính c a ph n m m này có hi n th (thu nh ) nh sau: Minh-h a 28-3: Ph n m m qldoanhnghiep.exe hi n th v Si m t vài thu c n Vi t ng L u ý là ch có vài thu c c phiên d ch sang ti ng Vi t trong... ti ng Anh c biên d ch, và t t c nh ng câu v n ch a c biên d ch Ph i nói là tuy t cú mèo! Tuy t i không phí công s c c a th i gian b ra vi t hàm ThemCauDichThuat() T p tin XML trên có th c dùng nh kèm vào m t i n th g i qua cho m t nhân viên chuyên v ngo i ng và d ch thu t Các b n ch c n b ra 30 giây gi i thích v khuôn m u c a th < English> cho nhân viên chuyên v d ch thu t, và trong m t th i gian ng... Software"> An Bình K Toán Thoát khung trình và b t t c nh ng gì thay i? Thoát b và ng ch ng trình? t T H c C# và NET Framework Tu b cho nh ng khung trình d ng l p Form khác B nt h Cho nh ng khung trình thu c d ng l p form... n Hàm này cg n i ti p hóa ngu n d li u l u gi trong thu c tính xmlDic vào m t t p tin XML ch nh Hàm này h tr cho vi c ng b hoá m ch trình (v i lock()) Cho nên, m t ph n m m a m ch can có th g i hàm này an toàn mà không s nh ng m ch trình có th xung t v i nhau t o lên nh ng l i ngo i l Hàm SaveDictionary() c vi t nh sau: T H c C# và NET Framework t XmlNode childNode = xmlDic.SelectSingleNode(xPath);... tay ph i, và n m ch ng nên m t i t ng giao di n khác (nh TextBox ch ng h n) i u th hai, là khi thi t k nh ng giao di n ng th nh Label, CheckBox, RadioButton, Button, v.v , các b n nên luôn luôn chu n b và phòng ng a cho tr ng h p kích th c c a nh ng i t ng giao di n này có th b dãn ra vì chu i ký t phiên d ch quá dài Tóm l c K thu t h tr o, c Trong các b n, b n nào t ng dùng t p tin *.resx và theo nh... text="&About " /> t T H c C# và NET Framework VI-913 t ua ng 20 10 ,Q op yri gh ts y là m t ph n m m h tr a ngôn ng An Bình K Toán Thoát khung trình và b t t c nh ng gì thay i? . && ctrl.Controls.Count > 0) { foreach (Control childCtrl in ctrl.Controls) { DuyetControls(childCtrl); } } } Bn tho, copyrights 2010, Quang t T H c C# và .NET Framework. nhiu th con. Mi th con lu gi mt chui ký t đã đ c phiên dch cho mt ngôn ng kh c, và tên c a nhng th con này ch đnh ngôn ng đã đ c phiên dch. Thu c tính xmlDic Bn tho, copyrights. ng và Vit ng. Sau khi phn mm đã đ c phát hành, c c bn c yêu c u h tr cho Pháp ng. C c bn ch c n gi gi mt tp tin XML c h tr Pháp ng ti khách hàng, thì lp t c, phn mm c a

Ngày đăng: 10/09/2014, 01:19

Xem thêm: Tự học Microsoft C# và NET.Framework

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN