نمایش نتایج 1 تا 12 از 12

نام تاپیک: فعال شدن دکمه های عددی سمت راست در برنامه

  1. #1
    کاربر دائمی آواتار Bahar_HS
    تاریخ عضویت
    تیر 1387
    محل زندگی
    اراک
    پست
    229

    Question فعال شدن دکمه های عددی سمت راست در برنامه

    با سلام
    یه برنامه نوشتم که کاربر عدد وارد می کنه و برنامه عدد رو به حروف برمی گردونه،در رویدادkey_Up،برای TextBox ای که قراره عدد ورودی رو بگیره،این کد رو نوشتم که فقط دکمه های عددی رو از کاربر قبول کنه:
     
    if ((e.KeyValue > 47) && (e.KeyValue < 58) || (e.KeyCode == Keys.Back))

    ولی برنامه دکمه های عددی سمت راست کیبرد رو قبول نمی کنه،چکار باید کرد که همه ی دکمه های عددی کیبرد رو قبول کنه و فقط دکمه های عددی رو؟

  2. #2
    کاربر دائمی آواتار mostafa_shoakry
    تاریخ عضویت
    آذر 1388
    محل زندگی
    فعلا که ساکن اردبیلم
    سن
    36
    پست
    292

    Talking نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    اینو امتحان کن امید وارم کمکت کنه.

    if ((e.KeyCode == Keys.Back) || (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
    یادت نره در آخر اینم اضافه کن
    (e.KeyCode == Keys.Back)
    موفق باشی.

  3. #3
    کاربر دائمی آواتار vandermond
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    رايانه
    پست
    526

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

    دوست عزيز
    يكم. چرا Key_Up معمولا توي رويداد Key_Down مينويسن اين ها رو.
    دوم. براي اينكه كد اسكي كليدها رو داشته باشي ميتوني اين كار رو بكني كه نياز به حفظ كردن هم نداره. اين كد پايين رو بزار توي رويداد مورد نظرت و كليدي كه ميخاي رو بزن كه بهت كد اسكي رو نشون بده(البته من از اين روش استفاده ميكنم. احتمالا و حتما MSDN ليست اينها رو داره. من خودم با اين كار راحتم)
    MessageBox.Show(e.KeyValue.ToString());

    حالا اون كدهايي رو هم كه ميخاي ميشه 96 تا 105 (صفر سمت راست ميشه 96 و نه سمت راست ميشه 105) ديگه بقيه كار رو كه خودت ميدوني.
    اگه مشكلي بود بگو ...


    ويرايش: پست همزمان.

  4. #4
    کاربر دائمی آواتار mostafa_shoakry
    تاریخ عضویت
    آذر 1388
    محل زندگی
    فعلا که ساکن اردبیلم
    سن
    36
    پست
    292

    Talking نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    نقل قول نوشته شده توسط vandermond مشاهده تاپیک
    دوست عزيز
    يكم. چرا Key_Up معمولا توي رويداد Key_Down مينويسن اين ها رو.
    حق با تو هست اصلا یادم رفت اینو بگم.تو این تکه برنامه یکی که بخواد مثلا شماره تلفن رو وارد کنه ، به طریق زیر از از وارد کردن حروف و علایم جلوگیری می کنه.
    bool KeyHandle;
    private void textBox9_KeyDown(object sender, KeyEventArgs e)
    {
    if ((e.KeyCode == Keys.Back) || (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
    KeyHandle = false;
    else
    KeyHandle = true;
    }
    private void textBox9_KeyPress(object sender, KeyPressEventArgs e)
    {

    if (e.KeyChar == 8)
    e.Handled = false;
    if (KeyHandle == true)
    e.Handled = true;

    }
    منم با این روش راحتترم.البته می تونی از هر روش(اگه احیانا روش ابتکاری دیگری داری ) ازش استفاده کنی. اینا واسه اینه که ذهنیتت باز باشه.
    به جای این

    if (e.KeyChar == 8)
    e.Handled = false;
    می تونی از
    (e.KeyCode == Keys.Back)
    نیز استفاده کنی

  5. #5
    کاربر دائمی آواتار Bahar_HS
    تاریخ عضویت
    تیر 1387
    محل زندگی
    اراک
    پست
    229

    Question نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    با سلام و باسپاس از راهنمایی هاتون،
    در مورد این که چرا کد رو در رویداد key_up نوشتم و نه در رویداد key_down، دلیلش اینه استاد سی شارپم می گفتند که این کدهارو باید در رویداد key_up نوشت ، با توجه به این که کاربر چطور دکمه ی کیبرد رو فشار می ده ممکنه اینdown شدن چندبار اتفاق بیفته ،برای همین در رویداد key_up می نوسیم که یکبار اتفاق می افته و وقتی ازشون پرسیدیم که رویدادkey_dow کجاها کاربرد داره، بازی ها رو مثال زدند که دکمه ای مثلا برای تیراندازی در بازی در نظر گرفته شده که کاربر ممکنه دکمه رو پایین نگه داره و در چنین حالاتی اتفاقا می خوایم که این شدن downچند بار اتفاق بیفته،
    (اگه منظور استادمون رو درست رسونده باشم)
    این طور که دوستان گفتند:
    keyCodeبرای دکمه های سمت چپ: 48_59،برای دکمه های سمت راست:96_105
    keyValueبرای دکمه های سمت راست: NumPad0_NumPad9،برای دکمه های سمت چپ:D0_D9
    ولی هیچ کدوم جواب ندادن،با این که با استفاده از MessageBox همین کدها برگردونده میشه،
    ویه چیز دیگه این که وقتی از یکی از این روشها در برنامه استفاده می کنم و دکمه های عددی سمت راست رو می زنم چیزی که در textBox نوشته می شه کاراکترهای الفبایی ونه کاراکترهای عددی که خب برنامه هم ازش ایراد میگیره،
    بازهم ممنون از راهنمایی هاتون

  6. #6
    کاربر دائمی آواتار vandermond
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    رايانه
    پست
    526

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

    دوست عزيز
    من به نظر استاد شما كاملا احترام ميزارم ولي باز هم Key_Down رو مناسب نميدونم چون كاربر وقتي ميزنه ميخاد ببينه كه چي شد. اونطوري بايد حتما كليد رو ول كنه كه بفهمه. در ضمن هر كسي كه يه خرده با كامپيوتر كار كرده باشه ميتونه كه براي نوشتن نبايد كليدي رو نگه داره و اتفاقا شايد وقتي ميخواد بنويسه مثلا 555 با گرفتن لحظه اي بخواد اين كار رو بكنه. در كل البته به نوع برنامه شما خيلي مربوط ميشه و اينكه كاربر كي هستش، ولي من Key_Press , Key_Down رو ترجيح ميدم. (باز هم با احترام به نظر استاد شما و خود شما)
    براي اين مدل آره من هم خوب نميتونم باهاش كار كنم(اين كه اعداد NumPad به حروف تبديل ميشن). يه خاصيت نداره كه مستقيم هر چي داره رو بزاره.
    ولي اگه شما ميخاي كه كاربر فقط عدد بتونه توي تكست باكس وارد كنه چرا اين كار رو نميكني:
    https://barnamenevis.org/showpo...92&postcount=7
    البته ميدونم منظورت يه چيز ديگه هستش. ميتوني يه كارهايي هم بكني اگه ديگه نشد، ميتوني عدد جلوي NumPad2 رو مثلا اينجا 2 رو از رشته اون بگيري كه خودم اصلا دوست ندارم ولي اگه مجبور بشي فكر ميكنم راه آخر هستش.
    البته حتما اساتيد در اين زمينه نظرات بهتري دارن. من الان نميتونم بيشتر از اين توضيح بدم. بايد برم. بعدا اگه شد روش كار ميكنم و جوابش رو ميدم...

  7. #7
    کاربر دائمی آواتار Bahar_HS
    تاریخ عضویت
    تیر 1387
    محل زندگی
    اراک
    پست
    229

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

    با سلام،
    ممنون از راهنمایی تون،
    کدی رو که گفته بودید در رویدادchange_Text نوشتم ولی باز هم نشد،
    چیزی که در TextBox نوشته میشه (وقتی این کد و همین طور کدهایی که دوستان دیگه گفتند)کاراکترهای الفبایی ،
    درصورتی که کلیدهای سمت راست کیبرد عددی و کنترلی هستند، چرا این اتفاق می افته؟

  8. #8
    کاربر دائمی آواتار NIK
    تاریخ عضویت
    خرداد 1389
    سن
    39
    پست
    293

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

    اگه درست متوجه شده باشم، این کد مشکل رو حل میکنه.
    فقط در رویداد Key Press باید نوشته بشه.

    if ((e.KeyChar != 8) && (e.KeyChar != 13))
    e.Handled = !char.IsDigit(e.KeyChar);

  9. #9
    کاربر دائمی آواتار Bahar_HS
    تاریخ عضویت
    تیر 1387
    محل زندگی
    اراک
    پست
    229

    Question نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    دوباره سلام،
    مشکل همچنان باقی است!
    دوستان تاکید می کنم که دکمه های عددی سمت راست در TextBox کاراکترهای الفبایی وارد می کنن،
    private void txtInput_KeyUp(object sender, KeyEventArgs e)
    {
    string strCheck = "";
    ClassNumbericToText1 numberic = new ClassNumbericToText1();
    try
    {

    //if ((e.KeyValue > 47) && (e.KeyValue < 58) || (e.KeyValue>=96 && e.KeyValue <= 105)||(e.KeyCode == Keys.Back))
    if((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)||(e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))// || (e.KeyCode == Keys.Back))
    {

    if (e.KeyCode == Keys.Back)
    {
    strCheck = txtInput.Text.Remove(txtInput.Text.Trim().Length - 1, 1);
    if (strCheck != "")
    {
    txtInput.Text = strCheck;
    lblAddComma.Text = numberic.AddComma(txtInput.Text.Trim());
    lblLetter.Text = numberic.NumbericToLetters(txtInput.Text.Trim());
    }
    else
    {
    txtInput.Text = " ";
    lblAddComma.Text = " ";
    lblLetter.Text = " ";
    }
    }
    else
    {
    txtInput.Text += Convert.ToChar(e.KeyValue);
    lblAddComma.Text = numberic.AddComma(txtInput.Text.Trim());
    lblLetter.Text = numberic.NumbericToLetters(txtInput.Text.Trim());

    }
    }
    else
    {
    MessageBox.Show("فقط عدد وارد كنيد", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    txtInput.Text = "";
    lblAddComma.Text = "";
    lblLetter.Text = "";
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message.ToString());
    }

    }
    وقتی کلیدی غیر از کلیدهای عددی سمت راست کیبرد و دکمه های غیر عددی سمت چپ
    کلیک میشه،قسمت else و پیام "فقط عدد وارد کنید" نمایش داده میشه،ولی وقتی کلیدهای عددی سمت راست کلیک می شن ، چیزی که د رTextBox نوشته میشه کاراکترهای الفبایی و پیام
    بخش catch اجرا میشه،برنامه رو با یه TextBox شفارشی شده که قراره فقط عد بگیره تکرار کردم ولی بازهم همون مشکل رو داشت.
    باسپاس از راهنماییی هاتون

  10. #10
    کاربر دائمی آواتار mostafa_shoakry
    تاریخ عضویت
    آذر 1388
    محل زندگی
    فعلا که ساکن اردبیلم
    سن
    36
    پست
    292

    Talking نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    این یه نمونه کد هست ولی با keyPress و KeyDown هست.انشاالله که کمکت کنه.
    فایل های ضمیمه فایل های ضمیمه

  11. #11
    کاربر دائمی آواتار Bahar_HS
    تاریخ عضویت
    تیر 1387
    محل زندگی
    اراک
    پست
    229

    Question نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    سلام ،
    ممنون از نمونه برنامه ای که گذاشتید، خیلی لطف کردید،
    با این کد دکمه های عددی سمت راست رو قبول می کنه،
    1) ولی حالا نمی دونم قطعه کدی رو که ورودی TextBox رو می گیره ، کجا بذارم؟
    البته حالات مختلف رو امتحان کردم ولی نشد، فکر می کنم حالا دیگه لازم نباشه که برنامه چک کنه که Backspace کلیک شده یا نه،ولی نمی دونم گرفتن ورودی از TextBox در کدوم رویداد و کدوم قسمت برنامه باشه؟
    2) چرا وقتی کلید کلیک شده در محدوده ی موردنظره Handler = false میشه؟

    if ((e.KeyCode == Keys.Back) || (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
    Handler = false;
    else
    Handler = true;


    باز هم ممنون از راهنمایی هاتون

  12. #12
    کاربر دائمی آواتار Bahar_HS
    تاریخ عضویت
    تیر 1387
    محل زندگی
    اراک
    پست
    229

    Question نقل قول: فعال شدن دکمه های عددی سمت راست در برنامه

    بالاخره درست شد!
    باسپاس از همه ی دوستانی که لطف کردند وراهنمایی کردند،
    قطعه کدی که خودم نوشته بودم رو در رویداد TextChange _به همراه کمی تغییرات در تنظیمات TextBox _ اضافه کردم وبالاخره درست شد!
    کنترل روی دکمه های عددی در رویدادهای key_down و key_press به همراه متغیر بولین.
    خیلی خیلی ممنون

    خیلی خوشحالم!

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •