تبلیغات
شمع آنلاین=منبع دانلود - نحوه ایحاد فرم و کنترل های غیر مستطیلی شکل(None Rectangle Forms and controls )

نحوه ایحاد فرم و کنترل های غیر مستطیلی شکل(None Rectangle Forms and controls )

نویسنده : Admin دوشنبه 18 مهر 1390 04:32 ب.ظ  •    ارسال شده در: آموزش c#

#C

تا حالا شاید برنامه هایی زیادی را دیده باشید که با شکلهای عجیب غریب فرم هاشون شما را متعجب کرده باشند ،یا اینکه نیاز پیدا کرده باشید که فرم یا کنترلی توی برنامه تان استفاده کنید که شکلش فقط مستطیلی نباشد به عنوان مثال یک Button گرد یا فرمی به شکل بیضی یا ...

نحوه ایحاد فرم  و کنترل های غیر مستطیلی شکل(None Rectangle Forms and controls )

شاید شما هم جزء آن دسته از برنامه نویسانی باشید که دوست دارند توی برنامشان از فرم ها و کنترل هایی غیر مسطیلی شکل استفاده کنند قصد دارم توی این مقاله شما را با نحوه ایجاد چنین مورد هایی آشنا کنم.

 تا حالا شاید برنامه هایی زیادی را دیده باشید که با شکلای عجیب غریب فرم هاشون شما را متعجب کرده باشند ،یا اینکه نیاز پیدا کرده باشید که فرم یا کنترلی توی برنامتان استفاده کنید که شکلش فقط مستطیلی نباشد به عنوان مثال یک Button گرد یا فرمی به شکل بیضی یا ... 

 اما چطور می شود فرم یا کنترل غیر مسطیلی را در #‍‍C بوجود آورد ،اگر تجربه برنامه نویسی با زبان های قدیمی تری مثل VB یا ++C را داشته باشد شاید بدونید که توی این زبان ها ایجاد چنین فرم و کنترل هایی یکم سخته و مثلا باید از API های ویندوز استفاده کنید ولی اصلا نگران نباشید چون توی #‍‍C هم این کار آسونه و هم کاربردی و نیاز به درگیر شدن با چیزی غیر از امکانات زبان #‍‍C را ندارد و از همه مهمتر بار اضافی هم روی سیتم نمی آورد.

 هر فرم یا کنترلی (کنترل استاندارد یا کنترل کاربر) شامل یک ناحیه کاری می شود که ناحیه کاری یک فرم یا کنترل ، در NET. در خاصیت Region فرم یا کنترل می باشد .برای آن که شکل فرم یا کنترل را تغییر دهیم کافی است که ناحیه کاری آن را تغییر دهیم.بنابراین باید مقدار خاصیت Region آن را تغییر دهیم خاصیت Region از نوع کلاس Region می باشد که یکی از کلاس های فضای نام  System.Drawing می باشد. یکی از ویژگی های این کلاس این است که سازنده ای دارد که پارامتری از نوع کلاس GraphicsPath  را می پذیرد.

 GraphicsPath  :کلاسی از فضای نام  System.Drawing.Drawing2D است که در ترسیمات 2 بعدی استفاده می شود و مسیری گرافیکی را در خود نگه می دارد و مورد استفاده کلاس های گرافیکی دیگر است .کاربردی که این کلاس دارد این است که می تواند شکلی را که ما می خواهیم به فرم منتقل کنیم را می توانیم در شی از نوع این کلاس ترسم و نگهداری نماییم. این کلاس دارای متد هایی زیادی برای ترسیم انواع و اقسام اشکال می باشد و خاصیت های جالبی در اجتماع گرفتن از آنها دارد.

گام های ایجاد فرمی غیر بیضوی

1.ابتدا شی ای از کلاس GraphicsPath ایجاد می کنیم.(نامش را mypath گذاشتیم)

