PDA

View Full Version : ترسیم کادر در #C



mehran6764
چهارشنبه 27 مرداد 1400, 00:09 صبح
153455


سلام دوستان شب بخیر

دوستان من بخوام این کادری که در تصاویر می بنیند رو ویندوز فرم به همین شکل رسم کنم
دنبال کنترل خاصی بگردم ؟ یا یه پنل هست که با کدنویسی اوجوری تغییر کرده ؟

پ ن : سوال مشابهی در مورد گرد کردن گوشه های باتن داشتم که جناب The king سنگ تموم گذاشتن و کلی توضیح دادن
اما متوجه نشدم و ازشون پرسیدم و ایشون دوباره کلی توضیح دادن اما من این بار که متوجه نشدم اصن نتونستم به رو
خود بیارم چون توضیحاتشون خیلی به زبون علمی بود . منظورم اینکه اگر کسی لطف کرد و پاسخ رو توضیح داد
یه مقدار عامیانه تر بگه متوجه بشم . ممنونم ..

ShayanFiroozi
چهارشنبه 27 مرداد 1400, 12:17 عصر
سلام ؛

شما باید پست قبلی رو اینجا مینوشتین تا دوستان بتونن ببینن چی شده و چه حرفایی گفته شده !

اگر درست متوجه شده باشم شما فقط به یک GrouBox ساده نیاز دارین !

mehran6764
چهارشنبه 27 مرداد 1400, 12:49 عصر
سلام

فکر می کنم Groupbox تو سون گوشه های رو گرد می کنه اما تو ویندوز 10 ایجوری نیست و گوشه ها رو تیز می کنه، برا همین من تصورم این بود که کنترل دیگری هست
الان دارم تست می کنم

لینک موضوع دوم هم براتون تو خصوصی می فرستم ، اون موضوع متفاوت تر از سوال الانم هست

mehran6764
چهارشنبه 27 مرداد 1400, 12:58 عصر
153457

این الان Groupbox هس که متفاوت تره از کادری که تو عکس های پست اول دیدیم
من عین همون کادرو میخوام

SajjadKhati
پنج شنبه 28 مرداد 1400, 22:01 عصر
سلام
در متد OnPaint میتونید هر شکل ظاهری از کنترل مورد نظرتون را تغییر بدید .

برای تغییر ظاهر ، wpf کار کنید (بسته به نوع کارتون ، مدت زمان یادگیری wpf میتونه خیلی کم یا خیلی زیاد باشه . در حد بدست آوردنِ همچین کنترلی ، مدت زمان زیادی برای یادگیری لازم نداره . البته بسته به تمرین و وقتی که خودتون برای یادگیری میذارید ، داره) .

mehran6764
پنج شنبه 28 مرداد 1400, 23:31 عصر
سلام
در متد OnPaint میتونید هر شکل ظاهری از کنترل مورد نظرتون را تغییر بدید .

برای تغییر ظاهر ، wpf کار کنید (بسته به نوع کارتون ، مدت زمان یادگیری wpf میتونه خیلی کم یا خیلی زیاد باشه . در حد بدست آوردنِ همچین کنترلی ، مدت زمان زیادی برای یادگیری لازم نداره . البته بسته به تمرین و وقتی که خودتون برای یادگیری میذارید ، داره) .

ممنون حلش کردم

اول یک مستطیل ترسیم کردم ، سپس به cornerRadius مستطیل عدد دادم ( این قسمت هم بصورت مستقیم نمی شد )

و در نهایت رسیدم به جایی که باید خط رو بصورت دو بعدی رسم کنم که اون هم باز بصورت مستقیم نمی شد

پس یک خط با فاصله کم و رنگ روشن تر پایین ضلع رسم کردم تا اون حالت دوبعدی هم به چشم بیاد

___





System.Drawing.Graphics graphicsObj;

graphicsObj = this.CreateGraphics();


Pen myPen2 = new Pen(Color.FromArgb(213, 205, 190), 1);
Pen myPen3 = new Pen(Color.FromArgb(250, 250, 250), 2);
Rectangle myRectangle = new Rectangle(20, 21, 420, 54);

Class1.DrawRoundedRectangle(graphicsObj, myPen2, myRectangle, 3);
e.Graphics.DrawLine(myPen3, 23, 23, 438, 23);




153458


حالا در ادامه برای اینکه بهتر هم بهتر هم بشه یه خط با رنگ تیره به عنوان سایه زیر ضلع پایین بکشم

SajjadKhati
جمعه 29 مرداد 1400, 00:40 صبح
ممنون حلش کردم

اول یک مستطیل ترسیم کردم ، سپس به cornerRadius مستطیل عدد دادم ( این قسمت هم بصورت مستقیم نمی شد )

و در نهایت رسیدم به جایی که باید خط رو بصورت دو بعدی رسم کنم که اون هم باز بصورت مستقیم نمی شد

پس یک خط با فاصله کم و رنگ روشن تر پایین ضلع رسم کردم تا اون حالت دوبعدی هم به چشم بیاد

___





System.Drawing.Graphics graphicsObj;

graphicsObj = this.CreateGraphics();


Pen myPen2 = new Pen(Color.FromArgb(213, 205, 190), 1);
Pen myPen3 = new Pen(Color.FromArgb(250, 250, 250), 2);
Rectangle myRectangle = new Rectangle(20, 21, 420, 54);

Class1.DrawRoundedRectangle(graphicsObj, myPen2, myRectangle, 3);
e.Graphics.DrawLine(myPen3, 23, 23, 438, 23);




153458


حالا در ادامه برای اینکه بهتر هم بهتر هم بشه یه خط با رنگ تیره به عنوان سایه زیر ضلع پایین بکشم

سلامی مجدد
از متد this.CreateGraphics برای استفاده از شیِ Graphics استفاده نکنید . چون شی جدید از Graphics ایجاد میکنه .
از پارامترِ وروی در همون متد OnPaint (که از نوع PaintEventArgs هست) ، برای استفاده از شی Graphics استفاده کنید (همون پروپرتیِ e.Graphics) .

mehran6764
جمعه 29 مرداد 1400, 19:52 عصر
سلامی مجدد
از متد this.CreateGraphics برای استفاده از شیِ Graphics استفاده نکنید . چون شی جدید از Graphics ایجاد میکنه .
از پارامترِ وروی در همون متد OnPaint (که از نوع PaintEventArgs هست) ، برای استفاده از شی Graphics استفاده کنید (همون پروپرتیِ e.Graphics) .

متاسفانه همچنان سایت دکمه تشکر رو نداره

خواستم به بهانه تشکر سوالی هم ازتون بپرسم .

چند بار پیشنهاد دادین WPF یاد بگیرم ، اگر ممکنه چند تا منبع خوب برای شروع معرفی کنید .


پ ن : این روش ترسیم مستطیل هم وقتی تعداد کادرها زیاد باشه خیلی آزار دهنده میشه

SajjadKhati
جمعه 29 مرداد 1400, 22:32 عصر
متاسفانه همچنان سایت دکمه تشکر رو نداره

خواستم به بهانه تشکر سوالی هم ازتون بپرسم .

چند بار پیشنهاد دادین WPF یاد بگیرم ، اگر ممکنه چند تا منبع خوب برای شروع معرفی کنید .


پ ن : این روش ترسیم مستطیل هم وقتی تعداد کادرها زیاد باشه خیلی آزار دهنده میشه

سلامی مجدد
خواهش میکنم .

من هم اول مثل شما که winform کار میکردم ، نیاز به یه سری کنترل ها و شخصی سازی هایی در کنترل ها داشتم .
در یک نمونه اش ، به یه کنترلی که پشت زمینه اش شفاف باشه ، نیاز داشتم . گفتم این رو در winform طراحی کنم و چند ماه روش زمان گذاشتم و با کمک استادم (The King) ، اون کنترل را طراحی کردم اما همونطور که استادم از اول بهم گوشزد کرده بود ، اما کارایی اش مناسب نبود که این قضیه به خودِ winform و اینکه winform از اساس با کنترل های شفاف ، مشکلات سازگاری داره ، برمیگرده .

بعد گفتم با کاهشِ کاراییِ این کنترل ، یه جوری کنار میام . رفتم سراغ کنترل های دیگه ، گاها دیدم برای کوچیک ترین تغییری در یه کنترل ، دنیایی باید مکافات و اینها بکشم . چه برسه به چندین کنترل و مخصوصا کنترل های پیچیده تر مثل combobox و tree و اینها .
این بود که گفتم چند ماهی که وقت صرف اینها کردم ، روی یادگیری wpf وقت میذاشتم ، بهتر بود .

در کل نظرم اینه که اگه میخواین ظاهر کنترل را تغییر بدین ، ارزش داره که زمان صرف یادگیری wpf کنید . چون برای شخصی سازیِ ظاهر کنترل ها در winform ، علاوه بر مشکلات بالا ، ممکنه کمپوننت های شرکت های دیگه هم به سختی گیرتون بیاد یا داستان های کرک شون پیش بیاد و تازه اونها هم محدودیت در شخصی سازی کنترل ها دارن.

==========================

اما برای یادگیری wpf ، بستگی به خودتون داره که در چه حد بهش احتیاج دارین و آیا میخواین از تمام امکاناتش استفاده کنین یا نه؟
شما یه وقت میاد میگین که میخوام wpf را در این حد یاد بگیرم که همچین کنترلی که در پست اول نشون دادین را توی wpf بسازم اما چیزهای دیگه و قابلیت های بیشترِ دیگه اش را نیاز ندارم . یعنی از بقیه ی قابلیت هاش ، نمیخوام استفاده کنم . اگه این طور باشه ، خوب قطعا خیلی خیلی مدت زمان یادگیری ، کمتر میشه .

منابع ، که در سایت مایکروسافت هست :

https://docs.microsoft.com/en-us/dotnet/desktop/wpf/?view=netframeworkdesktop-4.8&preserve-view=true

سایت c-sharpcorner.com هم در مقالاتی ، خیلی کمک میکنه . سایت های دیگه هم هستن .

اما برای wpf ، علاوه بر XML ، مباحث زیر را در حدِ حداقلی هم که شده باید یاد بگیرید:

XAML in WPF (https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/xaml-overview?view=netframeworkdesktop-4.8)

سیستم پروپرتی WPF (https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/dependency-properties-overview?view=netframeworkdesktop-4.8)

Data binding (https://docs.microsoft.com/en-us/dotnet/desktop/wpf/data/data-binding-overview?view=netframeworkdesktop-4.8)

اینی که میخواین ظاهرِ یک کنترل را تغییر بدین ، باید مبحث Control Template در WPF (https://docs.microsoft.com/en-us/dotnet/desktop/wpf/controls/styles-templates-overview?view=netframeworkdesktop-4.8) را یاد بگیرید .

سیستم رویداد هم در WPF اندکی فرق داره که بهتره یاد بگیرین . همچنین مبحث Resource ها را .
البته مباحث در WPF ، زیادن . ولی اینها ، مباحث اولیه برای یادگیری WPF هست .
منابع فارسی هم اگه خواستین هم که میتونین پیدا کنین .

همچنین این تاپیک ، پرسش های من و پاسخ های استادم (The King) درباره ی WPF (https://forum.majidonline.com/threads/%D8%B3%D8%A6%D9%88%D8%A7%D9%84%D8%A7%D8%AA-%D9%88-%D9%85%D8%A8%D8%A7%D8%AD%D8%AB-wpf.230782/post-1393745) هست که از حالتِ مبتدی (تا به حال) مطرح شد و احتمالا به دردتون میخوره (از همینجا ، مجددا از استادم تشکر میکنم) .