KingDZ 變菜鳥,每日一個C#小執行個體之—C#變形表單

來源:互聯網
上載者:User
文章目錄
  • SystemInformation 類

這個問題可能是很古老的問題了,我之所以寫一下,是因為需要整理一下相關資料,對於老鳥來說,建立一個不規則的表單,確實是小菜一碟,可是這個問題對於一些新手來說,不得不是一個很有意思的話題。

我打算寫的小執行個體中,怎麼可以少了這個很有意思的執行個體呢,還請老鳥不要對偶滴文章拍磚啊,哈哈,新手朋友們,只有不斷積累自己很小的執行個體,才可以在自己的編程之力,越走越遠。

好了,我這回給大家帶來的就是C#變形表單,其實,這種事情很常見的就是,軟體的美工了。一款有創意的表單,最好不過了。

第一步當然是準備工作了

把程式中的標題列去掉,否則整個介面將顯得很不協調。當然你去掉了標題列也就去掉了它的最大化、最小化、關閉、移動表單等功能。為了使程式仍然具有這些功能,我們需在程式中添加一些代碼,這樣使用者就仍然可以像以前一樣和程式進行互動。 哈哈,這些屬性我想大家都會設定吧。

哈哈,首先大家準備以後做那個位元影像檔案,我的美術功底不好,自己畫了一張。

好了,下面我們就用這張圖片做一個不規則的表單吧。

我們下面設定幾個表單的屬性吧。

設定表單的標題列。

設定表單的背景以及展開模式。

設定表單的透明顏色

好了,完成了。

這個是最簡單的模式了,呵呵,用一張圖片,使其中的某些顏色透明,就達到我們的目的了,好了,當然,這種表單需要我們實現表單的功能,比如,最大化,關閉..什麼的。

添加關閉事件

,下面,添加移動表單的事件。

首先說一下 

SystemInformation 類

提供當前系統內容的有關資訊。

SystemInformation 類提供 static 屬性,該屬性可用於擷取當前系統內容的有關資訊。該類提供對資訊(例如,Windows 顯示元素大小、作業系統設定、網路可用性和系統上安裝的硬體的功能)的訪問。此類無法執行個體化。具體的每個成員代表什麼,請參照 http://msdn.microsoft.com/zh-cn/library/system.windows.forms.systeminformation_members%28v=vs.80%29.aspx

Point mouseOffset;bool isMouseDown = false;private void Form1_MouseDown(object sender, MouseEventArgs e){    int xOffset;    int yOffset;    if (e.Button == MouseButtons.Left)    {        xOffset = -e.X - SystemInformation.FrameBorderSize.Width;        yOffset = -e.Y - -SystemInformation.FrameBorderSize.Height;        mouseOffset = new Point(xOffset, yOffset);        isMouseDown = true;    }}private void Form1_MouseMove(object sender, MouseEventArgs e){    if (isMouseDown)    {        Point mousePos = Control.MousePosition;        mousePos.Offset(mouseOffset.X, mouseOffset.Y);        Location = mousePos;    }}private void Form1_MouseUp(object sender, MouseEventArgs e){    if (e.Button == MouseButtons.Left)        isMouseDown = false;}

上面的三個事件代表了,按下滑鼠,移動滑鼠,釋放滑鼠的操作。總結起來就是網路上面常見的三步:

1.首先準備一張不規則的背景圖片。

2.建立項目,將表單FormBorderStyle設定為none,以去掉標題列。設定BackgroundImage。

3.設定表單的TransparencyKey屬性為圖片中圓角邊框之外的顏色,表單在遇到該顏色將顯示為透明

通常這種做法是OK的,運行即可看到效果。

注意:

如果監視器的色彩深度設定大於 24 位,則不管 TransparencyKey 屬性是如何設定的,表單的非透明部分都會產生顯示問題。

若要避免出現這種問題,請確保“顯示”控制台中的監視器色彩深度的設定小於 24 位。當開發具有這種透明功能的應用程式時,請牢記應使您的使用者意識到此問題。

下面在介紹一種方式,就是自訂表單,這個需要的就是我們自己繪製表單了。

GraphicsPath

他的用法可以繪製我們想要的表單

private void NewForm_Load(object sender, EventArgs e){    Bitmap image = (Bitmap)Image.FromFile(@"C:\te\1.bmp");    GraphicsPath path = new GraphicsPath();    int width = image.Width;    int height = image.Height;    Rectangle rect;    Color tranColor = image.GetPixel(1,1);    for (int i = 0; i < width-1; i++)    {        for (int j = 0; j < height-1; j++)        {            if (image.GetPixel(i, j) != tranColor) {                rect = new Rectangle(i,j,1,1);                path.AddRectangle(rect);            }        }    }    this.Region = new Region(path);}

當然你也可以在表單的Paint事件裡面寫上自己的代碼。

這個是文字表單

private void NewForm_Paint(object sender, PaintEventArgs e){    GraphicsPath p = new GraphicsPath();    p.AddString("KingDZ", FontFamily.GenericMonospace, 0, 100f, new Point(10, 10), StringFormat.GenericDefault);    this.Region = new Region(p);}

 

拖動不規程表單分三個步驟:

1、響應表單Mouse_Down事件,記錄滑鼠左鍵按下時的座標

2、響應表單的Mouse_Move事件,擷取當前滑鼠相對螢幕的座標減去以上獲得X,Y座標,賦值給表單Location

3、響應表單的Mouse_Up事件,釋放拖動操作

在上面的代碼中,我們也已經涉及到了。

好了,這個例子先到這吧,有些匆忙。哈哈。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.