PDA

View Full Version : حرفه ای: Material Design TestBox برای WinForms



NasimBamdad
شنبه 05 خرداد 1397, 16:40 عصر
سلام و خسته نباشید .

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

مشکلم اینه که نمی خوام از لیبل برای TextBox ها استفاده کنم . از قابلیت NullText استفاده کردم و وقتی که چیزی داخلش نوشته نشده از این قابلیت به جای لیبل استفاده می کنم


اما مشکل اینجاست که می خوام مثل Material Design که در WPF هست ، عنوانNullText رو به صورت انیمیشن یا هر حالت دیگه بره بالای Textbox . به نظر شما این کار توی WinForms عملیه ؟

danialafshari
شنبه 05 خرداد 1397, 19:01 عصر
با سلام
بله همه چیز عملیه
ببینید همون Telerik که شما میگید یک تیم برنامه نویسی هستند که با مفاهیم شی گرائی و همین Visual Studio کامپوننت طراحی میکنند و شما این رو میتونید در نسخه Open Source کامپوننت devExpress مشاهده کنید و اگر شما شی گرائی و برنامه نویسیتون خوب باشه میتونید UserControl های جالبی بسازید
بعدشم من چون با telerik کار نمیکنم کنترل شما برایم ملموس نیست اگر توی ساختش مشکل دارید و راهنمایی بیشتر میخاین فکر میکنم بهتره عکس از کنترل به همراه نام دقیق همراه namespace و چون انیمیشن داره GIF قرار بدید
برای راهنمایی شما باید یک User Control تعریف کنید و شخصی سازیش کنید
موفق باشید

NasimBamdad
شنبه 05 خرداد 1397, 19:33 عصر
ممنون بابت پاسخ

ببینید این TextBox تلکریک از این اسم استفاده می کنه .


Telerik.WinControls.UI.RadTextBox


148267148268

اینا کنترل های مربوط به تلریک هستند . مشکلی که دارم اینه اونجا که Null Text گذاشتم " نام خانوادگی " . ولی که دارم تایپ می کنم داخلش امکان داره یادم بره این فیلد چی بود ؟

برای همین می خوام عبارت نام خانوادگی مثل طراحی متریال بره بالای تکست باکس .

یه عکس ضمیمه کردم امیدوارم مشخص باشه و مفهوم

براش حاضرم هزینه بکنم

danialafshari
شنبه 05 خرداد 1397, 20:24 عصر
با سلام
بله این مشکل رو هم داره و در تمام جاهایی که این نوع طراحی رو دیدم علاوه بر Watermark از Label هم استفاده میکنند
برای حل مشکلتون فکر کنم Tooltip به کارتون بیاد و در Tooltip موضوع Textbox رو مشخص کنید که اگر یادش رفت کاربر وفتی Mouse رو برد روش به صورت Tooltip مشخص بشه که مربوط به چی هست
میتونید از این تاپیک هم کمک بگیرید
http://barnamenevis.org/showthread.php?548825-%D8%AE%D8%B7%D8%A7-%D8%AF%D8%B1-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A7%D8%B2-%DB%8C%DA%A9-%DA%A9%D9%84%D8%A7%D8%B3
موفق باشید

NasimBamdad
شنبه 05 خرداد 1397, 21:34 عصر
با سلام
بله این مشکل رو هم داره و در تمام جاهایی که این نوع طراحی رو دیدم علاوه بر Watermark از Label هم استفاده میکنند
برای حل مشکلتون فکر کنم Tooltip به کارتون بیاد و در Tooltip موضوع Textbox رو مشخص کنید که اگر یادش رفت کاربر وفتی Mouse رو برد روش به صورت Tooltip مشخص بشه که مربوط به چی هست
میتونید از این تاپیک هم کمک بگیرید
http://barnamenevis.org/showthread.php?548825-%D8%AE%D8%B7%D8%A7-%D8%AF%D8%B1-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A7%D8%B2-%DB%8C%DA%A9-%DA%A9%D9%84%D8%A7%D8%B3
موفق باشید

tooltip راه حل خوبیه ، اما چون کنترل ها زیاد هستند به نظر شما چه طوری میتونم این مشکل رو بدون ایجاد کردن tooltip های زیاد حل کنم ؟

