zoukankan      html  css  js  c++  java
  • 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是否最大化的填充

  • 相关阅读:
    封装ajax---基于axios
    XHR的理解和作用
    params和 query区别
    HTTP请求交互的基本过程
    http3次握手
    ES6----import * as 用法
    微信小程序真机调试:Setting data field "XXX" to undefined is invalid
    webpack详解-----optimization
    node跨域
    shell 的 功能语句--1
  • 原文地址:https://www.cnblogs.com/ysz12300/p/5283180.html
Copyright © 2011-2022 走看看