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組體,使窗體動態改變顏色。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM