PDA

View Full Version : سوال: طراحی کامپوننت در WPF و استفاده در Windows Form



md3848
پنج شنبه 07 فروردین 1399, 10:40 صبح
سلام - تو محیط Windows Form نمیشه کامپوننت های زیبایی طراحی کرد، دست آدم خیلی بستس ( حداقل تو چند تا کامپوننت کوچولو که من طراحی کردم متوجه این موضوع شدم، نمیدونم از عدم آگاهی من از قدرت Windows Form در طراحی کامپوننت و امکاناتش هستش یا واقعا در این زمینه ضعیف هستش )
اما یه بررسی که کردم مث این که میشه تو WPF کامپوننت های زیبایی طراحی کرد، خواستیم ببینم میشه از کامپوننت های WPF در محیط Windows Form استفاده کنم؟ و همونجا اگه نیازی بود ویرایش و اصلاحش کنم.

NasimBamdad
پنج شنبه 07 فروردین 1399, 12:09 عصر
خوب دوست عزیز چه کاریه ، شما از اول WPF کار کن ، کد نویسی که همون WinForms هست ، فقط یه UI ست که با WPF بزنی که خیلی بهتره

md3848
پنج شنبه 07 فروردین 1399, 12:15 عصر
والا با WPF کار نکردم تاحالا - اصلاعاتی هم ندارم ازش - فقط میدونم گرافیکی تره تا نسبت به WinForms :لبخند:
الان من برنامه هایی که تو WinForms نوشتم رو میتونم به محیط wpf منتقل کنم و ادامش رو اونجا برم؟ WPF تمام کامپوننت ها و امکانات WinForms رو داره دیگه؟ :متفکر: اگه اینطوره پس چرا تا حالا WinForms منقرض نشده؟ :متفکر:

barnamenevisjavan
پنج شنبه 07 فروردین 1399, 12:55 عصر
والا با WPF کار نکردم تاحالا - اصلاعاتی هم ندارم ازش - فقط میدونم گرافیکی تره تا نسبت به WinForms :لبخند:
الان من برنامه هایی که تو WinForms نوشتم رو میتونم به محیط wpf منتقل کنم و ادامش رو اونجا برم؟ WPF تمام کامپوننت ها و امکانات WinForms رو داره دیگه؟ :متفکر: اگه اینطوره پس چرا تا حالا WinForms منقرض نشده؟ :متفکر:
winform که خیلی وقته منقرض شده دیگه کم مونده خود wpf هم منقرض بشه (جایگزینش UWP)
کدهای سی شارپش تقریبا میشه گفت 90 درصد مثل هم هستن در مواردی شما باید کد سی شارپ رو تغییر بدید که کار سختی نیست و اکثرا تغییرات جزئی نیازه ولی رابط کاربری رو باید از اول طراحی کنید چون ویندوزفرم رندر گرافیکی gdi داره ولی wpf رندر directx
بله تمام کنترل ها هستن و عملکرد خیلی بهتری دارن از لحاظ سرعت و پایداری یکسری کنترل اضافه هم داره

md3848
پنج شنبه 07 فروردین 1399, 12:59 عصر
winform که خیلی وقته منقرض شده دیگه کم مونده خود wpf هم منقرض بشه (جایگزینش UWP)
ای بابا، داستان داره جنایی میشه که :متفکر:
خب حالا کدومش بهتره؟ با کدوم کار کنیم؟ خودت با چی کار میکنی؟

NasimBamdad
پنج شنبه 07 فروردین 1399, 13:50 عصر
قسمت کد نویسی ات یکیه ، ولی عملا طراحی فرمت دیگه به درد نمیخوره و باید با XAML انجامش بدی

تکنولوژی ها منقرض نمیشن ، مگه میشه با هر زبان برنامه نویسی جدید ، قبلیه رو تخته کرد

