日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinFormsUI(转xiaisidinen)

發布時間:2025/7/25 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinFormsUI(转xiaisidinen) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DockPanel Suite使用非常簡單,它主要含有兩個類DockContent和DockPanel。

DockContent是可停靠式選項卡的基類,所有可停靠的選項卡控件都必須基礎自它。它是Form的子類,也就是說,可停靠的選項卡是一個個單獨的窗體。

DockPanel繼承自Panel,是可停靠選項卡的容器。

下面將以一個簡單的多文檔編輯器為例,介紹如何使用DockPanel Suite庫。

新建一個WinForm的項目,加入WinFormsUI的引用?
創建主窗口,將主窗口的IsMdiContainer屬性設置為true。在主窗口中加置一個DockPanel控件,并設置其Dock屬性為DockStyle.Fill。?
創建文檔編輯器選項卡窗口TextForm(本例中的文檔編輯器窗口中只有一個簡單的textbox),將TextForm的基類有Form修改為DockContent。?
在主窗口中添加File菜單,并添加new命令。?
??????? int count = 1;
??????? private void newToolStripMenuItem_Click(object sender, EventArgs e)
??????? {
??????????? TextForm t = new TextForm();
??????????? t.Text = "文檔" + count++;
??????????? t.Show(dockPanel1);
??????? }

運行效果如下,是不是比較酷?

可能細心的讀者已經看出來以上程序的一些不足的地方:

選項卡的標題都是"TextForm",而不是我在代碼中預期的"文檔1"、"文檔2"的形式。?
選項卡過于靈活(文檔選項卡可以被拖動到任意地方),這往往是我們需要限制的,比如說工具選項卡是不希望能拖到屏幕中央的,而文檔選項卡是不希望拖到屏幕的四周而能自動隱藏的。?
這些問題是很容易解決的,當選項卡繼承自DockContent后,在屬性設置中就會多出Docking選項,如下圖所示。通過這些屬性的設置,可以靈活的定制我們的選項卡。

對于問題1,需要把TabText屬性設置為null,這樣選項的標題就會隨著Text屬性而改變了。對于問題2,只要設置其合適的DockAreas即可。

另外值得一提的是,可停靠式選項卡和主窗口是一種父窗口和mdi窗口間的關系,因此mdi窗口的那些特性(如獲取活動選項卡、選項卡菜單和主窗口菜單合并等)也可以用在這里,這里就不多介紹了。

最后介紹一下選項卡的位置的保存和恢復。

選項卡的位置的保存和恢復可以通過DockPanel的SaveAsXml函數和LoadFromXml函數實現,這兩個函數使用非常簡單,參看一下控件中的例子很容易使用。如果選項卡需要自定義序列化數據,只需要覆蓋GetPersistString函數即可。

試用了一段時間這個庫后,總體感覺是美觀、大方、強大、簡單易用。這些都是非常難得的。就是在選項卡較多的時候,改變窗口大小不是很流暢。當然,這個和.net的winform控件本身不如c++效率高有關(不過在我用過的.net停靠控件中效率也算一流的)。希望今后能看到更多或開發像這樣的.net精品項目。

一些小改進:

1、當雙擊Tab時,原先是直接把當前Tab所表示的這個窗體,從主窗體的框架上分離現來,成為一個浮動的窗體。這不是我想要的,我把它改成了雙擊關閉。
在DockPaneStripBase的WndProc方法里,對于左鍵雙擊消息重新作了處理(下面注釋掉的一行是原先的寫法,它下面那行是改的):

??????? [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
??????? protected override void WndProc(ref Message m)
??????? {
??????????? if (m.Msg == (int)Win32.Msgs.WM_LBUTTONDBLCLK)
??????????? {
??????????????? base.WndProc(ref m);

??????????????? int index = HitTest();
??????????????? if (DockPane.DockPanel.AllowEndUserDocking && index != -1)
??????????????? {
??????????????????? IDockContent content = Tabs[index].Content;
??????????????????? if (content.DockHandler.CheckDockState(!content.DockHandler.IsFloat) != DockState.Unknown)
??????????????????????? //content.DockHandler.IsFloat = !content.DockHandler.IsFloat;?
??????????????????????? content.DockHandler.Close();
??????????????? }

??????????????? return;
??????????? }

??????????? base.WndProc(ref m);
??????????? return;
??????? }

2、很多窗體都在Tab中有個右鍵菜單,右擊的里面有關閉,所以最好繼承一下DockContent,讓其它窗體只要繼承這個就有了這個右鍵菜單

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WeifenLuo.WinFormsUI.Docking
{
??? public class DockContentEx : WeifenLuo.WinFormsUI.Docking.DockContent
??? {
??????? public DockContentEx()
??????? {
??????????? ContextMenuStrip cms = new System.Windows.Forms.ContextMenuStrip();
??????????? ToolStripMenuItem tsmiClose = new System.Windows.Forms.ToolStripMenuItem();
??????????? //?
??????????? // cms
??????????? //?
??????????? tsmiClose.Name = "cms";
??????????? tsmiClose.Size = new System.Drawing.Size(98, 22);
??????????? tsmiClose.Text = "關閉";
??????????? tsmiClose.Click += new System.EventHandler(this.tsmiClose_Click);
??????????? //?
??????????? // tsmiClose
??????????? //?
??????????? cms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
??????????? tsmiClose});
??????????? cms.Name = "tsmiClose";
??????????? cms.Size = new System.Drawing.Size(99, 26);

??????????? this.TabPageContextMenuStrip = cms;
??????? }

??????? private void tsmiClose_Click(object sender, EventArgs e)
??????? {
??????????? this.Close();
??????? }
??? }
}


轉載于:https://www.cnblogs.com/beblue/archive/2009/08/12/1544783.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的WinFormsUI(转xiaisidinen)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。