一、改變表單的大小
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(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)主要程式碼。
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(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)主要程式碼。
觸發重新繪製事件的實現代碼如下:
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組體,使表單動態改變顏色。