1,显示窗体

非模式:

Form form = new Form();

form.Show();

模式:

Form form = new Form();

form.Show();

2,拥有者窗体与附属窗体

模式:建立隐式的拥有着与附属关系

非模式:不建立隐式附属关系,但可以显式指定

OwnedForm form  = new OwnedForm();

form.Owner = this;

form.Show();

或者更简单的:

OwnedForm form  = new OwnedForm();

form.Show(this);

当然模式也可以显式指定,效果一样。

拥有者窗体可以遍历所有的附属者窗体:

foreach(Form ownedFor in this.OwnedForms)

{

MessageBox.Show(ownedForm.Text);

}

对于非模式的窗体指定附属关系和不指定附属关系,窗体运行效果还是有些区别的:

显式指定附属关系的:附窗体在切回主窗体时仍然在上层,遮挡住下面的主窗体。

主窗体最小化的话,全部窗体都将最小化。

注意区别:Owner属性和Parent属性的区别,Parent属性(大多数为null),是用在MDI窗体上的。

3,窗体的生命周期:

在Show和ShowDialog之前,用户是看不见窗体的,但只要窗体被实例化了,那么这个窗体就存在了。

【窗体打开事件顺序】:

A,构造函数:

构造函数InitializeComponent();后面

Button btn  = mew Button();

this.controls.Add(btn);

this.Text = DateTime.Now.ToString();

B,LOAD事件:

Show,ShowDialog之前发生。此时窗体还没有被显示出来哦。

C,Activated事件:

窗体首次加载的时候,会成为激活窗体,也就是可以接受键盘输入的前台窗体。前通知。

D,Shown事件:

激活以后,窗体将被现实出来。前出事件。然后窗体将显示出来。

【窗体运行中事件】:

Deactivate事件:

当前窗体变成非活动窗体时发生。

Activated事件:

变成活动窗体时发生。

VisibleChanged事件:

当用this.Show()或this.Hide()。同 this.Visible = true 或 this.visible = false

【窗体关闭阶段】:

调用this.Close();关闭这个窗体

FormClosing事件:

在结束程序之前给用户提供一个机会来改变他们的操作。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("Abort your Form?", "Form In Progress", MessageBoxButtons.YesNo);
e.Cancel = (result == DialogResult.No);
}

FormClosed事件:

提供了窗体已经消失的一个通知,虽然触发的时候窗体仍然可见。可以查询FormClosingEventArgs和FormClosingEventArgs提供的CloseReason属性来过的他:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Your Form was aborted: " + e.CloseReason.ToString());
}

在FormClosed事件触发之后,如果没有取消窗体的关闭操作,窗体会在消失之前最后触发Deativated事件。

4,系统托盘通知(NotifyIcon控件)

例:程序点击最小化的时候隐藏,是很常见的功能,但是因为C#没有最小化的事件的处理,所以不能直接使用,在网上找了找,别人都是resize和其他几个事件处理,当然也可以在Deactivate事件实现,实现代码如下:

窗体的Deactivate事件,判断窗体状态是否为最小化,其他事件判断会出现问题:

  1. private void MainForm_Deactivate(object sender, EventArgs e)

  2. {

  3. if (this.WindowState == FormWindowState.Minimized)

  4. {

  5. this.ShowInTaskbar = false;

  6. this.Hide();

  7. }

  8. }

notifyIcon单击显示

  1. private void notifyIcon1_Click(object sender, EventArgs e)

  2. {

  3. this.Show();

  4. this.ShowInTaskbar = true;

  5. this.WindowState = FormWindowState.Normal;

  6. this.BringToFront();

  7. }

    控制NotifyIcon的现实,可以直接操作Visible属性。

【快捷菜单】

添加ContextMenuStrip组件,制作方法与制作雷同,完成后通过notifyIcon的contextMenuStrip属性进行关联。运行后右键托盘图标时,就会弹出快捷菜单。

【气泡提示条】

private void button_Click(object sender, EventArgs e)
{
this.notifyIcon1.BalloonTipText = "我是气泡提示条哦!";
this.notifyIcon1.ShowBalloonTip(3000);
}