System.Drawing.Drawing2D.GraphicsPath mypath = new System.Drawing.Drawing2D.GraphicsPath();

 2.شکلی را که می خواهیم فرم به خود بگیرد را به کمک متد های ترسم آن در mypath رسم نماییم .(در اینجا بیضی).

mypath.AddEllipse(0, 0, 400, 300);

پارامتر اول و دوم نقطه شروع (x,y) و پارامتر سوم و چهارم  عرض و ارتفاع بیضی می باشد.

نکته :این کلاس دارای متد های دیگری برای ترسیم اشکال دیگر می باشد

نکته :تمام اشکال به مسیر گرافیکی اضافه می شود و این اشکال به هم متصل می شوند بنابراین می توان ترکیب های شکلی جالبی با آن بوجود آورد .

3.حال باید شی ای از نوع کلاس Region ایجاد و سپس با سازنده ای که مقداری از نوع کلاس GraphicsPath  را می پذیرد آن را مقدار دهی نمود

 System.Drawing.Region MyFormRegion = new System.Drawing.Region(mypath); 

4.خاصیت Region  فرم را با ناحیه ایجاد شده (MyFormRegion) مقدار دهی کنیم.

this.Region = MyFormRegion;

می توانیم کدهای 1تا 4 را در رویداد Load فرم قرار دهیم تا به محض لود شدن فرم شکل آن تغییر کند بنابراین کل کد به صورت یکجا به شکل زیر می باشد.

private void Form1_Load(object sender, EventArgs e)

        {

            System.Drawing.Drawing2D.GraphicsPath mypath = new

                     System.Drawing.Drawing2D.GraphicsPath();           

            mypath.AddEllipse(0, 0, 400, 300);

            System.Drawing.Region MyFormRegion = new System.Drawing.Region(mypath);

            this.Region = MyFormRegion;

        }

از نکات جالب کلاس  GraphicsPath پذیرش متن می باشد بنابراین شما می توانید یک متن را به عنوان ناحیه کاری قرار دهید که نهایتا شکل فرمتان به شکل آن متن در می آید.

(به وسیله متد AddString می توانید متن را اضافه نمایید).

نکته :همین کار را می توانید برای هر نوع کنترل دیگری استفاده کنید مثلا برای گرد کردن Button  از کد زیر استفاده کنید.

private void Form1_Load(object sender, EventArgs e)

        {

            button1.Width = 75;

            button1.Height = 75;

            System.Drawing.Drawing2D.GraphicsPath mypath = new

                     System.Drawing.Drawing2D.GraphicsPath();           

            mypath.AddEllipse(3, 3, 68, 68);

            System.Drawing.Region MyButtonRegion = new System.Drawing.Region(mypath);

            button1.Region = MyButtonRegion; 

        }

و با قرار دادن یک تصویر (به شکل دایره ای 3 بعدی )برای خاصیت BackgroundImage دکمه به آن جلوه دایره ای 3 بعدی دهید.

نکته :اگر می خواهید که button با قرار گرفتن ماوس بر روی آن و کلیک بر روی آن شکلش تغییر کند می بایست برای رویداد MouseHover (هر گاه ماوس بر روی دکمه قرار دارد) و رویداد MouseLeave (موقعی که ماوس از روی دکمه کنار رود)و MouseDown و MouseUp آن ، کدی برای تغییر شکل/تصوی قرار دهید که در مقاله ای پیرامون ایجاد UserControl آن را شرح خواهیم داد.

  نویسنده:بهادری

منیع:persiadevelopers



برچسب ها: آموزش ، آموزش برنامه نویسی ، c# ، آموزش c# ، مروری بر LINQ در C# 2008 ، LINQ ، آموزش LINQ ، C# 2008 ، نحوه ایحاد فرم و کنترل های غیر مستطیلی شکل(None Rectangle Forms and controls ) ، نحوه ایحاد فرم و کنترل های غیر مستطیلی شکل ،
آخرین ویرایش: چهارشنبه 20 مهر 1390 10:52 ب.ظ

 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر