Windows Forms 窗体篇
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事件,判断窗体状态是否为最小化,其他事件判断会出现问题:
private void MainForm_Deactivate(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.ShowInTaskbar = false;
this.Hide();
}
}
notifyIcon单击显示
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Show();
this.ShowInTaskbar = true;
this.WindowState = FormWindowState.Normal;
this.BringToFront();
}
控制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 窗体篇的更多相关文章
- C#Windows Forms窗体、按钮-xdd
1.更换窗体图标 方法:单击窗体,更改icon属性. 2.调整窗体打开时默认位置 方法:单击窗体,更改StartPotion属性. 3.修改窗体大小 方法:单击窗体,更改Size属性. 4.设置窗体的 ...
- Windows Forms 对话框篇
1,标准对话框 Windows内置的对话框,又叫公用对话框,它们作为组件提供的,并且存在于System.Windows.Forms命名空间中. 手工方式: private void button1_C ...
- Windows Forms 布局篇
1,锚定功能(Anchor属性) 默认为“Top,Left”,不管窗体大小如果改变,保持相对于窗体左上角的位置. 如果设置为”Top,Bottom,Left,Right”这样,控件的大小将随窗体的大小 ...
- Windows Forms (一)
导读 1.什么是 Windows Forms 2.需要学Windows Forms 么? 3.如何手写一个简单的Windows Forms 程序 4.对上面程序的说明 5.Form 类与Control ...
- 分分钟用上C#中的委托和事件之窗体篇
上次以鸿门宴的例子写了一篇名为<分分钟用上C#中的委托和事件>的博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用 ...
- Windows Forms(二)
导读 1.用VS创建一个Windows Forms程序 2.分析上面的程序 3.Mediator pattern(中介者模式) 4.卡UI怎么办——BackgroundWorker组件 用VS创建一个 ...
- DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解
关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...
- 体验Visual Studio 2015 Windows Forms应用程序开发与维护
昨天到半夜还没有等到Visual Studio 2015的下载地址,实在熬不住就先休息了.北美地区的时区比北京时间要晚一些,今天早上到公司就看到Visual Studio 2015的下载地址,迅速的将 ...
- 用户控件的设计要点 System.Windows.Forms.UserControl
用户控件的设计要点 最近的项目中有一个瀑布图(彩图)的功能,就是把空间和时间上的点量值以图的形式呈现出来,如下图: X坐标为空间,水平方向的一个像素代表一个空间单位(例如50米) Y坐标为时间,垂直方 ...
随机推荐
- spring-cloud-netflix集成的服务
1.Ribbon Ribbon is a client side IPC library that is battle-tested in cloud. It provides the followi ...
- The method getDispatcherType() is undefined for the type HttpServletRequest错误解决方法
使用Eclipse Luna版本,jdk1.7和tomcat8.0开发JAVA EE应用.写一个简单的JSP部署后访问报JSP编译错误,具体错误信息如下: The method getDispatch ...
- BZOJ3569: DZY Loves Chinese II(线性基构造)
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图, ...
- 【Django】路由系统
目录 URLconf配置 正则表达式详解 分组命名匹配 命名URL 与 URL反向解析 @ *** Django 1.1版本 URLConf官方文档 URL配置(URLconf)就像Django所支撑 ...
- Java的位运算符——&0xFF的运算与讲解
快放元旦假,没心思做啥的事,就去翻以前的代码遇到这句,但是又不懂,所以只好上网找,终于懂了那么一点点. 所以那个大神看到我说的有问题,请指出!谢谢.... 一:首先区分一下 A~F的意思先 A,代表十 ...
- 关于Shiro的退出请求是如何关联到登录请求的思考
一.结论 先给出结论,是因为本身是很简单的道理.假设我们没有使用任何认证授权的框架,就简单的使用Cookie和HttpSession,那么用户登录后的每一个请求是如何关联上这个用户的呢?答案很简单,由 ...
- PostgreSQL递归查询实现树状结构查询
在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...
- java架构解密——实时动态aop
在上篇博客中个.咱们一起组建了一个容器,里面封装了业务,这样,咱们就将业务和服务的组装放到了client,而client就相当于咱们的开发中使用到的配置文件.大家发现问题了吗?就是我不能动态修改了?业 ...
- Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ma ven/cli/Maven
安装maven 中出现例如以下异常: Exception in thread "main" java.lang.UnsupportedClassVersionError: org/ ...
- java8新增特性(一)---Lambda表达式
Lambda表达式也成为闭包,是java语言层次上的改变,Lambda同意把函数作为一个方法的參数(函数作为參数传递进方法中),或者把代码看成数据.函数式程序猿对这一概念非常熟悉. 在JVM平台上有非 ...