PDA

View Full Version : سوال: ساخت دکمه بدون هیچ گونه پس زمینه و با اشکال مختلف



10jafar
سه شنبه 05 فروردین 1393, 15:27 عصر
سلام
من میخوام یه button ایجاد کنم ولی هیچ پس زمینه ای نداشته باشه.
یعنی کاربر این دکمه رو نبینه ولی اگه تو محل قرار گیری این دکمه کلیک کنه دستورات مربوط به اون دکمه انجام بشه.
ترجیحا اگه بشه دکمه هایی با شکل نامشخص(نه فقط مستطیل مثلا چند ضلعی های مختلف یا ستاره) وبا خاصیت گفته شده ساخت خیلی خوب میشه.

NASA's Spaceman
سه شنبه 05 فروردین 1393, 16:09 عصر
یه لیبل بزار
برو تو رنگش تو بخش web و transparent رو کلیک کن
و بعد برو تو رویداد کلیک لیبل هر کاری خواستی بکن
با سپاس

10jafar
سه شنبه 05 فروردین 1393, 17:18 عصر
ممنون
ولی مشکل لیبل این که به هر اندازه و شکلی که میخوای نمیشه تبدیلش کرد.
راه حلی برای این مشکل دارید؟

NASA's Spaceman
سه شنبه 05 فروردین 1393, 18:10 عصر
خاصیت AutoSize لیبل رو false کن اونوقت میتونی تغییر اندازش بدی
با سپاس

Mahmoud.Afrad
سه شنبه 05 فروردین 1393, 18:12 عصر
برای چند ضلعی میتونی از کلاس زیر استفاده کنی. کلاس رو به پروژه اضافه و پروژه رو بیلد کنید.

یک نمونه از این کنترل به فرم اضافه کنید. نقاط رو به لیست Polygon اضافه کنید و در رویداد PolygonClick کد مورد نظر را بنویسید.

[DefaultEvent("PolygonClick")]
public partial class Canvas : UserControl
{
public delegate void PolygonClickEventHandler(object sender, EventArgs e);
public event PolygonClickEventHandler PolygonClick;

List<PointF> polygon; //to hold points of the polygon

public List<PointF> Polygon
{
get { return polygon; }
set { polygon = value; }
}

public Canvas()
{
this.SetStyle(ControlStyles.Opaque, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
}

protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
private void Canvas_Paint(object sender, PaintEventArgs e)
{
// fetch the graphics object of the canvas
Graphics g = e.Graphics;

//draw polygon only if the number of points in the polygon is greater than two
if (polygon != null && polygon.Count > 2)
{
//Draw the filled polygon
g.FillPolygon(Brushes.Black, polygon.ToArray());
}
}

protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);

PointF currentPoint = e.Location;//to store the mouse location
if (polygon != null && polygon.Count > 2)
{
//Ray-cast algorithm is here onward
int k, j = polygon.Count - 1;
bool oddNodes = false; //to check whether number of intersections is odd
for (k = 0; k < polygon.Count; k++)
{
//fetch adjucent points of the polygon
PointF polyK = polygon[k];
PointF polyJ = polygon[j];

//check the intersections
if (((polyK.Y > currentPoint.Y) != (polyJ.Y > currentPoint.Y)) &&
(currentPoint.X < (polyJ.X - polyK.X) * (currentPoint.Y - polyK.Y) / (polyJ.Y - polyK.Y) + polyK.X))
oddNodes = !oddNodes; //switch between odd and even
j = k;
}

//if odd number of intersections
if (oddNodes)
{
//mouse point is inside the polygon
OnPolygonClick(e);
}
}
Refresh();
}

virtual public void OnPolygonClick(EventArgs e)
{
if (PolygonClick != null)
{
PolygonClick(this, e);
}
}
}

NASA's Spaceman
سه شنبه 05 فروردین 1393, 18:19 عصر
دیگه حرفه ای ها اومدن و من بیاد برم کنار
;)
فقط یه سوال کار این چیه؟
"null"
با سپاس

Morteza-76
سه شنبه 05 فروردین 1393, 18:23 عصر
یعنی خالی بودن همون empty خودمون ("")
(خالی بودن مقدار)

10jafar
سه شنبه 05 فروردین 1393, 18:40 عصر
میشه فایل سورس برنامه رو قرار بدین؟ یه کم هم بیشتر توضیح بدین؟
آخه من مبتدی ام:قهقهه:

Mahmoud.Afrad
سه شنبه 05 فروردین 1393, 18:42 عصر
null بودن یعنی ارجاع سرگردان که با empty بودن متفاوته.
وقتی میگید string str = null; str به هیچ جایی از حافظه اشاره نمیکنه(تخصیص حافظه صورت نگرفته)
ولی وقتی میگید string str = ""; // OR string str = string.Empty; تخصیص حافظه صورت گرفته با مقدار تهی ("").

نمیتونید به مقدار متغیر null دسترسی پیدا کنید (چون حافظه نداره)
ولی میتونید یک رشته empty رو چاپ کنید.