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

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 1,45 MB

Nội dung

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

TỪ KHÓA LIÊN QUAN

w