WinForm——窗体总结

  1. 常用属性
  • StartPosition属性

用来获取或设置运行时窗体的起始位置。

语法格式:public FormStartPosition StartPosition { get; set; }

属性值:FormStartPosition的枚举值之一,表示窗体的起始位置。说明如下:

枚举值

说明

CenterParent

窗体在其父窗体中居中。

CenterScreen

窗体在当前显示窗口中居中,其尺寸在窗体大小中指定。

Manual

窗体的位置由 Location 属性确定。

WindowsDefaultBounds

窗体定位在 Windows 默认位置,其边界也由 Windows 默认决定。

WindowsDefaultLocation

窗体定位在 Windows 默认位置,其尺寸在窗体大小中指定。

 

例:

private void Form1_Load(object sender, EventArgs e)

        {

            this.StartPosition = FormStartPosition.CenterScreen;//设置窗体剧中显示

        }

  • Left属性

该属性用来获取或设置窗体的左边缘与其容器的工作区左边缘之间的距离,以像素为单位。

语法格式:public int Left { get; set; }

  • Top属性

用来获取或设置窗体的上边缘的 y 坐标(以像素为单位)。

   private void Form1_Load(object sender, EventArgs e)

    {

          this.Left = 100;

          this.Top = 200;

   }

  • Name属性

用来获取或设置窗体的名称。

语法格式:public string Name { get; set; }

  • Location属性

获取或设置窗体的左上角相对桌面的左上角坐标。

语法格式:public Point Location { get; set; }

例:this.Location = new Point(16, 16);

  • TopMost属性

用来获取或设置一个值,指示该窗体是否显示为最顶层窗体。如果将窗体显示为最顶层则为True,反之为False。

  • Width属性

用来获取或设置窗体的宽度。语法格式:public int Width { get; set; }

  • FormBorderStyle属性

表示要为窗体显示的边框样式。 默认值为 FormBorderStyle.Sizable。

语法格式:public FormBorderStyle FormBorderStyle { get; set; }

FormBorderStyle枚举值如下:

属性

意义

FormBorderStyle.None

0

无边框

FormBorderStyle.FixedSingle

1

固定的单行边框

FormBorderStyle.Fixed3D

2

固定的三维样式边框

FormBorderStyle.FixedDialog

3

固定的对话框样式的粗边框

FormBorderStyle.Sizable

4

可调整大小的边框

FormBorderStyle.FixedToolWindow

5

不可调整大小的工具窗口边框

FormBorderStyle.SizableToolWindow

6

可调整大小的工具窗口边框

注:使用FixedToolWindowSizableToolWindow时,还需要将ShowInTaskbar属性设置为false。例:this.ShowInTaskbar=false;

  • ShowInTaskbar属性

该属性用来获取或设置一个值,该值指示是否在 Windows 任务栏中显示窗体。

  • ControlBox属性

用来获取或设置一个值,该值指示在该窗体中是否显示最大化、最小化和关闭按钮。。

  • MaximumBox属性

用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。

  • MinimizeBox属性

用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。

  • WindowState属性

用来获取或设置窗体的窗口状态。语法格式:public FormWindowState WindowState { get; set; }

枚举值

描述

Maximized

最大化窗口

Minimized

最小化窗口

Normal

默认大小的窗口

 

  • RightToLeft属性

用来回去或设置一个值,该值指示是否将控件的元素对齐,以支持从右到左的字体的区域设置。语法格式:public virtual RightToLeft RightToLeft { get; set; }

枚举值

描述

No

文本从左至有读取,默认设置。

Yes

文本从右到左读取。

Inherit

文本的读取方法从父控件继承

  • BackColor属性

用来获取或设置窗体的背景色。语法格式:public override Color BackColor { get; set; }

默认为DefaultBackColor属性的值。

  • BackgroundImage属性

用来获取或设置窗体的背景图像。例:

private void Form1_Load(object sender, EventArgs e)

{

    this.BackgroundImage = Image.FromFile("test.jpg");        

 }

注:上面代码的test.jpg需要放置在程序的Debug文件夹中。

  • BackgroundImageLayout属性

用来获取或设置在ImageLayout枚举中定义的背景图像布局。语法格式如下:

public virtual ImageLayout BackgroundImageLayout { get; set; }

ImageLayout枚举值说明:

枚举值

说明

None

图像沿控件工作区顶部左对齐

Tile

图像沿控件的矩形工作区平铺

Center

图像沿控件的矩形工作区居中显示

Stretch

图像沿空间的矩形工作区拉伸

Zoom

图像在空间的矩形工作区中放大

 

  • AcceptButton属性

该属性用来获取或设置一个值,该值是一个按钮的名称,当用户按 ENTER 键时就相当于单击了窗体上的该按钮。

  • CancelButton属性

