آموزش سی‌شارپ C# – بخش ۲۲

آموزش سی‌شارپ C# – بخش ۲۲
  • 1391/12/8
  • Jeff Mosawy
  • 21
  • مقدمه

یکی از مشکلاتی که با آن‌ها مواجه خواهید شد، مشکل خالی بودن Text Box ها می‌باشد! هنگامی که کاربر با نرم‌افزار تهیه شده توسط شما کار می‌کند، احتمالاً بعضی مواقع به‌صورت ناخودآگاه Text Boxای را خالی رها می‌کند. راه حل آن را در این بخش آموزشی خواهیم گفت.

  • کنترل خالی بودن Text Box

پروژه‌ی جدیدی را در Visual Studio به‌صورت Windows Application ایجاد کنید و فرمی شبیه به شکل زیر تهیه کنید:1-windows form

بر روی Buttonای که در فرم خود قرار داده‌اید، دوبار کلیک کنید و کد‌های زیر را در داخل آن بنویسید:

2-button code

کدهایی را که همانند بالا در نرم‌افزار خود نوشته‌اید را اجرا کنید. در واقع، کدهای بالا این عمل را انجام می‌دهند که یک شماره‌ای را بصورت int از یک Text Box دریافت می‌کند و به‌صورت یک String به MessageBox ارسال خواهد کرد.

اگر کدهای بالا را اجرا کردید، ابتدا یک شماره را در Text Box وارد کرده و بر روی Button کلیک کنید؛ باید همان عدد را در قالب یک MessageBox ببینید. این‌بار، Text Box را کاملاً خالی کرده و بر روی Button کلیک کنید! چه خواهد شد؟ باید خطایی شبیه به خطای زیر ببینید:

3-error_empty_txtbox

شاید خطاها به‌شکل‌های متفاوتی (بستگی به نسخه Visual Studio شما) نمایش داده شود، اما در هر صورت، خطا ناشی از خالی بودن این Text Box است.

برای جلوگیری از این مشکل، ما از یک متد با نام TryParse استفاده می‌کنیم. برای تبدیل ارقام ما قبلاً بدین شکل عمل می‌کردیم:

textBoxNumber = int.Parse(textBox1.Text);

متد Parse خالی بودن یا نبودن یک Text Box را بررسی نمی‌کند و مستقیماً می‌خواهد که مقدار داخل Text Box تعیین شده را به مقدار خواسته شده تبدیل کند، بنابراین ممکن است که در بعضی مواقع، به‌خاطر اشتباه کاربر که یک Text Box را خالی گذاشته، با خطایی روبرو شود.

بنابراین در متد TryParse به سی‌شارپ می‌گوییم که اول ببیند آیا مقدار داخل Text Box قابل تبدیل است یا نه. کدهای ما شکلی شبیه به زیر را خواهند داشت:

4-tryparse

کد فوق به شکل زیر است:

متغیر outputValue، مقدار تغییر یافته را در خود نگه‌داری خواهد کرد. یک متغیر از نوع Bool نیز تعریف می‌کنیم که ببینیم آیا متد TryParse می‌تواند مقدار داخل را تبدیل کند یا نه! اگر جواب مثبت بود، مقدار آن True می‌شود؛ در غیراینصورت False خواهد بود.

پس از آنکه از TryParse استفاده می‌کنید،‌ باید بررسی کنید که آیا مقدار، قابل تبدیل است یا خیر! پس با استفاده از دستور IF … ELSE، این شرط را بررسی می‌کنیم.

در داخل IF، ما کد را به‌این شکل نوشتیم که اگر مقدار قابل تبدیل بود، با استفاده از علامت NOT (!)، مقدار را False می‌کنیم تا وارد کدهای درون IF نشود و کدهای ELSE را اجرا کند. اما اگر مقدار ما قابل تبدیل نبود، پس مقدار isNumber برابر با False خواهد شد و با استفاده از دستور منطقی NOT، به True تبدیل می‌شود و وارد بدنه IF می‌شود.

جهت دریافت این بخش آموزشی به‌صورت فایل PDF،‌ اینجا را کلیک کنید.

