https://www.devexpress.com/Support/Center/Question/Details/Q411356
void ActivatForm(Type someType) { foreach (var item in tabbedView1.Documents) { if (item.Control.GetType() == someType) { tabbedView1.Controller.Activate(item); return; } } var instance = Activator.CreateInstance(someType); tabbedView1.AddDocument(instance as Control); } private void navBarItem1_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e) { ActivatForm(typeof(XtraForm1)); } private void navBarItem2_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e) { ActivatForm(typeof(XtraForm2)); } private void navBarItem3_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e) { ActivatForm(typeof(XtraForm3)); }
在主窗體Load的時候,獲取所有繼承自XtraForm的類型
private Dictionary<string, Type> GetAllXtraForm() { Assembly assembly = Assembly.GetExecutingAssembly(); var list = assembly.GetTypes().Where(typeof(XtraForm).IsAssignableFrom).ToList(); var dic = new Dictionary<string, Type>(); foreach (var item in list) { dic.Add(item.ToString(), item); } return dic; }
通說navBarControl上的單擊事件,打開窗體
private void ActivatForm(string name) { var className = name.Replace("navBarItem",string.Empty); Type someType = xtraForms.FirstOrDefault(x => x.Key.Contains(className)).Value; if (someType == null) { throw new Exception($@"無法識別的類型{className}"); } var baseDocument = tabbedView1.Documents.FirstOrDefault(x => x.Control.GetType() == someType); if (baseDocument == null) { var instance = Activator.CreateInstance(someType); var control = instance as Control; if (control == null) { throw new Exception($@"無法將{instance.GetType()}轉換為{typeof(Control)}"); } tabbedView1.AddDocument(control); tabbedView1.ActivateDocument(control); } else { tabbedView1.Controller.Activate(baseDocument); } }