PDA

نسخه کامل مشاهده نسخه کامل : سوال در خوصوص کنترل رویدادهای کیبورد در VB.Net



shadmehrshadow1
17-10-2010, 16:27
من 9 تا دکمه رو در یه سطر کنار هم چیدم . دوباره 9 تا دکمه ی دیگه زیر این دکمه ها توی یه سطر چیدم . حالا میخوام وقتی فوکوس روی یکی
از دکمه هاست وقتی دکمه سمت راست کیبور که همون دکمه ای هست که keycode اون Right هست رو فشار دادم فوکوس بره روی دکمه ی
سمت راستی همون دکمه و وقتی کلید سمت پایین رو فشار دادم فوکوس بره روی دکمه زیرین اون دکمه .

pezhmax
17-10-2010, 19:15
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

رو الگوریتمش که مشکل نداری؟

shadmehrshadow1
18-10-2010, 11:08
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

رو الگوریتمش که مشکل نداری؟

مثله اينكه شما اصلا متوجه منظورم نشديد من ميخوام وقتي كه دكمه سمت راست صفحه كليد با همون توضيحاتي كه دادم رو فشار دادم فوكوس بره روي دكمه سمته راستش و وقتي دكمه سمت پايين رو فشار دادم فوكوس بره روي دكمه پايين

pezhmax
18-10-2010, 11:26
خوب دقیق تر بگو مشکلت کجاست. راستش من تو مطالبی که نوشتی هیچ پیچیدگی خاصی ندیدم.
شاید من هنوز متوجه مشکلت نشدم وگرنه تغییر فوکوس با همین تابعی هست که گفتم.

misoft
18-10-2010, 18:34
خوب دقیق تر بگو مشکلت کجاست. راستش من تو مطالبی که نوشتی هیچ پیچیدگی خاصی ندیدم.
شاید من هنوز متوجه مشکلت نشدم وگرنه تغییر فوکوس با همین تابعی هست که گفتم.

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

عــــلی
19-10-2010, 00:27
سلام دوستان خسته نباشید:11:.

روشی که براتون میگم خیلی ساده و راحته ولی شما میتونید از بسیاری از روشها مثل آرایه ها و لیست ها استفاده کنید.
این روش از طریق نام کنترل ها خواستتونو برآورده میکنه.شاید بعدها بدردتون بخوره که کنترل هاتونو درست نام گذاری کنید.


به دو جدول های زیر دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدجدول اول کنترل هایی هستن که رو فرم شما قرار دارند...
و جدول دوم شماره هایی هستن که ما لازم داریم و ته هر کنترل ذکر شده اند.
اول یه مثال میزنم:
فرض کنید فکوس ما رو کنترل textbox6 است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدشما اگه بخواهید به راست برید باید به 6 یکی اضافه کنید که بشه 7.
اگه بخواهید به چپ برید باید از 6 یکی کم کنید = 5.
اگه بخواهید به بالا برید باید از 6 چهارتا کم کنید =2.
اگه بخواهید به پایین برید باید به 6 چهار تا اضافه کنید که بشه 10

تا اینجا که همه متوجه شدید.
حالا چطوری ما این الگوریتم رو روی فرم پیاده سازی کنیم؟

تابع زیر:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدیک کنترل گرفته و ایندکس اونو برمیگردونه مثلاً textbox6 ایندکس 6 برمیگردونه که این تابع در اصل عدد 6 رو از نام کنترل textbox6 جدا میکنه و به ما برمیگردونه.

تابع زیر:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدیک ایندکس میگیره و کنترل رو توی فرم پیدا میکنه و به ما برمیگردونه.
مثلاً ما اگه ایندکس 6 بدیم اون متن textbox رو به اول عدد 6 اضافه میکنه که بشه textbox6 بعد اونو توی فرم جستجو و به ما میده.

یک کنترل بالای کدها تعریف کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبعد از اجرای فرم اون کادر متنی که میخواهید اول از روش حرکت کنید رو بریزید توی اشاره گری که درست کردیم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدالان textBox1 توی اشاره گر رفته میتونید فکوسشم بکنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیداین کد رو توی رویداد KeyDown فرم خودتون بذارید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخط اول:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدبا تابع GetIndex یی که ساختیم بالا توضیح دادم.ایندکس کنترل فکوس شده رو میریزیم توی متغیر index.
پس چون ما اولین کنترل رو یعنی textbox1 رو توی fc ریختیم پس به ما عدد 1 رو برمیگردونه.

switch هم که همه استادید و توضیح نمیخواد میبینه روی کدوم یک از کنترلهای حرکت کلیک کردید بعد عملیات جمع و کم رو روی ایندکس انجام میده.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمثلاً ما رو فلش سمت راست کلیک کردیم ایندکس ما هم 1 هست این میاد یکی به ایندکس اضافه میکنه و میشه 2.
با تابع GetControl ایندکس 2 رو جستجو و کنترلش رو میگیرم.

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددیگه از این راحت تر نمیشد توضیح بدم.
موفق باشید:11:.

shadmehrshadow1
19-10-2010, 09:47
یه کد رو میزارم شاید بهتر متوجه بشید . وقتی برنامه رو اجرا کردیدا دکمه های جهت دار کیبورد رو فشار بدید مثلا دکمه ای که فلش سمت راست داره .

راستش من یه کلاس دارم که میتونه همون کاری رو که بهتون گفتم رو انجام بده ولی من می خوام که این کلاس علاوه بر این که این کار روی انجام بده یه کاری دیگه ای هم بکنه . من میخوام وقتی که روی یکی از دکمه ها کلیک می کنم اگه مقداری در خاصیت Text این دکمه نبود عدد یک در درون این خاصیت دکمه نوشته بشه و اگه عددی در درون خاصیت Text این دکمه وجود داشت مقدارش به علاوه یک بشه یعنی اگه 2 بود بشه 3 و وقتی که خاصیت تکستش برابر با 9 بود بشه یک و همین طور وقتی روی دکمه کلیک راست کردم اگه مقداری نداشت بشه 9 و اگه مقداری داشت بشه منهای یک یعنی اگه 2 بود بشه 1 .
اینم کد کلاس :
یه کلاس ایجاد کنید و کد زیر رو توش کپی کنید :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و حالا کد زیر رو هم توی فرم کپی کنید :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

shadmehrshadow1
21-10-2010, 11:03
ممنون دستتتون درد نكنه . از همون تكست باكس استفاده كردم.