the king
پنج شنبه 07 فروردین 1399, 15:30 عصر
سلام - تو محیط Windows Form نمیشه کامپوننت های زیبایی طراحی کرد، دست آدم خیلی بستس ( حداقل تو چند تا کامپوننت کوچولو که من طراحی کردم متوجه این موضوع شدم، نمیدونم از عدم آگاهی من از قدرت Windows Form در طراحی کامپوننت و امکاناتش هستش یا واقعا در این زمینه ضعیف هستش )
اما یه بررسی که کردم مث این که میشه تو WPF کامپوننت های زیبایی طراحی کرد، خواستیم ببینم میشه از کامپوننت های WPF در محیط Windows Form استفاده کنم؟ و همونجا اگه نیازی بود ویرایش و اصلاحش کنم.
نه قدرت و ضعف در خود پلتفرم ها نیست، به استعداد و مهارت طراح بستگی داره. در هر پلتفرمی هم طراحی بد میتونه انجام بشه و هم چشم نواز.
همونطور که با مداد HB و مداد رنگی و رنگ روغن و آبرنگ در سطوح مختلف اثر هنری می بینید، اونها فقط ابزار هستند، قدرت و مهارت در طراح ئه که تاثیر داره.
اگه با قلمو و رنگ روغن شاهکار هنری خلق میشه معنی اش این نیست که منم اون قلمو رو بگیرم دستم معجزه رخ میده و میتونم همونطور طراحی کنم.
این ابزار نیست که به من قدرت میده، ذوق هنری و مهارت خودم تعیین کننده است، که با ابزاری که بهش مسلط هستم طراحی خوب یا بدی بکنم.

می توانید در Toolbox از گروه WPF Interoperability کنترل Element Host رو انتخاب کنید و روی فرم قرار بدید و کنترل WPF تون رو بندازید و Drag کنید داخل این Element Host.
Element Host برعکس WindowsFormsHost در WPF عمل می کنه، این امکان رو میدن که کنترلی از اون یکی پلتفرم در محیط این یکی پلتفرم قرار بگیره.

barnamenevisjavan
پنج شنبه 07 فروردین 1399, 16:38 عصر
ای بابا، داستان داره جنایی میشه که :متفکر:
خب حالا کدومش بهتره؟ با کدوم کار کنیم؟ خودت با چی کار میکنی؟
من خودم چند ساله که دارم با WPF کار میکنم، با UWP برنامه شما فقط روی ویندوز 10 اجرا میشه (بدلیل اینکه ماکروسافت داره کل اکوسیستمش رو یکی میکنه)
قطعا اگه نسخه ویندوز مهم نیست UWP خیلی بهتره جدیدترین ویژگی ها و بهبود هارو دریافت میکنه و هر روز هم اپدیت میشه (در حال حاظر هم کتابخونه winui-3 داره براش توسعه داده میشه که شامل کلی کنترل و انیمیشن جدید هستش)
اما اگه براتون مهم هست که برنامه روی ویندوز 7 هم اجرا بشه قطعا WPF بهترین گزینه هستش به چند دلیل:
رابط کاربری انعطاف پذیر و بهینه
استفاده از معماری های مختلف مثل MVVM
سرعت و پایداری بیشتر نسبت به ویندوز فرم (برای مثال میتونید در ویندوز فرم یک لیست باکس روی فرم بزارید و این لیست باکس رو با 10 هزار ایتم بصورت رندوم به کمک حلقه پر کنید و همین کار رو توی wpf انجام بدید اونوقت میبینید که wpf خیلی سریعتر این کار رو انجام میده)
اسون تر شدن برخی کارها مثل چند زبانگی، استایل دهی و...
حل مشکل نسبت کنترل ها نسبت به صفحه که خیلی ها این مشکل رو با ویندوز فرم دارن (اگه صفحه نمایش بزرگ بشه ممکنه کنترل های شما کوچیک بمونن ولی همچین مشکلی در wpf نیستش)
این یه نمونه ساده با wpf هستش هر چه قدر سریعتر بیاید روی wpf بیشتر به نفع خودتون هستش چون برنامه نویسی براتون ساده تر و لذت بخش تر میشه و دیگه مشکلات ویندوزفرم رو نداره
https://barnamenevis.org/attachment.php?attachmentid=151449&d=1583937640

barnamenevisjavan
پنج شنبه 07 فروردین 1399, 16:47 عصر
نه قدرت و ضعف در خود پلتفرم ها نیست، به استعداد و مهارت طراح بستگی داره. در هر پلتفرمی هم طراحی بد میتونه انجام بشه و هم چشم نواز.
همونطور که با مداد HB و مداد رنگی و رنگ روغن و آبرنگ در سطوح مختلف اثر هنری می بینید، اونها فقط ابزار هستند، قدرت و مهارت در طراح ئه که تاثیر داره.
اگه با قلمو و رنگ روغن شاهکار هنری خلق میشه معنی اش این نیست که منم اون قلمو رو بگیرم دستم معجزه رخ میده و میتونم همونطور طراحی کنم.
این ابزار نیست که به من قدرت میده، ذوق هنری و مهارت خودم تعیین کننده است، که با ابزاری که بهش مسلط هستم طراحی خوب یا بدی بکنم.

