WinForm——MDI窗體
MDI窗體由一個父窗體和若干個子窗體組成。MDI窗體允許同時顯示多個窗體,他常包括含有子選單的“視窗”選單項,該選單項用於在視窗之間進行切換。
MDI 窗體的設定並不複雜,只需要將窗體的屬性 IsMdiContainer 設定為 True 即可。
該屬性既可以在 Windows 窗體的屬性視窗中設定,也可以通過程式碼設定,這裡在窗體載入事件 Load 中設定窗體為 MDI 窗體,程式碼如下。
this.IsMdiContainer = True;
此外,還可以在窗體類的構造方法中加入上面的程式碼。\ 在設定 MDI 窗體以後,窗體的執行效果如下圖所示。
子窗體在父窗體中排列的方式可以使用帶有Mdilayout列舉LayoutMdi列舉成員
| 列舉 | 說明 | | -------------- | ------------------------------ | | ArrangeIcons | 所有 MDI 子圖示均排列在 MDI 父窗體的工作區內。 | | Cascade | 所有 MDI 子視窗均層疊在 MDI 父窗體的工作區內。 | | TileHorizontal | 所有 MDI 子視窗均水平平鋪在 MDI 父窗體的工作區內。 | | TileVertical | 所有 MDI 子視窗均垂直平鋪在 MDI 父窗體的工作區內。 |
Cascade排列:
TileHorizontal排列:
TileVertical排列:
程式碼:
public partial class Form1 : Form
{
private static int FormCount = 1;
//定義此常量是為了統計MDI窗體數目,
MainMenu mnuMain = new MainMenu();
MenuItem FileMenu;
MenuItem NewMenu;
MenuItem ExitMenu;
MenuItem WindowMenu;
public Form1()
{
InitializeComponent();
this.IsMdiContainer = true;
this.Text = "MDI演示程式";
FileMenu = new MenuItem();
FileMenu.Text = "檔案";
WindowMenu = new MenuItem();
WindowMenu.Text = "視窗(\&W)";
WindowMenu.MenuItems.Add("窗體層疊(\&C)", new EventHandler(Cascade_Click));
WindowMenu.MenuItems.Add("水平平鋪(\&H)", new EventHandler(TileH_Click));
WindowMenu.MenuItems.Add("垂直平鋪(\&V)", new EventHandler(TileV_Click));
WindowMenu.MdiList = true;
//這一句比較重要,有了這一句就可以實現在新建一個MDI窗體後會在此主選單項下顯示存在的MDI窗體選單項
NewMenu = new MenuItem();
NewMenu.Text = "新建窗體(\&N)";
NewMenu.Click += new EventHandler(New_Click);
ExitMenu = new MenuItem();
FileMenu.MenuItems.Add(NewMenu);
FileMenu.MenuItems.Add(new MenuItem("-"));
FileMenu.MenuItems.Add(ExitMenu);
mnuMain.MenuItems.Add(FileMenu);
mnuMain.MenuItems.Add(WindowMenu);
this.Menu = mnuMain;
}
private void Cascade_Click(object sender, EventArgs e)
//實現對主窗體中的MDI窗體的層疊操作
{
this.LayoutMdi(MdiLayout.Cascade);
}
private void TileH_Click(object sender, EventArgs e)
//實現對主窗體中的MDI窗體的水平平鋪操作
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}
private void TileV_Click(object sender, EventArgs e)
//實現對主窗體中的MDI窗體的垂直平鋪操作
{
this.LayoutMdi(MdiLayout.TileVertical);
}
private void New_Click(object sender, EventArgs e)
{
Form frmTemp = new Form();
//新建一個窗體
frmTemp.MdiParent = this;
//定義此窗體的父窗體,從而此窗體成為一個MDI窗體
frmTemp.Text = "窗體0" + FormCount.ToString();
//設定MDI窗體的標題
FormCount++;
frmTemp.Show();
//把此MDI窗體顯示出來
}
private void Form1_Load(object sender, EventArgs e)
{
int deskWidth = Screen.PrimaryScreen.WorkingArea.Width;
int deskHeight = Screen.PrimaryScreen.WorkingArea.Height;
this.Width = Convert.ToInt32(deskWidth * 0.8);
this.Height = Convert.ToInt32(deskHeight * 0.8);
}
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form frmTemp = new Form();
//新建一個窗體
frmTemp.MdiParent = this;
//定義此窗體的父窗體,從而此窗體成為一個MDI窗體
frmTemp.Text = "窗體0" + FormCount.ToString();
//設定MDI窗體的標題
FormCount++;
frmTemp.Show();
//把此MDI窗體顯示出來
}
}
- YoloV5實戰:手把手教物體檢測——YoloV5
- 基於阿里Semantatic Human Matting演算法,實現精細化人物摳圖
- PPv3-OCR自定義資料從訓練到部署
- 如何下載pytorch的歷史版本?
- WinForm——Button總結
- WinForm——MDI窗體
- 升級 pip
- 將8位的tif圖片改為png圖片
- RepLKNet實戰:使用RepLKNet實現對植物幼苗的分類(非官方)(二)
- 關於OpenCV imread和imdecode讀取圖片是BGR的證明
- opencv讀取圖片通道以及顯示
- 萬字整理聯邦學習系統架構設計參考
- 編譯器堆空間不足
- 【影象分類】實戰——使用EfficientNetV2實現影象分類(Pytorch)
- MMDetection實戰:MMDetection訓練與測試
- UNet語義分割實戰:使用UNet實現對人物的摳圖
- MobileVIT實戰:使用MobileVIT實現影象分類
- SwinIR實戰:如何使用SwinIR和預訓練模型實現圖片的超分
- 【影象分類】手撕ResNet——復現ResNet(Pytorch)
- Deeplab實戰:使用deeplabv3實現對人物的摳圖