PDA

View Full Version : سوال: حركت بين Textboxها با كليد هاي مكان نما و جمع اتوماتيك مقاديرشان



abtinjon
چهارشنبه 06 مرداد 1389, 17:32 عصر
سلام
كسي ميتونه كمك كنه؟
يه فرم دارم حدودا 30 تا Texbox داره، كه كاربر مقادير وارد مي كنه. مي خوام وقتي مقدار وارد شد با زدن كليد Down بره به Texboxبعدي و با زدن Up بره به Texbox قبلي. البته اگه Enter هم زده شد فرقي نداره بره به بعدي.
چطور ميشه؟
يه سوال ديگه...
تو همين فرم ممقادير عدي هستند و در نهايت توي يك Texbox به نام Sum با هم جمع ميشن. تبديل به عدد و جمع راحته اما مي خوام فرمم User friendly باشه طوريكه هر Texbox كه مقدارش تغيير كرد به صورت خودكار مقادير با هم جمع بشن و نمايش داده بشه!
به رويداد Texbox.change و يا Texbox.leave؟

Saman_12
چهارشنبه 06 مرداد 1389, 19:41 عصر
تو همين فرم ممقادير عدي هستند و در نهايت توي يك Texbox به نام Sum با هم جمع ميشن. تبديل به عدد و جمع راحته اما مي خوام فرمم User friendly باشه طوريكه هر Texbox كه مقدارش تغيير كرد به صورت خودكار مقادير با هم جمع بشن و نمايش داده بشه!
به رويداد Texbox.change و يا Texbox.leave؟
چرا راه دور میری خوب کد جمعش رو بزار توی یک تایمر!!!!!!!

nasim bahari
چهارشنبه 06 مرداد 1389, 19:44 عصر
سلام.......

در مورد سوال اولت باید رویداد KeyPerss چک کنی که کدام کلید فشرده شده (مثلاً اینتر) حال اگه جواب True بود فوکوس رو به TextBox بعدی بدی. به همین راحتی....



if e.keyascii=13 then
text2.focus
end if


در مورد سوال دوم هم خودت جواب رو دادی باید عملیات جمع رو توی رویداد تکست چینج تک تک تکست باکس هات بنویسی....

nasim bahari
چهارشنبه 06 مرداد 1389, 19:45 عصر
چرا راه دور میری خوب کد جمعش رو بزار توی یک تایمر!!!!!!!

سامان جون از شما انتظار نداشتم...........:عصبانی:

Saman_12
چهارشنبه 06 مرداد 1389, 20:15 عصر
نسیم جون دوست عزیز یه نگاه به امضام بینداز .(گزینه 3)!!!:لبخند:

nasim bahari
چهارشنبه 06 مرداد 1389, 20:47 عصر
سلام.......

شوخی کردم. چرا ناراحت میشی.....

من این حرف رو بخاطر این گفتم که از شما تایپیک های و پاسخ های خیلی عالی از شما دیده بودم......منظوری نداشتم.....من مثل شما ، برنامه نویس حرفه ای نیستم.....کلاً خاصیت برنامه نویسی اینه که نمذاره کسی ادعایی بکنه....

در مورد گزینه 3 : بعضی از اشتباهات اونقدر پیامد هاش سنگینه که تا بیای بخوایی تکرارش کنی ، همون یه بار از پا درت میاره...........

موفق باشی........یک ثانیه هم نمی تونی به عقب برگردی ، پس سعی کن اشتباه نکنی

Saman_12
چهارشنبه 06 مرداد 1389, 21:01 عصر
من از نصحت دوست نارحت نمیشم!:لبخند:
در ضمن این نظر لطف شما هست که بنده رو یک برنامه نویس حرفه ای میدونین.(شما از ما حرفه ای تر هستید + دوست عزیزم vbworm)

hero4000
پنج شنبه 07 مرداد 1389, 08:39 صبح
دوست عزيز شما ميتونيد توي رويداد KeyDown فرمتون دستور زير رو بنويسين

If e.KeyData = Keys.Up Then My.Computer.Keyboard.SendKeys("+{tab}") : e.Handled = True
If e.KeyData = Keys.Down Then My.Computer.Keyboard.SendKeys("{tab}") : e.Handled = True
If e.KeyData = Keys.Enter Then My.Computer.Keyboard.SendKeys("{tab}") : e.Handled = True

راستي ترتيب مرور تکست باکسها رو هم TabIndex تکست باکسها تعيين ميکنه
جواب سوال دومتون هم که نسيم بهاري عزيز فرمودند

nasim bahari
پنج شنبه 07 مرداد 1389, 08:43 صبح
دوست عزيز شما ميتونيد توي رويداد KeyDown فرمتون دستور زير رو بنويسين

If e.KeyData = Keys.Up Then My.Computer.Keyboard.SendKeys("+{tab}") : e.Handled = True
If e.KeyData = Keys.Down Then My.Computer.Keyboard.SendKeys("{tab}") : e.Handled = True
If e.KeyData = Keys.Enter Then My.Computer.Keyboard.SendKeys("{tab}") : e.Handled = True

راستي ترتيب مرور تکست باکسها رو هم TabIndex تکست باکسها تعيين ميکنه
جواب سوال دومتون هم که نسيم بهاري عزيز فرمودند

من به این خاطر گفته بودم رویداد KeyPress زیرا قبل از رویداد KeyDown اتفاق می افته ...... و این زمانی خودش رو نشون میده که بخوای کلید های زده شده قبل از ورود به Text ها کنترل بشن مثلاً کنترل بشن که فقط عدد باشند نه حرف.......

البته ببخشید کدی که بالا گذاشتم اشکال داره که در پایین به صورت صحیح گذاشتم



If e.KeyChar = Chr(Keys.Enter) Then
SendKeys.Send("{Tab}")
End If


موفق باشید

hero4000
پنج شنبه 07 مرداد 1389, 08:48 صبح
دوست عزيز من يک رويداد رو دارم تعريف ميکنم و براي فرم

شما براي تکسباکسها نوشتين و براي همه تکسباکسها بايد بنويسين

درضمن ترتيب رويدادها رو جابجا ميگين اولين رويداد صفحه کليد KeyDown هستش

موفق باشين

nasim bahari
پنج شنبه 07 مرداد 1389, 09:03 صبح
سلام.......دوست عزیز

ببخشید اگه توضیحاتم ناقص بود.........

منم این کد رو برای فرم گفتم البته باید قبلاً خاصیت KeyPriview فرم رو برابر True تنظیم کنی. در این صورت اگر فوکوس هم در اختیار هر کنترل دیگری باشه . کد کلید زده شده اول به فرم فرستاده میشه و نه اون کنترل.........

شما توجه داشته باشین که KeyDown و KeyPress با هم اجرا می شوند البته موضوع سر این نیست که کدوم زودتر اجرا میشه بلکه من می خوام بگم که در حالت معمول وقتی KeyDown اتفاق می افته . کارکتر مورد نظر در تکست باکس نمایش داده میشه اما در KeyPress اینطور نیست و شما قبل از اینکه کارکتر مورد نظر در تکست باکس قرار بگیره . در اختیار شماست و شما می تونین اون کارکتر رو تغییر بدین . مثلاًبجای کد کارکتری که نمی خواهیم تکست باکس بگیره ، کد صفر رو برگردونیم . که در این صورت انگار هیچ کلیدی فشرده نشده است.......

موفق باشید ........

abtinjon
پنج شنبه 07 مرداد 1389, 16:46 عصر
از همتون ممنونم.
فقط اينكه من مجبورم واسه همه تكست باكس ها اين كار رو تكرار كنم؟
و اينكه بهترين راه واسه اينكه از ورود متن به يك تكست باكس كه بايد عدد بگيره چيه؟

abtinjon
پنج شنبه 07 مرداد 1389, 17:13 عصر
از همتون ممنونم.
فقط اينكه من مجبورم واسه همه تكست باكس ها اين كار رو تكرار كنم؟
اصلاح مي كنم و اينكه بهترين راه واسه جلوگيري از ورود متن به يك تكست باكس كه بايد عدد بگيره چيه؟

Saman_12
پنج شنبه 07 مرداد 1389, 17:19 عصر
و اينكه بهترين راه واسه اينكه از ورود متن به يك تكست باكس كه بايد عدد بگيره چيه؟
فکر کنم منظور تون این بود که چیکار کنبد که تکست باکس هاتون فقط عدد بیگره!
یه را هش اینه که به نظر من بهترین هم هست(توی رویداد keypress هر کدوم از تکس باکس ها که قراره مقدار عددی بگیره) :


If Asc(e.KeyChar) >= Keys.D0 And Asc(e.KeyChar) <= Keys.D9 Or Asc(e.KeyChar) = Keys.Back Then
e.Handled = False
Else
e.Handled = True
End If

nasim bahari
پنج شنبه 07 مرداد 1389, 21:36 عصر
از همتون ممنونم.
فقط اينكه من مجبورم واسه همه تكست باكس ها اين كار رو تكرار كنم؟
اصلاح مي كنم و اينكه بهترين راه واسه جلوگيري از ورود متن به يك تكست باكس كه بايد عدد بگيره چيه؟

سلام..........

شما موتونید از آرایه کنترل استفاده کنید و البته در رویداد KeyPerss از کدی که دوستمون Saman گذاشتن استفاده کن.........

موفق باشی........

nasim bahari
پنج شنبه 07 مرداد 1389, 21:55 عصر
راستی یادم رفت بگم.......

چون این فرم شما دارای تعداد زیادی TextBox هستش ، در واقع یه فرم ورود اطلاعات هستش......پس شما باید به روشی که قبلاً گفتم عمل کنید...........

اون طوری که دوستمون گفتن ، شما مجبور هستید اون قطعه کد رو در رویداد Keypress تمام Textbox ها استفاده کنید.....

اما راه دوم اینه که شما خاصیت KeyPreview فرم را برابر True کنید و کد مورد نظر را که سامان جان زحمتش رو کشیده اند در رویداد KeyPress فرم وارد نمایید در این صورت کلید های فشرده شده قبل از اینکه به TextBox ای که فوکوس رو در اختیار داره برند به فرم تحویل داده می شن که شما محدودیت ها رو که عبارت است از جلوگیری از ورود حروف اعمال میشه........

موفق باشید......

Saman_12
پنج شنبه 07 مرداد 1389, 22:00 عصر
به این می گن یه پاسخ خوب!:تشویق:

abtinjon
شنبه 09 مرداد 1389, 16:15 عصر
ok، فكر كنم فهميدم چي شد!:بامزه: