C#窗体设计学习记录

 一、改变窗体的大小

Windows窗体是可以随意改变大小的,然而对于一些要求严格的窗体,开发人员不希望用户随意的改变其大小,例如,定位准确的地图和游戏软件等。遇到这种情况必须对窗口的大小进行一些限制。本例设计一个限制了大小的窗体,用户虽然可以改变其大小,但是,大小的范围是受到限制的。

技术要点
在此C#中实现限制大小非常方便,只要设置窗体的最大和最小范围即可。下面介绍一下相关属性。
Form.MinimumSize属性用来获取或设置窗体可调整到的最小大小,其语法格式如下:

public override Size MinimumSize { get; set; }
属性值:Size,表示该窗体的最小大小。

Form.MaximumSize属性用来获取或设置窗体可调整到的最大大小,其语法格式如下:

public override Size MaximumSize{ get; set; }
属性值:Size,表示该窗体的最大大小。

实现过程
(1)创建一个项目,默认窗体为Form1。
(2)主要程序代码。
    

      private void Form1_Load(object sender, EventArgs e)
        {
            MinimumSize = new Size(200200);
            MaximumSize = new Size(400400);
        }


总结:

根据本实例,可以开发以下程序。
1、在窗体显示时规定其大小。
2、在窗体运行时规定其大小。


二、没有标题栏可以改变大小的窗体

隐藏Windows窗口的标题栏之后,窗口只剩下一个客户区域,有点像Panel控件在窗口中的样子,而这样的窗口通常是不能够改变大小的。因为屏蔽其标题栏之后,窗口默认将边框也去除了,本例将用特殊的方法建立一个没有标题栏但是可以改变其大小的窗体。

技术要点

窗口的样式是在窗口建立时确定的,在C#中实现窗体没有标题栏但是可以改变大小的窗口,有一个巧妙的方法就是将窗体的Text属性设为空,同时将ControlBox属性设为False。下面介绍一下相关的属性。

ControlBox属性用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控件框,其语法结构如下:

public bool ControlBox { get; set; }

属性值:如果该窗体在窗体的左上角显示控件框,则为True;否则为False。默认为True。

实现过程

(1)创建一个项目,默认窗体为Form1。
(2)在Form1窗口中添加Label、Button控件,用来设计界面。
(3)主要程序代码。
      

      private void Form1_Load(object sender, EventArgs e)
        {
            ControlBox = false;
        }


注意:必须将窗体的Text属性设为空。

 举一反三
根据本实例,可以开发以下程序。
1、在窗体显示时最小化。
2、在窗体显示时最大化。

 

三、获取桌面大小

获取桌面分辨率可以使用API函数GetDeviceCaps,但API函数参数较多,使用不方便,如何更方便的获取桌面分辨率呢?在本例中,通过读取Screen对象的属性,来获取桌面分辨率信息,以像素为单位
C#中提供了Screen对象,在该对象中封装了屏幕相关信息。可以通过读取Screen对象的相关属性,来获取屏幕的信息,

Screen.PrimaryScreen.WorkingArea.Width用于读取桌面宽度;

Screen.PrimaryScreen.WorkingArea.Height可以读取桌面的高度。

下面介绍一下相关属性。
    Screen.PrimaryScreen.WorkingArea属性用于获取显示器的工作区。工作区是显示器的桌面区域,不包括任务栏、停靠窗口和停靠工具栏。

其结构如下:

    public Rectangle WorkingArea { get; }
    属性值:一个Rectangle,表示显示器的工作区。

实现过程

    (1)创建一个项目,默认窗体为Form1。
    (2)在Form1窗体上添加一个Button控件,用来获取桌面大小;添加两个TextBox控件,用来输出所获取的桌面大小。
    (3)主要程序代码。

     private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = Screen.PrimaryScreen.WorkingArea.Height.ToString( );
            textBox1.Text = Screen.PrimaryScreen.WorkingArea.Width.ToString( );
        }


总结
    1、根据本实例,读者可以开发以下程序。
    2、根据显示器的分辨率信息设置窗体大小及位置。
    3、根据显示器的分辨率信息调整窗体界面。



四、制作文字形窗体

  大家都见过不规则形状的窗体吧,那么如何制作一个文字形的窗体呢?文字形窗体一般应用在屏幕提示中,如收款机屏幕等。

技术要点

以前,创建字体形窗体是一个既费时又费人力的过程,其中涉及到API调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要先将字体画在一幅图上,然后重写窗体的OnPaint方法,在方法中用图重新绘制窗体,用背景色将窗体设置透明即可。

实现过程
(1)创建一个项目,默认窗体为Form1。
(2)主要程序代码。

namespace SpecialSharpWindows
{
    public partial class Form1 : Form
    {
        Bitmap bit;

        public Form1()
        {
            InitializeComponent();
        }

//设置图片透明颜色的实现。代码如下:

        private void Form1_Load(object sender, EventArgs e)
        {
            bit = new Bitmap("1.bmp");
            bit.MakeTransparent(Color.Blue);
        }

 

//重写基类方法的实现。代码如下:

 

      protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawImage((Image)bit, new Point(00));
        }

        private void label1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

 


总结
    根据本实例,可以制作圆形的窗体\制作锯齿状的窗体。


五、设计颜色渐变的窗体

在程序设计时,可以通过设置窗体的BackColor属性来改变窗口的背景颜色。但是这个属性改变后整个窗体的客户区都会变成这种颜色,并且非常单调。如果窗体的客户区可以向标题栏一样能够体现颜色的渐变效果,那么窗体风格将会另有一番风味。本例设计了一个颜色渐变的窗体。

技术要点

C#中可以通过Color.FromArgb( )方法返回一种颜色,下面详细介绍一下该方法。
Color.FromArgb( )方法用来返回Color的颜色值,该方法语法结构如下:

public static Color FromArgb (
    int red,
    int green,
    int blue
)

参数说明如下。
 red:新Color的红色分量值。有效值为从0~255。
 green:新Color的绿色分量值。有效值为从0~255。
 blue:新Color的蓝色分量值。有效值为从0~255。
 返回值:此方法创建的Color。

该函数就是用3种不同的色值来返回一个颜色,而稍微的调整某一种颜色值就可以使整体的颜色发生细微的变化,在窗体中至上而下每行填充一种稍微调整后的颜色,这样整体看来就会产生渐变的效果。可以利用窗体的Graphics对象对窗体进行绘图,该对象可以完全操控窗体的客户区。
 注意:颜色值在0~255之间。
 
实现过程

(1)创建一个项目,默认窗体为Form1。
(2)在Form1窗体中添加Button用来使颜色渐变;添加TextBox控件用来输入颜色RGB值。
(3)主要程序代码。

触发重新绘制事件的实现代码如下:
      

 

       private void button2_Click(object sender, EventArgs e)
        {
            InvokePaintBackground( );
            this.Hide( );
            this.Visible=true;
        }

 
重新绘制窗体背景颜色的实现代码如下:
      

     protected override void OnPaintBackground(PaintEventArgs e)
        {
            int y, dy;
            y = this.ClientRectangle.Location.Y;
            dy = this.ClientRectangle.Height / 256;
            for (int i = 255; i >= 0; i--)
            {     
                Color c = new Color( );
                c = Color.FromArgb(Convert.ToInt32(textBox1.Text.ToString( )), i,Convert.ToInt32(textBox2.Text.ToString( )));
                SolidBrush sb = new SolidBrush(c);
                Pen p = new Pen(sb, 1);
                e.Graphics.DrawRectangle(p,this.ClientRectangle.X, y, this.Width,y+dy);
                y = y + dy;
            }
        } 

 

总结
    根据本实例,可以开发以下程序:
  1、把窗体设置成单一的颜色。
  2、利用Timer组体,使窗体动态改变颜色。

 

posted on 2012-02-22 14:22  陈国利  阅读(7025)  评论(0编辑  收藏  举报