运行结果:

5,其他窗体属性:

【FormBorderStyle】

窗体的样式,是否有边框,是否可以改变大小等。默认是:Sizable

【ControlBox】

布尔属性,是否在窗体左上角显示图标及右上角显示关闭按钮。

【MaximizeBox】【MinimizeBox】

最大化和最小化按钮是否显示在标题栏里。

【HelpButton】

问号按钮是否显示在标题栏里。上面为false时才有效。默认为false

【Icon】

窗体图标

【ShowIcon】

是否显示窗体图标

【SizeGripStyle】

来自于SizeGripStyle枚举类型的任何值:Auto,Hide或Show。右下角可移动时的样式。Auto是根据窗体FormBorderStyle的属性决定。不过窗体有状态条控件,那么此属性会被忽略,他会采用状态条控件上的SizingGrip属性来决定这一点。

【ShowInTaskbar】

布尔属性,决定窗体的Text是否显示在Windows的任务栏中。

6,透明窗体

Opacity 属性来设置透明度。

7,非矩形窗体

TransparencyKey设置的颜色与窗体BackColor相同的值,那么窗体将透明。

在窗体中绘制的图形,只要不是BackColor相同颜色,那么将被显示。为了效果更加理想,应该设置窗体FormorderStyle属性为None。

但在窗体上放置的PictureBox不受影响。

如果窗体FormorderStyle属性为None,那么移动起来就要自己处理了。

例如:

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
downPoint = new Point(e.X, e.Y);
} private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (downPoint == Point.Empty) return;
Point location =
new Point(
this.Left + e.X - downPoint.X,
this.Top+e.Y-downPoint.Y
);
this.Location = location;
} private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
downPoint = Point.Empty;
}

这样点击窗体任何一个地方就可以实现移动的效果了。

8,窗体菜单与快捷菜单

菜单(MenuStrip):

窗体可以承载一个或多个菜单条,所有菜单条运行时都可见。通过设置MenuStrip的Visible属性可以隐藏或显示摸个菜单条控件。

主要属性:

【Checked】【checkOnClick】

某个菜单项是否已被选中,以及某个菜单项是否可以被选中。

【Enable】【Visible】 
是否灰色,是否可见。

【Image】

菜单项的图像

【ShortCutKeys】

快捷键的设置

【Text】

显示文字,首字符加下划线用&来修饰

【TextAlign】【TextImageRelation】

没有图像或有图像时文本的对齐方式

快捷菜单(ContextMenuStrip):

设计方式与菜单控件类似,但与之不同的是,窗体和控件都有一个ContextMenuStrip属性,我们可以指定当点击鼠标右键是出现的快捷菜单,只有设置了这个属性后,右键单击控件弹出快捷菜才有效。

9,工具条(ToolStrip)

设计方法与菜单类似。主要属性如下:

【Image】【ImageAlign】

显示图像,对齐方式。

【Text】

显示的文本

【TextAlign】

文本的对齐方式

【TextImageRelation】

文本和图像之间的显示关系

【DisplayStyle】

是否显示文本或图像,或两者都显示。

【Checked】

开关风格的按钮的支持

【Enable】【Visible】

同菜单。

10,状体条(StatusStrip)

通过只能标签选项(控件上三角小箭头),来添加状态条的子组件。文本(可显示图片),进度条等。在文本组件中可以设置Spring属性来最大化的占用状态条的剩余空间。

主要属性如下:

【Image】【ImageAlign】

显示一副图像并将它对齐在可显示区域中。

【Text】

显示的文本

【DisplayStyle】

死否显示文本或图像,或两者都显示

【TextImageRelation】

文本和图像之间的显示关系

【IsLink】【LinkBehavior】

将指定的文本显示为超链接,并规定了工具条在鼠标操作时如何响应。

【Checked】

开关风格的按钮支持

【Enable】【Visible】

同前。

【Spring】

指定ToolStripStatusLabel是否最大化的填充

