一、MDI窗体的设计

1.MDI简介

MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序

2.效果图:

如下图所示,多窗体嵌套,其中一个是父窗体,其条是子窗体。

横向排列下面的窗体:

纵向排列下面的窗体:

关闭全部子窗体:

3.实现过程

1)、新建一个window窗体程序

2)新建4个form

3)、后端实现代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace mdi设计
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form f2 = new Form2();
f2.MdiParent = this;//指定其mdi父窗体
f2.Show(); Form f3 = new Form3();
f3.MdiParent = this;
f3.Show(); Form f4 = new Form4();
f4.Show();
f4.MdiParent = this; } private void 横向排列ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
} private void 纵向排列ToolStripMenuItem_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
} private void 关闭全部窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form f in this.MdiChildren)
{
f.Close();
} }
}
}

全部源码实现:https://github.com/amosli/CSharp/tree/mdi

其中菜单选项用的是MenuStrip控件,其使用也是非常简单方便的,如下所示:

二、MenuStrip控件

新建一个MenuStrip控件,然后写入名称即可,双击可以定义其事件,如上面的横向排列和纵向排列。

三、PictureBox控件和Timer控件

1.先看效果图:

2.实现过程

新建PictureBox和timer的控件

为了实现PictureBox控件的相对大小,这里要注意更改Anchor布局为全部勾选!

设置图片显示的格式:

【timer控件】间隔时间设置:

间隔执行的事件:

3.后台实现代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace PictureBox控件学习
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// <summary>
/// timer更改时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
lbTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
} public static String ImgDirPath = @"C:\work\img";
String[] imgPaths = Directory.GetFiles(ImgDirPath, "*.jpg");
public static int ImgNum = ;
/// <summary>
/// 实现上一页按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrevious_Click(object sender, EventArgs e)
{
ImgNum--;
if (ImgNum < )
{
ImgNum = imgPaths.Length-;
}
pboGirls.ImageLocation = imgPaths[ImgNum]; } /// <summary>
/// 实现下一页按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNext_Click(object sender, EventArgs e)
{
ImgNum++;
if (ImgNum >= imgPaths.Length)
{
ImgNum = ;
}
pboGirls.ImageLocation = imgPaths[ImgNum];
} /// <summary>
/// 随机浏览
/// </summary>
Random rnd = new Random();
private void button1_Click(object sender, EventArgs e)
{
pboGirls.ImageLocation = imgPaths[rnd.Next(imgPaths.Length)];
}
}
}

全部源码:https://github.com/amosli/CSharp/tree/picturebox

C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件的更多相关文章

  1. winform(MDI窗体容器、权限设置)

    一.MDI窗体容器: 1.功能: 它可以让其它窗体在它的内部打开,无法超出它的范围 将某个窗体的属性:IsMdiContainer设置为true - 窗口样式 2.问题: (1)如何将其它窗体在它的内 ...

  2. AntDesign vue学习笔记(七)Form 读写与图片上传

    AntDesign Form使用布局相比传统Jquery有点繁琐 (一)先读写一个简单的input为例 <a-form :form="form" layout="v ...

  3. IOS网络第五天 AFN-02-文件上传,底部弹出窗体,拍照和相册获取图片上传

    ************** #import "HMViewController.h" #import "AFNetworking.h" @interface ...

  4. 【软件学习】如何将Typora中的本地图片上传到博客

    1. 配置方法 下载软件: 点击程序输入博客信息进行配置: 进行偏好设置: 2. 配置中出现的一些问题 解决方法:

  5. Winform学习手册(目录)

    一.基础: WINFORM学习笔记——创建Winform项目 WINFORM学习手册——TextBox.Lable.Button WINFORM学习笔记——窗体生命周期 WINFORM学习手册——对话 ...

  6. Flutter学习笔记(19)--加载本地图片

    如需转载,请注明出处:Flutter学习笔记(19)--加载本地图片 上一篇博客正好用到了本地的图片,记录一下用法: 首先新建一个文件夹,这个文件夹要跟目录下 然后在pubspec.yaml里面声明出 ...

  7. 小菜学习Winform(四)MDI窗体(附示例)

    前言 在做winfrom项目的时候我们可能会用到嵌套窗体,就是说一个容器中有多个窗体,可以分别管理和应用这些窗体,.net中提供了一种机制就是MDI,可能大家都会用,这边就简单的介绍下. 简单应用 w ...

  8. winform学习(5)MDI窗体

    SDI窗体 single document interface 单文档界面,即单个简单的窗体 MDI窗体 multiple document interface 多文档界面(主窗体与子窗体的关系,避免 ...

  9. winform 窗体圆角设计

    网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...

随机推荐

  1. Ping出现TTL expired in transit的原因

    今天上班检查服务器时发现出现TTL expired in transit的提示,这种提示还是第一次见,如图: ping 和 tracert 的结果 用tracert来看路由状况,原来是出现路由环路导致 ...

  2. C#小程序呢飞行棋设计分析

    C#小程序飞行棋,程序效果图 1.设计分析 这个程序界面大致分为四部分: ① 最上面游戏名字界面 ②信息提示区 ③游戏界面区 ④游戏操作提示区 2.分区设计实现 一.游戏界面显示区,由于只需要显示出图 ...

  3. android 动态设置控件宽高度

    Android 代码里直接使用 setWidth() 和 setHeight()设置宽高度是没用的. 解决办法是 改用setLayoutParams()方法 如设置宽高内容自适应: setLayout ...

  4. iOS在label上加横杠

    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(20, 50, 200, 50)];    [self.view addSubvi ...

  5. Xenko基础API笔记3- Pointers指针设备屏幕上点对应的手指触摸。

    样本这里是一个简单的示例程序,跟踪目前在屏幕上的指针和打印他们的位置.访问输入字段,类继承自@ SiliconStudio.Xenko.脚本的类. public override async Task ...

  6. CentOS6上无法启动NFS服务

    CentOS6上无法启动NFS服务 1.系统环境 物理机:Windows 7(32位)旗舰版 虚拟机:CentOS 6.5 2.问题描述 安装好nfs应用程序之后,打算启动nfs服务,却出现以下的报错 ...

  7. java线程内存模型,线程、工作内存、主内存

    转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...

  8. java io 流分类表

    Java输入/输出流体系中常用的流分类(表内容来自java疯狂讲义) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字 ...

  9. 15.linux 中无法输入指令

    怎么可以回到倒数第五行的输入状态啊……

  10. excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法

    在工作中除了要做一些常用的图表之外,不时还会有一切奇怪图表的制作需求. 今天的内容主要记录的是如何对excle图表的次横坐标及次纵坐标进行调试,以及如何自定义调整轴标签 首先看下如何做次纵坐标,工作中 ...