می توانید در Toolbox از گروه WPF Interoperability کنترل Element Host رو انتخاب کنید و روی فرم قرار بدید و کنترل WPF تون رو بندازید و Drag کنید داخل این Element Host.
Element Host برعکس WindowsFormsHost در WPF عمل می کنه، این امکان رو میدن که کنترلی از اون یکی پلتفرم در محیط این یکی پلتفرم قرار بگیره.
چرا اتفاقا قدرت و ضعف در خود پلتفرم ها هستش بنظرتون رندر گرافیکی که تو ویندوز فرم استفاده میشه GDI+ با رندر گرافیکی که توی WPF استفاده میشه DirectX یکیه؟
قطعا نظر شما در مورد داشتن مهارت و استعداد و سلیقه در طراحی رابط کاربری درسته اما خود فریمورک هم مهمه شما توی ویندوز فرم بدلیل یکپارچه بودن رابط کاربری و کدها نیاز به تخصص بیشتری دارید تا بتونید کنترل هارو گسترش بدید اما همین کار توی wpf خیلی ساده هستش و دلیلش هم اینه که رندر گرافیکی به گونه ای هستش که این اجازه رو میده شما به سادگی بتونید تغییرات رو اعمال کنید

taghvajou
پنج شنبه 07 فروردین 1399, 18:32 عصر
سلام
اگه نخوام وارد بحث و حاشیه نشم و صرفا پاسخ به سوال دوستمون باشه:

بله، شما میتونین تو دبلیو پی اف کنترل مورد نظر رو بسازین و تو ویندوز فرم هاست کنین.

یاداوری: ویژگی ها و توابع و رویدادهایی که کنترل رو داره به صورت عمومی تعریف کنین که در فرم وقتی استفاده میکنین بهشون دسترسی داشته باشین.

the king
جمعه 08 فروردین 1399, 03:28 صبح
چرا اتفاقا قدرت و ضعف در خود پلتفرم ها هستش بنظرتون رندر گرافیکی که تو ویندوز فرم استفاده میشه GDI+ با رندر گرافیکی که توی WPF استفاده میشه DirectX یکیه؟

نه، طبعا +GDI با DirectX تفاوت داره، اما چون DirectX قابلیت های بیشتری داره یا سریعتره یا کیفیت رسم بالاتری داره، نمیشه نتیجه گرفت که پس WPF الزاما در همه موارد نسبت به Windows Forms قوی تره، فرضا نمیشه گفت چون از DirectX استفاده کرده پس همیشه رسم سریعتری داره. باید در نظر بگیریم که WPF قابلیت های DirectX رو با اینترفیس DirectX ارائه نمی کنه، نمی توانیم قابلیت های برنامه ای که مستقیما از DirectX استفاده می کنه رو با برنامه تحت WPF مقایسه کنیم.
هر پلتفرمی در بعضی کاربرد ها و برای انجام یکسری عملیات کارکرد بهتری داره، مستقل از اینکه معماری داخلی اش چیه. یک نمونه برای مقایسه ضمیمه کردم تا منظورم رو بهتر برسونم. قصد ندارم توانایی های Windows Forms و +GDI رو با یک مثال محک بزنم، اتفاقا نظرم اینه که داریم قاشق و چنگال رو با هم مقایسه می کنیم، هر کدوم برای مواردی گزینه بهتری هستند، ولی هیچکدوم ابزار قوی یا ضعیفی نیستند.

151507

151508

در ضمن درسته که +GDI واسط گرافیکی پیشفرض Windows Forms ئه ولی در انتخاب که صرفا محدود به +GDI نیستیم، DirectX خودش یکی از گزینه هایی است که برای Windows Forms قابل استفاده است.