Windows Forms 窗体篇的更多相关文章

  1. C#Windows Forms窗体、按钮-xdd

    1.更换窗体图标 方法:单击窗体,更改icon属性. 2.调整窗体打开时默认位置 方法:单击窗体,更改StartPotion属性. 3.修改窗体大小 方法:单击窗体,更改Size属性. 4.设置窗体的 ...

  2. Windows Forms 对话框篇

    1,标准对话框 Windows内置的对话框,又叫公用对话框,它们作为组件提供的,并且存在于System.Windows.Forms命名空间中. 手工方式: private void button1_C ...

  3. Windows Forms 布局篇

    1,锚定功能(Anchor属性) 默认为“Top,Left”,不管窗体大小如果改变,保持相对于窗体左上角的位置. 如果设置为”Top,Bottom,Left,Right”这样,控件的大小将随窗体的大小 ...

  4. Windows Forms (一)

    导读 1.什么是 Windows Forms 2.需要学Windows Forms 么? 3.如何手写一个简单的Windows Forms 程序 4.对上面程序的说明 5.Form 类与Control ...

  5. 分分钟用上C#中的委托和事件之窗体篇

    上次以鸿门宴的例子写了一篇名为<分分钟用上C#中的委托和事件>的博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用 ...

  6. Windows Forms(二)

    导读 1.用VS创建一个Windows Forms程序 2.分析上面的程序 3.Mediator pattern(中介者模式) 4.卡UI怎么办——BackgroundWorker组件 用VS创建一个 ...

  7. DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解

    关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  8. 体验Visual Studio 2015 Windows Forms应用程序开发与维护

    昨天到半夜还没有等到Visual Studio 2015的下载地址,实在熬不住就先休息了.北美地区的时区比北京时间要晚一些,今天早上到公司就看到Visual Studio 2015的下载地址,迅速的将 ...

  9. 用户控件的设计要点 System.Windows.Forms.UserControl

    用户控件的设计要点 最近的项目中有一个瀑布图(彩图)的功能,就是把空间和时间上的点量值以图的形式呈现出来,如下图: X坐标为空间,水平方向的一个像素代表一个空间单位(例如50米) Y坐标为时间,垂直方 ...

随机推荐

  1. docker升级&加速器配置

    默认使用yum或者apt安装的docker版本较老,可以通过以下方式进行升级: 1.卸载旧版本 [root@CentOS702 ~]# centos 7.3卸载docker[root@CentOS70 ...

  2. vue踩坑-This dependency was not found

    * vux in ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?type=script&i ...

  3. Android性能优化之提高ListView性能的技巧

    ListView优化一直是一个老生常谈的问题.无论是面试还是寻常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看怎样最大化的优化ListView的性能. 1.在adapter中的ge ...

  4. [React] Controlling Form Values with React

    In this lesson we'll talk about controlling the value for inputs, textareas, and select elements. We ...

  5. HBase概念学习(八)开发一个类twitter系统之表设计

    这边文章先将可能的需求分析一下,设计出HBase表,下一步再開始编写client代码. TwiBase系统 1.背景 为了加深HBase基本概念的学习,參考HBase实战这本书实际动手做了这个样例. ...

  6. PHP CLI模式下的多进程应用分析

    PHP在非常多时候不适合做常驻的SHELL进程, 他没有专门的gc例程, 也没有有效的内存管理途径. 所以假设用PHP做常驻SHELL, 你会常常被内存耗尽导致abort而unhappy 并且, 假设 ...

  7. Python画图工具matplotlib的安装

    今天在机子上安装matplotlib遇到一些问题,特将此记录下来,供大家分享以少走弯路. 1:下载matplotlib 去官网上下载你所须要的版本号http://matplotlib.org/down ...

  8. FileStream vs/differences StreamWriter?

    https://stackoverflow.com/questions/4963667/filestream-vs-differences-streamwriter What is different ...

  9. SQLite详解,案例,手册

    SQLite 存储类型 1.NULL 2.INTEGER 3.REAL 4.TEXT 5.BLOB 创建表 CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT N ...

  10. vue -- config index.js 配置文件详解

    此文章介绍vue-cli脚手架config目录下index.js配置文件 此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单 ...