Windows窗體是可以隨意改變大小的,然而對於一些要求嚴格的窗體,開發人員不希望用戶隨意的改變其大小,例如,定位準確的地圖和遊戲軟件等。遇到這種情況必須對窗口的大小進行一些限制。本例設計一個限制了大小的窗體,用戶雖然可以改變其大小,但是,大小的範圍是受到限制的。
技術要點
在此C#中實現限制大小非常方便,只要設置窗體的最大和最小範圍即可。下面介紹一下相關屬性。
Form.MinimumSize屬性用來獲取或設置窗體可調整到的最小大小,其語法格式如下:
public override Size MinimumSize { get; set; }
屬性值:Size,表示該窗體的最小大小。
Form.MaximumSize屬性用來獲取或設置窗體可調整到的最大大小,其語法格式如下:
public override Size MaximumSize{ get; set; }
屬性值:Size,表示該窗體的最大大小。
實現過程
(1)創建一個項目,默認窗體爲Form1。
(2)主要程序代碼。
{
MinimumSize = new Size(200, 200);
MaximumSize = new Size(400, 400);
}
總結:
根據本實例,可以開發以下程序。
1、在窗體顯示時規定其大小。
2、在窗體運行時規定其大小。
二、沒有標題欄可以改變大小的窗體
隱藏Windows窗口的標題欄之後,窗口只剩下一個客戶區域,有點像Panel控件在窗口中的樣子,而這樣的窗口通常是不能夠改變大小的。因爲屏蔽其標題欄之後,窗口默認將邊框也去除了,本例將用特殊的方法建立一個沒有標題欄但是可以改變其大小的窗體。
技術要點
窗口的樣式是在窗口建立時確定的,在C#中實現窗體沒有標題欄但是可以改變大小的窗口,有一個巧妙的方法就是將窗體的Text屬性設爲空,同時將ControlBox屬性設爲False。下面介紹一下相關的屬性。
ControlBox屬性用來獲取或設置一個值,該值指示在該窗體的標題欄中是否顯示控件框,其語法結構如下:
public bool ControlBox { get; set; }
屬性值:如果該窗體在窗體的左上角顯示控件框,則爲True;否則爲False。默認爲True。
實現過程
(1)創建一個項目,默認窗體爲Form1。
(2)在Form1窗口中添加Label、Button控件,用來設計界面。
(3)主要程序代碼。
{
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)主要程序代碼。
{
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)主要程序代碼。
{
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);
}
//重寫基類方法的實現。代碼如下:
{
e.Graphics.DrawImage((Image)bit, new Point(0, 0));
}
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)主要程序代碼。
觸發重新繪製事件的實現代碼如下:
{
InvokePaintBackground( );
this.Hide( );
this.Visible=true;
}
重新繪製窗體背景顏色的實現代碼如下:
{
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組體,使窗體動態改變顏色。