قطعا نظر شما در مورد داشتن مهارت و استعداد و سلیقه در طراحی رابط کاربری درسته اما خود فریمورک هم مهمه شما توی ویندوز فرم بدلیل یکپارچه بودن رابط کاربری و کدها نیاز به تخصص بیشتری دارید تا بتونید کنترل هارو گسترش بدید اما همین کار توی wpf خیلی ساده هستش و دلیلش هم اینه که رندر گرافیکی به گونه ای هستش که این اجازه رو میده شما به سادگی بتونید تغییرات رو اعمال کنید
در مورد ساده تر بودن تغییر ظاهر کنترل در WPF با شما موافق هستم، ولی در مورد خیلی ساده بودن طراحی کنترل در WPF نه، به نظرم نمیشه بخش کد نویسی در کلاس رو در نظر نگرفت که ساده تر از طراحی در Windows Forms نیست. فرضا اگر بخواهیم به شخصی نحوه تغییر رنگ در Style یک کنترل اختصاصی مثل WPF MultiRangeSlider Control (https://www.codeproject.com/Articles/626132/WPF-MultiRangeSlider-Control) رو آموزش بدیم میشه گفت خیلی ساده است، ولی این چیزی که آموزش دادیم صرفا ظاهر ئه، کارکرد نیست، رنگ آمیزی است، آموزش طراحی و توسعه یک کنترل اختصاصی نبود، وقتی به نحوه طراحی همچین کنترلی می پردازیم و درگیر آموزش کد نویسی اش می شویم دیگه یک آموزش در سطح خیلی ساده نیست. در Windows Forms هم در همین سطح ئه، ساده تر یا دشوارتر از این نیست.

md3848
پنج شنبه 14 فروردین 1399, 10:01 صبح
با توجه به پست های دوستان، تحریک شدیم که بریم سمت UWP و بیخیال WindowsForm بشم، نظرتون چیه؟ :لبخند: الان تنها نگرانیم اینه که برنامه های uwp فقط تو ویندوز 10 اجرا میشن و تو ویندوز 7 نه. :گریه:

the king
پنج شنبه 14 فروردین 1399, 19:02 عصر
با توجه به پست های دوستان، تحریک شدیم که بریم سمت UWP و بیخیال WindowsForm بشم، نظرتون چیه؟ :لبخند: الان تنها نگرانیم اینه که برنامه های uwp فقط تو ویندوز 10 اجرا میشن و تو ویندوز 7 نه. :گریه:
دیگه گریه نداره :لبخند: هر انتخابی که دوست داشتید بکنید، ولی فکر نکنید دارید خونه برای 50 سال زندگی میسازید، همیشه مستاجر اید، ممکنه 6 ماه دیگه کوچ کنید.
هر زمانی ممکنه احساس کنید که وقت کوچ کردن رسیده، از مهاجرت به یک تکنولوژی دیگه نترسید.

سرنوشت FoxPro و Visual Basic 6 و #Visual J و Silverlight و ASP و ... دیر یا زود شامل هر نرم افزار و تکنولوژی و پلتفرمی میشه.
نمیدونم از دید شرایط بازار کار به قضیه نگاه می کنید یا صرفا نگران منسوخ و بلااستفاده شدن دانشی هستید که وقت صرف یادگیری اش می کنید.
یک زمانی هست که می خواهید برای شخص فلان در شرکت بهمان کار کنید که کلا گرایش شون روی پلتفرم خاصی است، و طبعا مشتری شما تعیین می کنه که روی چه تکنولوژی ای متمرکز بشوید، چه قدیمی و منسوخ باشه و چه نباشه.
اما اگر تصمیم گیرنده خودتون هستید و نگران آینده اش هستید، به نظر من در مورد آینده پلتفرم های نرم افزاری نباید خیلی نگاه دور اندیشی داشت چون دائم در حال تحول ئه.
شما هر انتخابی که بکنید به شرطی که بهش مسلط باشید برای چند سال ازش استفاده مفید می کنید و بعدش باید آماده کوچ به مورد دیگری باشید.
همیشه هم بخشی از تجربه و دانش قبلی تون در تکنولوژی های جدید مفید ئه، الزاما همه آنچه که یاد گرفته بودید بلا استفاده نخواهد ماند.

md3848
پنج شنبه 14 فروردین 1399, 19:15 عصر
دیگه گریه نداره :لبخند: هر انتخابی که دوست داشتید بکنید، ولی فکر نکنید دارید خونه برای 50 سال زندگی میسازید، همیشه مستاجر اید، ممکنه 6 ماه دیگه کوچ کنید.
هر زمانی ممکنه احساس کنید که وقت کوچ کردن رسیده، از مهاجرت به یک تکنولوژی دیگه نترسید.
آخه اگه میشد این برنامه ها تو تمام نسخه های ویندوز اجرا بشه، همین الان با کله میرفتم سمتش، ولی خب همه که ویندوز 10 ندارن که :متفکر: مورد بعد این که به جامعه کاربریش هم باید توجه کرد، من به مشکل خوردم باید سرچ کنم، یا سوال کنم! افراد کمی با این UWP کار کنن به ظرر منه :لبخند:
خو اونطوری باشه میرم سمت QT - درست میگم؟