作者psvsps2 (Op穎)
看板C_Sharp
標題Re: [問題] 想請問Windows Form的圓邊表單如何做?
時間Fri Jun 10 23:26:07 2005
※ 引述《jiing24 (jiing)》之銘言:
: 1. 以前好像有看過BCB有round edge屬性不過現在C#好像沒有
: 想請教要如何做呢?或是有什麼好書或參考資料
.NET 1.1下有兩種方法第一種比較簡單
1.先預備好一張圖形檔案當作Form的底圖,然後將底圖設為Form的
BackgroundImage
(可以直接在Visual Studio 2003 IDE中Form的properties指定)
2.設定Form的
FormBorderStyle = FormBorderStyle.None;
3.接下來設定Form的
TransparencyKey=
BackColor即可。
另一種比較正統也是Win32下常用的方式,下面提供範例程式
1.記的先將Form的
FormBorderStyle = FormBorderStyle.None;
class MyForm:Form
{
private void setRegion()
{
//這個範例是設定一個圓形的Form
Rectangle rect = this.ClientRectangle;
using( GraphicsPath path = new GraphicsPath())
{
path.AddEllipse(rect);
this.Region = new Region.path;
}
}
//處理Load事件
void MyForm_Load(.....)
{
setRegion();
}
//處理SizeChanged事件
void MyForm_SizeChange(.....)
{
setRegion();
}
}
然後記住這些不規則的Form必須要從新實作出原本Drag caption的移動視窗效果
最簡單是處理
MouseDown, MouseMove,和
MouseUp三個事件
在Form的class中加上一個private member
Point prePoint=Point.Empty;
//處理MouseDown Event
void MyForm_MouseDown(object sender, MouseEventArg e)
{
//只有滑鼠左鍵讓他可以移動Window
if(e.Button != MouseButtons.Left)
return;
prePoint = new Point(e.X, e.Y);
}
//處理MouseMove Event
void MyForm_MouseMove(object sender, MouseEventArg e)
{
if(prePoint = Point.Empty)
return;
Point position = new Point(this.Left + e.X -prePoint.X,
this.Top + e.Y - prePoint.Y);
//設定Window新的位置
this.Location = position;
}
//處理MouseUp Event
void MyForm_MouseUp(object sender, MouseEventArg e)
{
if(e.Button != MouseButtons.Left)
return;
prePoint = Point.Empty
}
: 2. 另外想問圓形的按鈕要如何做?
: 謝謝!
C#中要做自定元件已經非常簡單建議自己試試看
可以參考這幾個Event
Paint
MouseDown
MousUp
MouseHover
Click
如果還是沒有概念可以參考
http://www.codeproject.com/cs/miscctrl/zhaocolorbutton.asp
針對上面幾個Event做重點研究應該就懂了。
--
我的Blog :)
http://spaces.msn.com/members/austinjan/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.23.6
推 jiing24:感恩 59.120.12.63 06/25
推 jiing24:法一在.NET Framework下會有問題 61.66.134.155 06/28
→ jiing24:螢幕色彩為高彩16bit的時候,才會真的把設定的顏 61.66.134.155 06/28
→ jiing24:色透明,在螢幕色彩為 全彩32bit的時候卻沒有透 61.66.134.155 06/28
→ jiing24:明的效果 61.66.134.155 06/28