实例介绍
【实例截图】
【核心代码】
using System; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; namespace DockSample { public partial class MainForm : Form { private bool m_bSaveLayout = true; private DeserializeDockContent m_deserializeDockContent; private DummySolutionExplorer m_solutionExplorer; private DummyPropertyWindow m_propertyWindow; private DummyToolbox m_toolbox; private DummyOutputWindow m_outputWindow; private DummyTaskList m_taskList; private bool _showSplash; private SplashScreen _splashScreen; public MainForm() { InitializeComponent(); AutoScaleMode = AutoScaleMode.Dpi; SetSplashScreen(); CreateStandardControls(); showRightToLeft.Checked = (RightToLeft == RightToLeft.Yes); RightToLeftLayout = showRightToLeft.Checked; m_solutionExplorer.RightToLeftLayout = RightToLeftLayout; m_deserializeDockContent = new DeserializeDockContent(GetContentFromPersistString); vsToolStripExtender1.DefaultRenderer = _toolStripProfessionalRenderer; SetSchema(this.menuItemSchemaVS2013Blue, null); } #region Methods private IDockContent FindDocument(string text) { if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) { foreach (Form form in MdiChildren) if (form.Text == text) return form as IDockContent; return null; } else { foreach (IDockContent content in dockPanel.Documents) if (content.DockHandler.TabText == text) return content; return null; } } private DummyDoc CreateNewDocument() { DummyDoc dummyDoc = new DummyDoc(); int count = 1; string text = $"Document{count}"; while (FindDocument(text) != null) { count ; text = $"Document{count}"; } dummyDoc.Text = text; return dummyDoc; } private DummyDoc CreateNewDocument(string text) { DummyDoc dummyDoc = new DummyDoc(); dummyDoc.Text = text; return dummyDoc; } private void CloseAllDocuments() { if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) { foreach (Form form in MdiChildren) form.Close(); } else { foreach (IDockContent document in dockPanel.DocumentsToArray()) { // IMPORANT: dispose all panes. document.DockHandler.DockPanel = null; document.DockHandler.Close(); } } } private IDockContent GetContentFromPersistString(string persistString) { if (persistString == typeof(DummySolutionExplorer).ToString()) return m_solutionExplorer; else if (persistString == typeof(DummyPropertyWindow).ToString()) return m_propertyWindow; else if (persistString == typeof(DummyToolbox).ToString()) return m_toolbox; else if (persistString == typeof(DummyOutputWindow).ToString()) return m_outputWindow; else if (persistString == typeof(DummyTaskList).ToString()) return m_taskList; else { // DummyDoc overrides GetPersistString to add extra information into persistString. // Any DockContent may override this value to add any needed information for deserialization. string[] parsedStrings = persistString.Split(new char[] { ',' }); if (parsedStrings.Length != 3) return null; if (parsedStrings[0] != typeof(DummyDoc).ToString()) return null; DummyDoc dummyDoc = new DummyDoc(); if (parsedStrings[1] != string.Empty) dummyDoc.FileName = parsedStrings[1]; if (parsedStrings[2] != string.Empty) dummyDoc.Text = parsedStrings[2]; return dummyDoc; } } private void CloseAllContents() { // we don't want to create another instance of tool window, set DockPanel to null m_solutionExplorer.DockPanel = null; m_propertyWindow.DockPanel = null; m_toolbox.DockPanel = null; m_outputWindow.DockPanel = null; m_taskList.DockPanel = null; // Close all other document windows CloseAllDocuments(); // IMPORTANT: dispose all float windows. foreach (var window in dockPanel.FloatWindows.ToList()) window.Dispose(); System.Diagnostics.Debug.Assert(dockPanel.Panes.Count == 0); System.Diagnostics.Debug.Assert(dockPanel.Contents.Count == 0); System.Diagnostics.Debug.Assert(dockPanel.FloatWindows.Count == 0); } private readonly ToolStripRenderer _toolStripProfessionalRenderer = new ToolStripProfessionalRenderer(); private void SetSchema(object sender, System.EventArgs e) { // Persist settings when rebuilding UI string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.temp.config"); dockPanel.SaveAsXml(configFile); CloseAllContents(); if (sender == this.menuItemSchemaVS2005) { this.dockPanel.Theme = this.vS2005Theme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2005, vS2005Theme1); } else if (sender == this.menuItemSchemaVS2003) { this.dockPanel.Theme = this.vS2003Theme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2003, vS2003Theme1); } else if (sender == this.menuItemSchemaVS2012Light) { this.dockPanel.Theme = this.vS2012LightTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2012, vS2012LightTheme1); } else if (sender == this.menuItemSchemaVS2012Blue) { this.dockPanel.Theme = this.vS2012BlueTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2012, vS2012BlueTheme1); } else if (sender == this.menuItemSchemaVS2012Dark) { this.dockPanel.Theme = this.vS2012DarkTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2012, vS2012DarkTheme1); } else if (sender == this.menuItemSchemaVS2013Blue) { this.dockPanel.Theme = this.vS2013BlueTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2013, vS2013BlueTheme1); } else if (sender == this.menuItemSchemaVS2013Light) { this.dockPanel.Theme = this.vS2013LightTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2013, vS2013LightTheme1); } else if (sender == this.menuItemSchemaVS2013Dark) { this.dockPanel.Theme = this.vS2013DarkTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2013, vS2013DarkTheme1); } else if (sender == this.menuItemSchemaVS2015Blue) { this.dockPanel.Theme = this.vS2015BlueTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2015, vS2015BlueTheme1); } else if (sender == this.menuItemSchemaVS2015Light) { this.dockPanel.Theme = this.vS2015LightTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2015, vS2015LightTheme1); } else if (sender == this.menuItemSchemaVS2015Dark) { this.dockPanel.Theme = this.vS2015DarkTheme1; this.EnableVSRenderer(VisualStudioToolStripExtender.VsVersion.Vs2015, vS2015DarkTheme1); } menuItemSchemaVS2005.Checked = (sender == menuItemSchemaVS2005); menuItemSchemaVS2003.Checked = (sender == menuItemSchemaVS2003); menuItemSchemaVS2012Light.Checked = (sender == menuItemSchemaVS2012Light); menuItemSchemaVS2012Blue.Checked = (sender == menuItemSchemaVS2012Blue); menuItemSchemaVS2012Dark.Checked = (sender == menuItemSchemaVS2012Dark); menuItemSchemaVS2013Light.Checked = (sender == menuItemSchemaVS2013Light); menuItemSchemaVS2013Blue.Checked = (sender == menuItemSchemaVS2013Blue); menuItemSchemaVS2013Dark.Checked = (sender == menuItemSchemaVS2013Dark); menuItemSchemaVS2015Light.Checked = (sender == menuItemSchemaVS2015Light); menuItemSchemaVS2015Blue.Checked = (sender == menuItemSchemaVS2015Blue); menuItemSchemaVS2015Dark.Checked = (sender == menuItemSchemaVS2015Dark); if (dockPanel.Theme.ColorPalette != null) { statusBar.BackColor = dockPanel.Theme.ColorPalette.MainWindowStatusBarDefault.Background; } if (File.Exists(configFile)) dockPanel.LoadFromXml(configFile, m_deserializeDockContent); } private void EnableVSRenderer(VisualStudioToolStripExtender.VsVersion version, ThemeBase theme) { vsToolStripExtender1.SetStyle(mainMenu, version, theme); vsToolStripExtender1.SetStyle(toolBar, version, theme); vsToolStripExtender1.SetStyle(statusBar, version, theme); } private void SetDocumentStyle(object sender, System.EventArgs e) { DocumentStyle oldStyle = dockPanel.DocumentStyle; DocumentStyle newStyle; if (sender == menuItemDockingMdi) newStyle = DocumentStyle.DockingMdi; else if (sender == menuItemDockingWindow) newStyle = DocumentStyle.DockingWindow; else if (sender == menuItemDockingSdi) newStyle = DocumentStyle.DockingSdi; else newStyle = DocumentStyle.SystemMdi; if (oldStyle == newStyle) return; if (oldStyle == DocumentStyle.SystemMdi || newStyle == DocumentStyle.SystemMdi) CloseAllDocuments(); dockPanel.DocumentStyle = newStyle; menuItemDockingMdi.Checked = (newStyle == DocumentStyle.DockingMdi); menuItemDockingWindow.Checked = (newStyle == DocumentStyle.DockingWindow); menuItemDockingSdi.Checked = (newStyle == DocumentStyle.DockingSdi); menuItemSystemMdi.Checked = (newStyle == DocumentStyle.SystemMdi); menuItemLayoutByCode.Enabled = (newStyle != DocumentStyle.SystemMdi); menuItemLayoutByXml.Enabled = (newStyle != DocumentStyle.SystemMdi); toolBarButtonLayoutByCode.Enabled = (newStyle != DocumentStyle.SystemMdi); toolBarButtonLayoutByXml.Enabled = (newStyle != DocumentStyle.SystemMdi); } #endregion #region Event Handlers private void menuItemExit_Click(object sender, System.EventArgs e) { Close(); } private void menuItemSolutionExplorer_Click(object sender, System.EventArgs e) { m_solutionExplorer.Show(dockPanel); } private void menuItemPropertyWindow_Click(object sender, System.EventArgs e) { m_propertyWindow.Show(dockPanel); } private void menuItemToolbox_Click(object sender, System.EventArgs e) { m_toolbox.Show(dockPanel); } private void menuItemOutputWindow_Click(object sender, System.EventArgs e) { m_outputWindow.Show(dockPanel); } private void menuItemTaskList_Click(object sender, System.EventArgs e) { m_taskList.Show(dockPanel); } private void menuItemAbout_Click(object sender, System.EventArgs e) { AboutDialog aboutDialog = new AboutDialog(); aboutDialog.ShowDialog(this); } private void menuItemNew_Click(object sender, System.EventArgs e) { DummyDoc dummyDoc = CreateNewDocument(); if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) { dummyDoc.MdiParent = this; dummyDoc.Show(); } else dummyDoc.Show(dockPanel); } private void menuItemOpen_Click(object sender, System.EventArgs e) { OpenFileDialog openFile = new OpenFileDialog(); openFile.InitialDirectory = Application.ExecutablePath; openFile.Filter = "rtf files (*.rtf)|*.rtf|txt files (*.txt)|*.txt|All files (*.*)|*.*"; openFile.FilterIndex = 1; openFile.RestoreDirectory = true; if (openFile.ShowDialog() == DialogResult.OK) { string fullName = openFile.FileName; string fileName = Path.GetFileName(fullName); if (FindDocument(fileName) != null) { MessageBox.Show("The document: " fileName " has already opened!"); return; } DummyDoc dummyDoc = new DummyDoc(); dummyDoc.Text = fileName; if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) { dummyDoc.MdiParent = this; dummyDoc.Show(); } else dummyDoc.Show(dockPanel); try { dummyDoc.FileName = fullName; } catch (Exception exception) { dummyDoc.Close(); MessageBox.Show(exception.Message); } } } private void menuItemFile_Popup(object sender, System.EventArgs e) { if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) { menuItemClose.Enabled = menuItemCloseAll.Enabled = menuItemCloseAllButThisOne.Enabled = (ActiveMdiChild != null); } else { menuItemClose.Enabled = (dockPanel.ActiveDocument != null); menuItemCloseAll.Enabled = menuItemCloseAllButThisOne.Enabled = (dockPanel.DocumentsCount > 0); } } private void menuItemClose_Click(object sender, System.EventArgs e) { if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) ActiveMdiChild.Close(); else if (dockPanel.ActiveDocument != null) dockPanel.ActiveDocument.DockHandler.Close(); } private void menuItemCloseAll_Click(object sender, System.EventArgs e) { CloseAllDocuments(); } private void MainForm_Load(object sender, System.EventArgs e) { string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.config"); if (File.Exists(configFile)) dockPanel.LoadFromXml(configFile, m_deserializeDockContent); } private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e) { string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockPanel.config"); if (m_bSaveLayout) dockPanel.SaveAsXml(configFile); else if (File.Exists(configFile)) File.Delete(configFile); } private void menuItemToolBar_Click(object sender, System.EventArgs e) { toolBar.Visible = menuItemToolBar.Checked = !menuItemToolBar.Checked; } private void menuItemStatusBar_Click(object sender, System.EventArgs e) { statusBar.Visible = menuItemStatusBar.Checked = !menuItemStatusBar.Checked; } private void toolBar_ButtonClick(object sender, System.Windows.Forms.ToolStripItemClickedEventArgs e) { if (e.ClickedItem == toolBarButtonNew) menuItemNew_Click(null, null); else if (e.ClickedItem == toolBarButtonOpen) menuItemOpen_Click(null, null); else if (e.ClickedItem == toolBarButtonSolutionExplorer) menuItemSolutionExplorer_Click(null, null); else if (e.ClickedItem == toolBarButtonPropertyWindow) menuItemPropertyWindow_Click(null, null); else if (e.ClickedItem == toolBarButtonToolbox) menuItemToolbox_Click(null, null); else if (e.ClickedItem == toolBarButtonOutputWindow) menuItemOutputWindow_Click(null, null); else if (e.ClickedItem == toolBarButtonTaskList) menuItemTaskList_Click(null, null); else if (e.ClickedItem == toolBarButtonLayoutByCode) menuItemLayoutByCode_Click(null, null); else if (e.ClickedItem == toolBarButtonLayoutByXml) menuItemLayoutByXml_Click(null, null); } private void menuItemNewWindow_Click(object sender, System.EventArgs e) { MainForm newWindow = new MainForm(); newWindow.Text = newWindow.Text " - New"; newWindow.Show(); } private void menuItemTools_Popup(object sender, System.EventArgs e) { menuItemLockLayout.Checked = !this.dockPanel.AllowEndUserDocking; } private void menuItemLockLayout_Click(object sender, System.EventArgs e) { dockPanel.AllowEndUserDocking = !dockPanel.AllowEndUserDocking; } private void menuItemLayoutByCode_Click(object sender, System.EventArgs e) { dockPanel.SuspendLayout(true); CloseAllContents(); CreateStandardControls(); m_solutionExplorer.Show(dockPanel, DockState.DockRight); m_propertyWindow.Show(m_solutionExplorer.Pane, m_solutionExplorer); m_toolbox.Show(dockPanel, new Rectangle(98, 133, 200, 383)); m_outputWindow.Show(m_solutionExplorer.Pane, DockAlignment.Bottom, 0.35); m_taskList.Show(m_toolbox.Pane, DockAlignment.Left, 0.4); DummyDoc doc1 = CreateNewDocument("Document1"); DummyDoc doc2 = CreateNewDocument("Document2"); DummyDoc doc3 = CreateNewDocument("Document3"); DummyDoc doc4 = CreateNewDocument("Document4"); doc1.Show(dockPanel, DockState.Document); doc2.Show(doc1.Pane, null); doc3.Show(doc1.Pane, DockAlignment.Bottom, 0.5); doc4.Show(doc3.Pane, DockAlignment.Right, 0.5); dockPanel.ResumeLayout(true, true); } private void SetSplashScreen() { _showSplash = true; _splashScreen = new SplashScreen(); ResizeSplash(); _splashScreen.Visible = true; _splashScreen.TopMost = true; Timer _timer = new Timer(); _timer.Tick = (sender, e) => { _splashScreen.Visible = false; _timer.Enabled = false; _showSplash = false; }; _timer.Interval = 4000; _timer.Enabled = true; } private void ResizeSplash() { if (_showSplash) { var centerXMain = (this.Location.X this.Width) / 2.0; var LocationXSplash = Math.Max(0, centerXMain - (_splashScreen.Width / 2.0)); var centerYMain = (this.Location.Y this.Height) / 2.0; var LocationYSplash = Math.Max(0, centerYMain - (_splashScreen.Height / 2.0)); _splashScreen.Location = new Point((int)Math.Round(LocationXSplash), (int)Math.Round(LocationYSplash)); } } private void CreateStandardControls() { m_solutionExplorer = new DummySolutionExplorer(); m_propertyWindow = new DummyPropertyWindow(); m_toolbox = new DummyToolbox(); m_outputWindow = new DummyOutputWindow(); m_taskList = new DummyTaskList(); } private void menuItemLayoutByXml_Click(object sender, System.EventArgs e) { dockPanel.SuspendLayout(true); // In order to load layout from XML, we need to close all the DockContents CloseAllContents(); CreateStandardControls(); Assembly assembly = Assembly.GetAssembly(typeof(MainForm)); Stream xmlStream = assembly.GetManifestResourceStream("DockSample.Resources.DockPanel.xml"); dockPanel.LoadFromXml(xmlStream, m_deserializeDockContent); xmlStream.Close(); dockPanel.ResumeLayout(true, true); } private void menuItemCloseAllButThisOne_Click(object sender, System.EventArgs e) { if (dockPanel.DocumentStyle == DocumentStyle.SystemMdi) { Form activeMdi = ActiveMdiChild; foreach (Form form in MdiChildren) { if (form != activeMdi) form.Close(); } } else { foreach (IDockContent document in dockPanel.DocumentsToArray()) { if (!document.DockHandler.IsActivated) document.DockHandler.Close(); } } } private void menuItemShowDocumentIcon_Click(object sender, System.EventArgs e) { dockPanel.ShowDocumentIcon = menuItemShowDocumentIcon.Checked = !menuItemShowDocumentIcon.Checked; } private void showRightToLeft_Click(object sender, EventArgs e) { CloseAllContents(); if (showRightToLeft.Checked) { this.RightToLeft = RightToLeft.No; this.RightToLeftLayout = false; } else { this.RightToLeft = RightToLeft.Yes; this.RightToLeftLayout = true; } m_solutionExplorer.RightToLeftLayout = this.RightToLeftLayout; showRightToLeft.Checked = !showRightToLeft.Checked; } private void exitWithoutSavingLayout_Click(object sender, EventArgs e) { m_bSaveLayout = false; Close(); m_bSaveLayout = true; } #endregion private void MainForm_SizeChanged(object sender, EventArgs e) { ResizeSplash(); } } }
标签: 实例
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论