作者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
1F:推 jiing24:感恩 59.120.12.63 06/25
2F:推 jiing24:法一在.NET Framework下会有问题 61.66.134.155 06/28
3F:→ jiing24:萤幕色彩为高彩16bit的时候,才会真的把设定的颜 61.66.134.155 06/28
4F:→ jiing24:色透明,在萤幕色彩为 全彩32bit的时候却没有透 61.66.134.155 06/28
5F:→ jiing24:明的效果 61.66.134.155 06/28