该属性用来获取或设置一个值,该值是一个按钮的名称,当用户按ESC键时就相当于单击了窗体上的该按钮。

 

  • Text属性

该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。

  • Heigth属性

用来获取或设置窗体的高度。

  • Opacity属性

获取或设置窗体的不透明级别

  • ActiveControl属性

用来获取或设置容器控件中的活动控件。

  • AutoScroll属性

用来获取或设置一个值,该值指示窗体是否实现自动滚动。

  • Enabled属性

用来获取或设置一个值,该值指示控件是否可以对用户交互作出响应。

  • Font属性

用来获取或设置控件显示的文本的字体。

  • ForeColor属性

用来获取或设置控件的前景色。

  • IsMdiChild属性

获取一个值,该值指示该窗体是否为多文档界面 (MDI) 子窗体。

  • IsMdiContainer属性

获取或设置一个值,该值指示窗体是否为多文档界面 (MDI) 中的子窗体的容器。

  • KeyPreview属性

该属性用来获取或设置一个值,该值指示在将按键事件传递到具有焦点的控件前,窗体是否将接收该事件。

  • Visible属性

该属性获取或设置一个值,该值指示是否显示该窗体或控件。

  • Capture属性

如果该属性值为true,则鼠标就会被限定只由此控件响应,不管鼠标是否在此控件的范围内。

注:窗体是线程启动测窗体,在主程序关闭时,窗体不能随着主程序关闭时,在主程序的Close()加上Enviroment.Exit(0);

  1. 使用举例:
  • 功能:窗体背景色渐变

public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        protected override void OnPaintBackground(PaintEventArgs e)

        {

            int intLocation, intHeight;

            intLocation = this.ClientRectangle.Location.Y;

            intHeight = this.ClientRectangle.Height / 200;

            for (int i = 255; i >= 0; i--)

            {           

                Color color = Color.FromArgb(1, i, 111);//给Color赋值

                SolidBrush solid = new SolidBrush(color);//实例化一个单色的画笔类对象。

                Pen pen = new Pen(solid, 2);//实例化一个用于绘制直线和曲线的对象pen

                e.Graphics.DrawRectangle(pen, this.ClientRectangle.X, intLocation, this.Width, intLocation + intHeight);

                intLocation = intLocation + intHeight; //重新为变量inLocation赋值。

            }

        }

}

结果:

 

  • 功能:实现字幕在窗体中滚动

  public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void timer1_Tick(object sender, EventArgs e)

        {

            label1.Left -= 2;//设置Label1左边缘与其容器的工作区左边缘之间的距离。

            if (label1.Right < 0)//当Label1右边缘与其工作区的左边缘自检的距离小于0时,

            {

                label1.Left = this.Width;//设置lable1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度。

            }

        }

        private void btnGo_Click(object sender, EventArgs e)

        {

            timer1.Enabled = true;

        }

        private void btnStop_Click(object sender, EventArgs e)

        {

            timer1.Enabled = false;

        }

        private void btnClose_Click(object sender, EventArgs e)

        {

            this.Close();

        }

  }

结果:

 

  • 功能:设置闪烁的标题栏

在Windows系统中,当程序在后台运行时,如果某个窗体的提示信息要用户浏览,该窗体不停的闪烁,这样就会吸引用户的注意,本实例实现主要用到API函数。

API函数FlashWindow可以使窗体闪烁以下语法格式:

  [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]

public static extern bool FlashWindow(IntPtr handle, bool bInvert);

参数说明:handle表示要闪烁的窗体,bInvert表示是否恢复状态。

注:利用FalshWidow函数只能时窗体闪烁一下,如果让窗体不停的闪烁就需要使用一个Timer控件每隔一段时间调用该函数。

public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]

        public static extern bool FlashWindow(IntPtr handle, bool bInvert);

        private void btnGo_Click(object sender, EventArgs e)

        {

            timer1.Enabled = true;

        }

        private void btnStop_Click(object sender, EventArgs e)

        {

            timer1.Enabled = false;

        }

        private void timer1_Tick(object sender, EventArgs e)

        {

            FlashWindow(this.Handle, true);//启动闪烁函数。

        }

  }

  • 显示窗体的属性信息

显示窗体的属性信息时通过PropertyGrid控件实现的,控件的SelectedObject属性用于获取或设置在网格中显示属性的对象。例:

private void Form1_Load(object sender, EventArgs e)

        {

            propertyGrid1.SelectedObject = this;

       }

 

  • 窗体的调用

 根据Windows窗体显示的状态,分为模式窗体和无模式窗体。

模式窗体使用ShowDialog方法调用,该窗体为当前窗体时,其他窗体不可用,只有当模式窗体关闭时,其他的窗体才可以恢复到可用状态。

