一、多窗体

1、哪个是主窗体

利用From1的button将From2打开

private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();//打开From2时,隐藏From1
}

光那样出现的问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了

(1)、构造函数传值,将窗体传到另一个窗体中去

首先打开From2代码,并选择事件FormClosing

Form1 F1 = null;
public Form2(Form1 f1)
{
InitializeComponent();
F1 = f1;
} private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
F1.Close();
}

然后将From1中的 Form2 f2 = new Form2();改为Form2 f2 = new Form2(this);

2、窗体只能打开一个

在From1中创建一个全局的泛型集合,为了放置全部打开的窗体

List<Form> flist = new List<Form>();
(1)、在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了

将From1中button1的点击事件改为

bool has=false;//From2是否已被打开一次
Form2 f2 = new Form2(this);
foreach(Form F in flist)
{
if(F.Name==f2.Name)
{
has = true;
}
}
if (has)
{ }
else
{
flist.Add(f2);
f2.Show();
}

问题:当窗体打开了,关闭后,就无法再次打开了
办法:当窗体关闭时,清除Form1中集合中的此窗体对象记录
首先在from 1添加一个函数

 public void deleteFrom(Form F)
{
flist.Remove(F);
}

然后在From2的FormClosing事件中改为

if(F1!=null)
{
F1.deleteFrom(this);
}

问题:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入
办法:
找到已打开对象,将WindowState属性设置为:
找到已打开窗体的对象,使用Focus方法;

在From1中button1的点击事件中if(has){}中添加“ f2.Close();”,它起到释放内存的作用

if(F.Name==f2.Name){has = true;}true;后添加F.WindowState = FormWindowState.Normal;//最小化或最大化时点击按钮恢复正常大小
F.Focus();//焦点进入

3、窗体之间的传值和控制

传值:构造函数传值

将From2的构造函数改为

public Form2(Form1 f1,string uname)
{
InitializeComponent();
F1 = f1;

label1.Text = "欢迎回来," + uname;
}

在From1中改为  Form2 f2 = new Form2(this,textBox1.Text);

控制:第一步,找到窗体对象,第二步,将窗体对象的控件值更改
注意:要将窗体中的对象访问权限修改为public:

在From2中添加新建一个按钮和文本框,点击此按钮的点击事件,添加if(F1!=null){F1.button1.Text=Textbox1.Text}
4、提示框类型的窗体

ShowDialog();

修改地方:

 Form2 f2 = new Form2(this,textBox1.Text);
f2.ShowDialog();

作用:

将窗体显示为模式对话框。 在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码

二、菜单和工具栏

1、MenuStrip:
顶部菜单,可右键点击插入标准项
分割线:1、- 2、右键插入Separator

快捷键:每一个项右键属性最下面ShortcuKeys可以设置快捷键,ShowShortcuKeys是否在该项上显示快捷键
不管选项隐藏还是菜单隐藏,快捷键都管用

2、ContextMenuStrip:
右键菜单

在属性 行为上ContextMeunStrip选择您要关联右键菜单,即可使用右键菜单,每一个控件都可以关联右键菜单

3、StatusStript:
底部菜单

4、ToolStrip
工具条

5、ToolStripContainer
工具条容器

winform(多窗体、菜单和工具栏)的更多相关文章

  1. WinFormd多窗体 菜单和工具栏:

    一.多窗体 1.哪个是主窗体 主窗体就是如果关掉这个窗体,程序就会退出的那个窗体1问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了 办法:构造函数传值,将窗体传到另一个窗 ...

  2. 【2017-04-25】winform公共控件、菜单和工具栏、Tab和无边框窗体制作

    一.公共控件 1. Button   按钮 + 布局 - AutoSize   按钮尺寸自动适应里面内容的长度 - Location    位置 - Margin       控件与控件外边距 - S ...

  3. WinForm 菜单和工具栏

    菜单和工具栏: 1.MenuStrip:顶部菜单 优先级最高,默认在最顶部 (1)分割线:a.打一个减号 “-”                   b.右键插入Separator (2)点击事件:每 ...

  4. 【2017-04-25】winform公共控件、菜单和工具栏

    一.公共控件 公共控件很多的属性很多都相似,这些是大部分都相同的: +布局 - AutoSize:自动适应控件上文字内容- Location:位置- Margin:控件间的间距- Size:控件大小 ...

  5. WinForm菜单和工具栏

    菜单和工具栏: 1.MenuStrip - 顶部菜单栏分割线:1输入- 2.右键插入 |SpearTOR 快捷键设置:每一个项右键属性的最下面可以设置快捷键不管选项隐藏还是菜单隐藏,快捷键都管用 2. ...

  6. 2017-4-26 winform 菜单和工具栏

    如何让radiobutton进行分组: 用Panel    相当于div 菜单和工具栏: MenuStrip(菜单条) ShortcutKeys-------------------------与菜单 ...

  7. Winform 实现像菜单一样弹出层

    原文:Winform 实现像菜单一样弹出层 在实际工作中,如果能像菜单一样弹出自定义内容,会方便很多,比如查询时,比如下拉列表显示多列信息时,比如在填写某个信息需要查看一些信息树时.这个时候自定义弹出 ...

  8. C# 自定义样式实现菜单和工具栏的分割线

    在做WinForm界面布局时,菜单和工具栏必不可少!但是MenuStrip和ToolStrip不能够对边框的样式直接设置,如果想实现菜单和工具栏之间的分割线就不容易实现:今天查阅了一下msdn找到了一 ...

  9. PyQt5教程——菜单和工具栏(3)

    PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类 ...

随机推荐

  1. CSS基础(一):开篇

    背景 HTML是一种超文本标记语言,用来定义文档的结构和内容,例如标题.段落和列表等等,而文档内容如何渲染.如何展示,这就需要样式来修饰了.CSS正是可以与HTML很好地结合.如果将HTML比作水,那 ...

  2. Android permission 访问权限大全

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES ...

  3. an introduction to conditional random fields

    1.Structured prediction methods are essentially a combination of classification and graphical modeli ...

  4. location.hash属性介绍

    location.hash属性介绍 例如URL: http://wwww.a.com/index#rhythmk 通过location.hash 我们将获取到 #rhythmk. 默认浏览器会滚动至i ...

  5. yii2 [行为] behaviors 拦截器

    yii2 拦截器 在控制器中可以自定义对action的拦截器,拦截器需要继承 \yii\base\ActionFilter 参考代码: class BaseUserAuthorizeFilter ex ...

  6. pod install 错误 - incompatible character encodings: UTF-8 and ASCII-8BIT

    pod install [!] Invalid `Podfile` file: incompatible character encodings: UTF-8 and ASCII-8BIT. Upda ...

  7. [转]Visual Studio技巧之打造拥有自己标识的代码模板

    可能经过很多博客的介绍,大家都知道代码段的使用,使用代码段可以很方便地生成一些常用的代码格式,确实对我们开发很方便.在团队开发中或者在某些情况下我们经常可能还会希望使用Visual Studio生成的 ...

  8. 斜堆(一)之 C语言的实现

    概要 本章介绍斜堆.和以往一样,本文会先对斜堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若文 ...

  9. FUNCS.H中的函数声明

    /***************************************************************************                         ...

  10. HTML解析类 ,让你不使用正则也能轻松获取HTML相关元素 -C# .NET

    功能: 1.轻松获取指元素HTML元素. 2.可以根据属性标签进行筛选 3.返回的都是Llist强类型无需转换 用过XElement的都知道 用来解析XML非常的方便,但是对于HTML的格式多样化实在 ...