مثلا یه حلقه for داشته باشم که بیاد مقدار null text هر کنترل رو بگیره و با موس که بروی کنترل میشه یه ToolTip نمایش بده

میشه کمک کنید ؟

ژیار رحیمی
شنبه 05 خرداد 1397, 22:08 عصر
میتونی بصورت UserControl که شامل دو کنترل RadTextBox و یک Lable در بالای RadTextBox قرار گرفته، آنچه انتظار داری پیاده سازی کنی.در صورتی TextBox دارای مقداری null داشت Label مخفی شود و وقتی دارای مقداری بود مقدار WaterMark در Label نمایش داده شود.

danialafshari
شنبه 05 خرداد 1397, 22:24 عصر
tooltip راه حل خوبیه ، اما چون کنترل ها زیاد هستند به نظر شما چه طوری میتونم این مشکل رو بدون ایجاد کردن tooltip های زیاد حل کنم ؟

مثلا یه حلقه for داشته باشم که بیاد مقدار null text هر کنترل رو بگیره و با موس که بروی کنترل میشه یه ToolTip نمایش بده

میشه کمک کنید ؟
با سلام
اگر خودم باشم همونطور که آقای رحیمی گفت یک کتابخانه یا UserControl تعریف میکردم و یک Property اضافه میکردم که Tooltip رو اولاً Enable یا True کنه و سپس text ش رو برابر Text Watermark قرار میدادم و توی پروژم از اون یوزرکنترل استفاده می کردم
برای مثال یک نمونه:

private void textBox_MouseEnter(object sender, EventArgs e)
{
TextBox TB = (TextBox)sender;
int VisibleTime = 1000; //in milliseconds


ToolTip tt = new ToolTip();
tt.Show(TB.Text, TB, 0, 0, VisibleTime);
}

باید رویداد MouseEnter تمام TextBox هاتون رو برابر textBox_MouseEnter قرار بدید
* چون من کامپوننت رو ندارم به جاش از خاصیت Text برای Tooltip استفاده کردم

البته شما باید به جای TextBox از Telerik.WinControls.UI.RadTextBox استفاده کنید
موفق باشید

NasimBamdad
شنبه 05 خرداد 1397, 22:33 عصر
میتونی بصورت UserControl که شامل دو کنترل RadTextBox و یک Lable در بالای RadTextBox قرار گرفته، آنچه انتظار داری پیاده سازی کنی.در صورتی TextBox دارای مقداری null داشت Label مخفی شود و وقتی دارای مقداری بود مقدار WaterMark در Label نمایش داده شود.

اگه بخوام در Run Time این کار بکنم و نخوام دوباره طراحی فرم دست بزنم چه طور؟

ژیار رحیمی
شنبه 05 خرداد 1397, 23:46 عصر
تا اونجایی که میدونم امکان پذیر نیست .اگرم امکانش باشه اذیتش بیشتر از جایگذین کردن کنترلها با UserControl هست.

NasimBamdad
شنبه 05 خرداد 1397, 23:49 عصر
ممنون از همه . متوجه شدم که این کنترل از قابلیت toolTip هم استفاده می کنه . یعنی داخل متد هاش toolTip داره.


textBox.TextBoxElement.ToolTipText = textBox.NullText;


ولی در کل چیز های زیادی یاد گرفتم از شما عزیزان

رامین مرادی
یک شنبه 06 خرداد 1397, 09:17 صبح
سلام و خسته نباشید .

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

مشکلم اینه که نمی خوام از لیبل برای TextBox ها استفاده کنم . از قابلیت NullText استفاده کردم و وقتی که چیزی داخلش نوشته نشده از این قابلیت به جای لیبل استفاده می کنم


اما مشکل اینجاست که می خوام مثل Material Design که در WPF هست ، عنوانNullText رو به صورت انیمیشن یا هر حالت دیگه بره بالای Textbox . به نظر شما این کار توی WinForms عملیه ؟


خداییش کارمو ا انداختی:تشویق:. خیلی وقت بود بخاطر همین واترمارک مجبور میشدم تکست باکس دات نت بار رو استفاده کنم. اصن این خاصیت به چشم نیومده بود:لبخند: