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事件,判断窗体状态是否为最小化,其他事件判断会出现问题:

  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.      
  5.     this.ShowInTaskbar = true; 

  6.     this.WindowState = FormWindowState.Normal; 

  7.     this.BringToFront(); 

  8. }

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

【快捷菜单】

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

【气泡提示条】

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

运行结果:

tmp84

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是否最大化的填充

posted @ 2016-03-16 13:43  C#winform软件设计  阅读(2279)  评论(0编辑  收藏  举报