无模式窗体使用Show方法调用,单击任何其他窗体,则选中的窗体为当前窗体并且显示在屏幕的最前面。

模式窗体举例:

Frm2 frm=new Frm2();

Frm.ShowDialog();

非模式窗体的调用:

Frm2 frm=new Frm2();

Frm.Show();

  • 两个不相关的页面进行数据交换

此功能是在做餐博士的时候,有一个这样的需求,当菜品的信息发生改变时,将已经打开的页面信息自动更新。可以理解为观察者模式。
 

namespace CurrentReserving.Model

{

         Public delegate void ModelReturnEventHander(object sender,ModelChangedEventArgs e);

         public static class ReserveModel

         {

                   public static event ModelReturnEventHandler ModelChanged;

                   private static GuestReserveInfo _model;

                   public static GuestReserveInfo Model

                   {

get{return _model;}

set{

_model=value;

if(ModelChanged!=null&& _model!=null)

{

ModelChangedEventArgs ex=new ModelChangedEventArgs(_model);

}

}

}

}

public class ModelChangedEventArgs:EventArgs

{

         private GuestReserverInfo _model;

         public ModelChangedEventArgs(GuestReserveInfo _Model)

         {

                   _model=_Mode;

}

public GuestReserveInfo Model

{

         get{ return _model;}

}

}

}

修改信息后,执行修改信息发送

private void btnChangeInfo_Click(object sender,EventArgs e)

{

ReserveModel.Model=table._reserveInfo;

}

接受信息的页面,订阅事件

public CurrentTableStatusPage()

{

         InitializeComponent();

         ReserveModel.ModelChanged+=new ModeReturnEventHander(ReserveModel_ModelChanged);

 

}

void Reservel_ModelChanged(object sender,ModelChangedEventArgs e)

{

         GuestReserveInfo reserveInfo=ReserveModel.Model;

}

  • 使用匿名方法防止窗体假死的现象

程序执行时,如果有大量的方法在主线程中等待执行,则或造成窗体出现假死的现象,本实例通过使用匿名的方法实现防止窗体出现假死的现象。

        private void Form1_Load(object sender, EventArgs e)

        {

            Thread th = new Thread(() =>

              {

                  Invoke((MethodInvoker)(() =>

                  {

                      long sun = 0;

                      for (long i = 0; i < 1000000000; i++)

                      {

                          sun += i;

                                            

                      }

                      label1.Text = sun.ToString();

                  }

              ));

              });

            th.IsBackground = true;

            th.Start();

        }

  • 启动窗体的位置在上次关闭窗体的位置。

通过在注册表中读写窗体的Location属性来实现的。在窗体关闭前处理窗体的FormClosed时间,将窗体的Location属性值写入注册表,然后在窗体的Load事件中从注册表中读取保存的数据,设置窗体的Location属性值,从而实现了从上次关闭的位置启动窗体的功能。

         读写注册表主要通过RegistryKey类的Get Value方法和Set Value方法来实现的。

        private void Form1_Load(object sender, EventArgs e)

        {

            RegistryKey myReg1, myReg2;//声明之策表对象。

            myReg1 = Registry.CurrentUser;//获取当前用户注册表项。

            try

            {

                myReg2 = myReg1.CreateSubKey("Software\\MySoft");//在注册表中创建子项

                this.Location = new Point(Convert.ToInt16(myReg2.GetValue("1")), Convert.ToInt16(myReg2.GetValue("2")));//设置窗体的显示位置。

 

            }

            catch

            {

            }

        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)

        {

            RegistryKey myReg1, myReg2;

            myReg1 = Registry.CurrentUser;

            myReg2 = myReg1.CreateSubKey("Software\\MySoft");

            try

            {

                myReg2.SetValue("1", this.Location.X.ToString());

                myReg2.SetValue("2", this.Location.Y.ToString());

            }

            catch

            { }

        }

  • 根据桌面的大小来调整窗体的大小

screen类便是单个系统上的一个或多个显示设备,其PrimaryScreen属性用来获取到主显示,概述信返回一个screen对象,而调用screen对象的WorkingArea属性可以获取显示器的工作区。

        private void Form1_Load(object sender, EventArgs e)

        {

            int deskWidth = Screen.PrimaryScreen.WorkingArea.Width;

            int deskHeight = Screen.PrimaryScreen.WorkingArea.Height;

            this.Width = Convert.ToInt32(deskWidth * 0.8);

            this.Height = Convert.ToInt32(deskHeight * 0.8);

        }

  • 如何在exe文件上加上图标

在exe的项目文件上右键选择属性-》选择应用程序-》图标和清单-》图标,选择相应的图片。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值