دیدگاه خود را وارد کنید
تعداد دیدگاه ها : 21 دیدگاه
  1. سلام . ممنون از اموزش ولی فکر می کنم فضای سی شارپ اشباع شده! الان جای جاوا خیلی توی آموزش ها کمه … ای کاش درمورد اون می نوشتید.
    به هر حال ممنون

    1. سلام دوست عزیزم،

      ممنونم از نظر لطف شما! من راستش رو خدمت شما عرض می‌کنم، من تخصص زیادی در Java ندارم و خودم سعی کردم زبانی رو آموزش بدم که تخصص داشته باشم. اگرچه من ترجمه یک وب‌سایت رو دارم برای شما می‌نویسم، اما اگر دقت کنید و مراجعه کنید به سایت منبع، متوجه می‌شوید که خیلی از مباحث رو من جا‌بجای می‌کنم و مواردی رو کم/اضافه می‌کنم. حتی در حین ترجمه وب‌سایت، با اشتباهاتی از سایت اصلی مواجه شدم که با ایمیل زدن به اون‌ها، حتی مشکلات و اشتباهات آن‌ها هم در حال رفع هست. پس این کار از خیلی لحاظ مفید هست.

      در ضمن، زبان Java تقریباً شبیه به سی‌شارپ هست؛ یعنی یادگیری یکی از زبان‌ها، باعث می‌شه زبان دیگری را به‌صورت ناخودآگاه یاد بگیرید. اگرچه من به‌نظرم Java از چند لحاظ خیلی بهتر از سی‌شارپ هست، اما در هر دو صورت، هر دو شبیه به هم هستند.

      در هر صورت، من معذرت می‌خوام از شما و دوستان.
      موفق باشید!

    1. سلام دوست عزیز،

      بخش ۲۳ کاملاً آماده‌است و امروز و یا حداکثر تا فردا منتشر خواهد شد. ممنونم از لطف شما.
      موفق باشید!

  2. با سلام
    و تشکر از آموزشی که گذاشتید.
    ببخشید یک سوال ساده داشتم.
    قسمت پایانی این بخش :
    مگر ابتدا isnumber = false نیست؟ پس وقتی در texbox عددی وارد نمیکنیم isnumber هنوز False می باشد.
    سوالم اینجاست چرا در ادامه !isnumber برابر False است؟ مگر عمل not این مقدار رو نباید True کند؟ پس چرا هنوز False است؟

    1. سلام دوست عزیزم،

      ممنونم از توجه شما. ببین، ما متغیر isNumber رو اول بصورت False تعریف کردیم، با استفاده از تابع tryParse، اگر مقدار قابل تبدیل بود، مقدار isNumber به‌صورت True خواهد شد، در غیر اینصورت False خواهد ماند.

      حالا شما اول تصور کن که مقدار isNumber بدلیل قابل تبدیل بودن مقدار وارد شده (یعنی در واقع عددی داخل جعبه متن وارد شده) True شد؛ خوب توی دستور if، می‌گیم که اگر عمل Not مربوط به isNumber به‌صورت True شد، داخل if شو و بیخیال else شو. حالا ما چونکه مقداری رو وارد کردیم، عمل Not مربوط به isNumber میشه False، پس وارد if نمی‌شه و وارد Else می‌شه.
      حالا اگر چیزی توی جعبه متن وارد نشده بود، isNumber به‌شکل False باقی می‌مونه، توی if «بررسی» می‌شه که عمل Not روی isNumber می‌شه: True … پس وارد if میشه و می‌گه که دستور رو وارد کنید.

      دقت کنید که عملی که داخل پرانتز مربوط به if انجام می‌شه، مقداری رو تغییر نمی‌ده (چیزی رو به متغیری نسبت نمی‌ده) و فقط بررسی می‌کنه!

      موفق باشید.

  3. سلام

    میشه اجزای این خط از برنامه ( مثلا out outputValue) رو کامل توضیح بدین که چیکار می کنه؟!

    isNumber = int.TryParse(txbx.Text, out outputValue);
    سپاس فراوان

    1. سلام دوست عزیز،

      بله، چرا که نه!
      ببینید، با استفاده از متد TryParse، سعی می‌کنیم که مقدار داخل Text Box رو به نوع Integer تبدیل کنیم (عدد صحیح). اگر تونستیم این مقدار رو برگردونیم، مقدار تبدیل شده داخل Text Box توی متغیر outputValue ذخیره می‌شه. اگر که نشد، خوب حتماً کاربر مقداری که وارد Text Box کرده، عدد نبوده و یا اصلاً خالی وارد کرده.
      حالا ما یک متغیر به نام isNumber تعریف کردیم از نوع Bool. اگر متد TryParse کار ما رو با موفقیت انجام داد، مقدار True توی isNumber ذخیره می‌شه. اگر نشد، مقدار False توی isNumber قرار می‌گیره. در واقع متد TryParse، فقط دو مقدار برمی‌گردونه؛ یا True، یا False
      بعدش با استفاده از یک IF،‌ بررسی می‌کنیم که اگر مقدار تغییر یافت، پس کار رو ادامه می‌دیم، اگر هم که نه، یک کار دیگه‌ای انجام می‌دیم.

      موفق باشید.

    2. ممنون از توضیحات مبسوط و کامل شما

      پس با این حساب out توی out outputValue باعث میشه مقدار تبدیل شده داخل Text Box توی متغیر outputValue ذخیره بشه ! درسته؟!

    3. با سلام،

      بله دوست عزیز، درست می‌فرمایید.

  4. سلام
    سایت خیلی خوبی دارید.آموزش های خیلی خوبی هم دارید.
    ولی جای خیلی چیز ها واقعا خالیه.مثل برنامه نویسی اندروید.
    آموزش های سی شارپ رو نگاه کردم.خیلی خوبه که پروژه ای جلو میرید ولی به نظرم اینا برای مبتدی ها خوب نیست.چون اویلش اصلا توضیحات ابتدایی رو ندادید.
    یه پیشنهاد دارم که اگر عمل کنید دیگه واقعا عالی میشه..اونم یه پست راجع به کی ورد ها ودستورات کوتاه و ضروری و کاربردشان ، درسی شارپ بگذارید.
    ممنون از سایت خوبتون.به کارتون ادامه بدهید. ما بی صبرانه منتظر آموزش های بعدی هستیم.
    با تشکر

    1. سلام دوست عزیزم،

      اول از همه تشکر می‌کنم بابت پیشنهادی که دادی؛ مطمئن باشید که اگر روزی به من پیشنهادی داده بشه و یا انتقادی از کارم بشه، خیلی خوشحال می‌شم و پیام شما را که دیدم خیلی خوشحال شدم.
      البته من یک چیزی رو دقیق متوجه نشدم امیدوارم بیشتر توضیح بدید. من کل آموزش‌هام براساس یک پروژه خاص نیست. هربار که مبحث جدیدی بخواد شروع بشه، علاوه برا آموزش همان کدهای ابتدایی،‌ سعی‌ام را می‌کنم که با یک پروژه خیلی کوچیک (که اسمش رو نمی‌شه گذاشت «پروژه!») آموزش می‌دم که بهتر برای کاربر جا بیفته.
      اگر نظر دیگه‌ای دارید و یا اینکه دارم جایی رو اشتباه می‌کنم، حتماً به اطلاع من برسونید … خوشحال خواهم شد.

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

  5. با سلام و خسته نباشید. اگه ممکنه منو راهنمایی کنید.
    من یه پروژه نوشتم که پایگاه دادم SQL است. و برای ثبت اطلاعات اول باید چک کنه که بعضی از textbox ها پر شده باشه. کدش را چطوری باید بنویسم؟ ممنون میشم اگه کمکم کنید.

  6. سلام ممنون از اموزش هاخوبتون چطور میشه عددی را گرفته تام بودن یا نبودن ان را مشخص کند ممنون میشم یکم راهنمایی کنید

    1. سلام دوست عزیزم،

      یکی از راه‌های نوشتن یک برنامه که تام بودن یک عدد را تعیین کند، این هست که برای مثال شما ۳ متغیر تعریف می‌کنید به نام‌های: i, number, sum
      i= برای استفاده در حلقه
      number= برای دریافت و ذخیره شماره‌ای که کاربر وارد می‌کند
      sum= نتیجه نهایی که در ابتدا باید مقدار صفر در آن ذخیره شد؛ در سی‌شارپ خودکار صفر ذخیره می‌شود، اما خودتان دستی مقدار این را صفر کنید.

      حلقه زیر را اجرا کنید:
      for(i=1; i<=number/2; i++)
      {
      if(number%i == 0)
      {
      sum += i;
      }
      }

      حال با استفاده از دستور شرطی If، بررسی می‌کنید که اگر number برابر با sum باشد، این عدد تام است؛ درغیر اینصورت، عدد تام نیست.
      موفق باشید!

  7. ممنون اقای موسوی خیلی خوب توضیح دادی خدا قوت همیشه سربلند و پیروز باشی

    1. خواهش می‌کنم دوست خوبم، سربلند باشی.

  8. سلام عالی هستین خیلی زیاد به این وبلاگتون سر میزنم با اینکه مطالب کمی میزارید هر روز میام و حتی مطالب قدیمی رو دوباره میخونم و به دردم میخوره و با شوق از وبلاگ خارج میشم ممنون که انقدر عالی هستین

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *