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實現對人物的摳圖