PDA

View Full Version : یک کار جامع درباره یک برنامه User Friendly



vahidiran
جمعه 04 آبان 1386, 14:45 عصر
یکی از راه های کاربر پسند برای برنامه ها اللخصوص برنامه های ورود داده این است که در یک فرم تکست باکس هایی که دارای فوکس هستند داری رنگ پس زمینه زرد رنگ باشد . یک را برای پیاده سازی این سولوشن این است که برای یک یک تکست باکس ها در روال های مخصوص بخودشون مانند gotfocuse کد نویسی کرد بدیهی است که یک کد تکراری تقریبا برای همه تکست باکس ها باید نوشت آیا راهی وجود داره که بتوان با یک دیگر ین کار رو انجام داد ؟ در ضمن اگر بخواهیم همین برنامه رو تعمیم دهیم تا هنگام Enter کردن تکست باکس بعدی فوکس را بگیرد باید چکار کنیم ؟

sinpin
جمعه 04 آبان 1386, 16:30 عصر
یکی از راه های کاربر پسند برای برنامه ها اللخصوص برنامه های ورود داده این است که در یک فرم تکست باکس هایی که دارای فوکس هستند داری رنگ پس زمینه زرد رنگ باشد . یک را برای پیاده سازی این سولوشن این است که برای یک یک تکست باکس ها در روال های مخصوص بخودشون مانند gotfocuse کد نویسی کرد بدیهی است که یک کد تکراری تقریبا برای همه تکست باکس ها باید نوشت آیا راهی وجود داره که بتوان با یک دیگر ین کار رو انجام داد ؟ در ضمن اگر بخواهیم همین برنامه رو تعمیم دهیم تا هنگام Enter کردن تکست باکس بعدی فوکس را بگیرد باید چکار کنیم ؟

خب شما میتونید یک متود بنویسید و اون رو به event های همه ی کنترلهایی که لازم دارید منتسب کنید.
شاید راه بهتر این باشه که یک کنترل مشتق شده (derived control) واسه منظورتون بسازید و بعد یکسری از رفتارهای اون رو تحریف (override) کنید.

__siavash__
جمعه 04 آبان 1386, 18:31 عصر
اینو نگاه کن ببین منظورت اینه !!!؟

amirsajjadi
جمعه 04 آبان 1386, 18:57 عصر
با سلام
ببین این برنامه بدردت میخوره .

مهدی نان شکری
جمعه 04 آبان 1386, 19:48 عصر
با سلام.
این روش رو من تو برنامه هام استفاده می کنم.
امیدوارم به کارتون بیاد.

alinaghiha
شنبه 05 آبان 1386, 00:24 صبح
ممنون
کدی که به اسم WindowsApplication1 آقای سجادی داده بودن کد جامعی بود
frmbase برا چیه
میشه کدتون رو توضیح بدبد لطفا

مهدی نان شکری
شنبه 05 آبان 1386, 11:19 صبح
در این پروژه باید تمامی فرم هاتون رو از FrmBase ارث ببرید. و دیگه نیازی به کد نویسی در فرم هاتون ندارید. در ضمن برنامه آخرین محل و سایز فرمتون رو ذخیره کرده و در نمایش بعد از آن استفاده می کنه. در ضمن کلیه فرم ها با ESC بسته می شوند.

alinaghiha
شنبه 05 آبان 1386, 22:05 عصر
آقا کاش بیشتر توضیح می دادی ارث بری چطوره من چطوری میتونم خصوصیات یه فرم رو به ارث ببرم
استاد در مورد فرم پدر و فرزند هم توضیح بدید چون من فرمام زیادن گمشون می کنم

saeed_rezaei
شنبه 05 آبان 1386, 22:50 عصر
سلام.
برای این مشکل، من قبلا یه فکرایی کردم بودم. یه کنترل نوشتم که از کنترل textbox به ارث گرفته شده و یه سری خصوصیات بهش اضافه شده. از جلمه:
activecolor: مشخص کننده رنگی است که هنگام گرفتن فوکاس باید به تکست باکس داده بشه.
deactivecolor: رنگی است که هنگام lostfocus به کنترل داده می شه.
nextcolntrol: مطمئنن تا به حال شده که بخواید با زدن اینتر، بین جعبه متنها حرکت کنید. اگه این خصوصیت رو به نام کنترل بعدی مقدار دهی کنید، بعد از زدن اینتر، فوکاس به اون کنترل می ره. در صورتی که چیزی انتخاب نشه، به صورت پیش فرض حرکت می کنه (طبق پیمایش tab)
masktype: می تونید ورودی رو محدود کنید. شامل چهار حالت هست که عبارتند از :
number : فقط اجازه ورود اعداد رو می ده.
date: رشته ورودی رو با فرمت تاریخ قبول می کنه. کافیه کاربر، تاریخ رو بدون اعشار وارد کنه مثلا 860525، خود تکس باکس اتوماتیک به صورت 86/05/25 درش می یاره. همچنین اگه تاریخ نامعتبر وارد بشه ، اون رو نمی پذیره.
sqlmask: در رشته هایی که به عنوان پارامتر qury اس کیو ال هست، بعضی کارکترها مثل ' می تونن باعث بروز خطا بشن. با انتخاب این گزینه، تکس باکس اجازه ورود این کاراکترها رو بهتون نمی ده.
nomask: رشته رو بدون محدودیت قبول می کنه
همچنین یه خاصیت داره با عنوان showtodaytext که در صورت true بودن، به صورت پیش فرض، تاریخ روز رو به عنوان مقدار پیش فرض قرار می ده. این تاریخ به صورت شمسی هست.

شما می تونید ورژن دومش رو از لینک زیر بگیرید.
http://barnamenevis.org/forum/showthread.php?p=355782#post355782

amirsajjadi
شنبه 05 آبان 1386, 22:50 عصر
برای ارس بری از یک کلاس باید یک کلاس درست کنی و به این صورت عمل کنی
Public Class Class_New inherits NameClass

sinpin
یک شنبه 06 آبان 1386, 07:37 صبح
سلام.
برای این مشکل، من قبلا یه فکرایی کردم بودم. یه کنترل نوشتم که از کنترل textbox به ارث گرفته شده و یه سری خصوصیات بهش اضافه شده.

همونطور که قبلا تو همین پست گفته بودم اینکار بنظر منطقی و سرراست میاد.


شاید راه بهتر این باشه که یک کنترل مشتق شده (derived control) واسه منظورتون بسازید و بعد یکسری از رفتارهای اون رو تحریف (override) کنید.

vahidiran
یک شنبه 06 آبان 1386, 09:50 صبح
با سلام
ببین این برنامه بدردت میخوره .

این درسته ولی کد نویسی داره می تونی تصور کنی با 50 تا تکست باکس باید چه اسپاگتی نوشت ؟:لبخند:

vahidiran
یک شنبه 06 آبان 1386, 10:07 صبح
سلام.
برای این مشکل، من قبلا یه فکرایی کردم بودم. یه کنترل نوشتم که از کنترل textbox به ارث گرفته شده و یه سری خصوصیات بهش اضافه شده. از جلمه:
activecolor: مشخص کننده رنگی است که هنگام گرفتن فوکاس باید به تکست باکس داده بشه.
deactivecolor: رنگی است که هنگام lostfocus به کنترل داده می شه.
nextcolntrol: مطمئنن تا به حال شده که بخواید با زدن اینتر، بین جعبه متنها حرکت کنید. اگه این خصوصیت رو به نام کنترل بعدی مقدار دهی کنید، بعد از زدن اینتر، فوکاس به اون کنترل می ره. در صورتی که چیزی انتخاب نشه، به صورت پیش فرض حرکت می کنه (طبق پیمایش tab)
masktype: می تونید ورودی رو محدود کنید. شامل چهار حالت هست که عبارتند از :
number : فقط اجازه ورود اعداد رو می ده.
date: رشته ورودی رو با فرمت تاریخ قبول می کنه. کافیه کاربر، تاریخ رو بدون اعشار وارد کنه مثلا 860525، خود تکس باکس اتوماتیک به صورت 86/05/25 درش می یاره. همچنین اگه تاریخ نامعتبر وارد بشه ، اون رو نمی پذیره.
sqlmask: در رشته هایی که به عنوان پارامتر qury اس کیو ال هست، بعضی کارکترها مثل ' می تونن باعث بروز خطا بشن. با انتخاب این گزینه، تکس باکس اجازه ورود این کاراکترها رو بهتون نمی ده.



nomask: رشته رو بدون محدودیت قبول می کنه




من
شما می تونید ورژن دومش رو از لینک زیر بگیرید.
http://barnamenevis.org/forum/showthread.php?p=355782#post355782




اینو دانلود کردم ولی بازش نکردم به نظر می رسه کارش 20 باشه فقط سوال من دارم می تونم از از اون توی پروژه ام استفاده کنم یعنی قابل اعتماد هستش خودتون استفاده کردید توی پروژه هاتون ؟

saeed_rezaei
یک شنبه 06 آبان 1386, 21:34 عصر
سلام.
من این کنترل رو برای خودم نوشتم. توی تمام برنامه هام ازش استفاده می کنم. برای اینکه دوستان قبول کنند که کد مخربی توش نیست همراه با سورس گذاشتم.
این یه usercontrol هست. توی شاخه debug یه فایل dll ایجاد می کنه.
توی محیط برنامتون، روی toolbox راست کلیک کنید و گزینه choose item رو کلیک کرده و فایل dll مربوطه رو اضافه کنید. از این به بعد توی برنامه تون می تونید از این استفاده کنید.
سورس هم هستش. می تونید استفاده کنید. کد شاقی واسش ننوشتم. همانطور که دوستان هم گفتن، من از وراثت استفاده کردم. چند تا خصوصیت جدید بهش اضافه کردم. همین.
ورژن سوم رو هم قرار دادم. فایل readme همراش ارسال شده که می تونید اطلاعات کامل رو در مورد خصوصیات اضافه شده پیدا کنید.

vahidiran
دوشنبه 07 آبان 1386, 18:27 عصر
خیلی با حال کار می کنه
حالا برای رفتن به text بعدی راه حلی دارید برنامه نمی خوام یعنی الگوریتم کار رو می خوام ؟

saeed_rezaei
دوشنبه 07 آبان 1386, 22:40 عصر
خیلی با حال کار می کنه
حالا برای رفتن به text بعدی راه حلی دارید برنامه نمی خوام یعنی الگوریتم کار رو می خوام ؟
سلام.
خوشحالم که نظرتون مثبت بوده. اما مطمئنن انتقاداتی هم بهش وارده. ممنون می شم، نقطه نظراتتون رو اعلام کنید، تا بتونم بهترش کنم.
من توی برنامه کنترل بالا قابلیت انتقال به کنترل بعدی رو براش گذاشتم.
اما الگوریتم کار به این صورت هست، که اگه کنترل بعدی رو خودتون مشخص کنید، من توی متد keypress تعریف کردم که در صورت زدن کلید اینتر، focus به کنترل مشخص شده بره. اینجوری:
nextcontrol.focuse
و اگه چیزی مشخص نشه، با دو الگوریتم به کنترل بعدی می ره.
با استفاده از tab order ، اندیکس شماره کنترل بعدی رو به دست می یاره و دوباره به روش بالا انتقال می ده .
یا اینکه عمل فشرده شدن کلید tab رو شبیه سازی می کنه.

Sub Zero
سه شنبه 08 آبان 1386, 13:30 عصر
بحث خوبی شروع شده با اجازه دوستان من هم نظرم رو اعلام میکنم.
ساخت یه ماشین حساب رو در نظر بگیرید . برای پیاده سازیش بایستی برای هر کدوم از کلیدهای 0 تا 9 و همچنین کلیدهای عملگر (+-*/) و غیره کدهای جداگانه ای بنویسیم . اما یه راه بهتر و بهینه تر اینه که از event یه کنترل برای Handle کردن مجموعه ای از کنترلهای مشابه استفاده کنیم . دقیقا کاری که آقا سیاوش انجام داده
با اجازه اقای اسجدی یه سری تغییرات در برنامش که در پست شماره 4 گذاشته بود دادم .برنامه رو ببینید و با برنامه قبلی مقایسه کنید تا موضوع بهتر مشخص بشه .
برنامه جناب NanShekari هم در نوع خودش جالبه .
در ضمن از اقای رضایی هم که صادقانه سورس هاشون رو در اختیار دیگران قرار میدن تشکر میکنم.