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

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

در بخش قبلی به‌صورت کوتاه تنها در رابطه با نحوه راه‌اندازی گزینه Quit از منوی File را به شما آموزش دادیم. در این بخش شما فراخواهید گرفت که چگونه منوی Edit را نیز اجرا کرده و باعث شود که هر گزینه از این منو، عملیات به‌خصوصی را انجام دهد.

  • اجرای منوی Edit در سی‌شارپ

قاعدتاً می‌بایست که ما قبل از کدنویسی منوی Edit، سایر گزینه‌های منوی File را راه‌اندازی کنیم، اما بدلیل پیچیدگی آن نسبت به سایر منوها، آن را فعلاً رها می‌کنیم و ابتدا با منوی Edit شروع می‌کنیم؛ در نهایت مجدداً به سراغ منوی File بازخواهیم گشت.

برای اینکه عملکرد گزینه‌های Cut، Copy، Past و Undo را در عمل ببینید، ابتدا دو Text Box در کنار هم در منوی خود قرار دهید و برای جفت Text Box ها، در پنجره Properties آن‌ها، مقدار Property مربوط به MultiLine را به True تغییر دهید. با True کردن آن‌ها، خواهید توانست که به‌جای یک خط، چندین خط در یک Text Box بنویسید. برای اولین Text Box، در Property مربوط به Text، یک مقدار دلخواه بنویسید. فرم شما به‌شکل زیر خواهد شد:

1-Menu_Edit_Code

کاری که می‌کنیم این هست که گزینه‌های Cut، Copy و Past را فعال می‌کنیم. Undo را نیز فراموش نخواهیم کرد! ابتدا ما متن داخل Text Box اول را Cut خواهیم کرد و سپس این عمل را Undo می‌کنیم.

بنابراین، به فرم خود بازگردید و بر روی گزینه Cut از منوی Edit، دابل-کلیک کنید؛ سپس وارد بخش کدنویسی خواهید شد:

2-Menu_Edit_CutCode

کدی که برای انجام عملیات Cut در یک Text Box انجام می‌شود، خیلی راحت و ساده می‌باشد. تنها کافیست که کد زیر را بنویسید:

textBox1.Cut();

Cut() یک متدی در سی‌شارپ می‌باشد که همراه با خود زبان سی‌شارپ عرضه می‌شود و دقیقاً همان‌کاری را می‌کند که نام آن انتخاب شده‌است.

قبل از اینکه برنامه‌ی خود را اجرا کنید، یک‌بار دیگر به فرم خود بازگردید و بر روی undo دابل-کلیک کنید و کد زیر را بنویسید:

textBox1.Undo();

اکنون، کدهای خود را امتحان کنید؛ برنامه خود را اجرا کنید و متن خود را در Text Box انتخاب کنید. توسط گزینه Cut، متن را Cut کنید و سپس با استفاده از گزینه Undo، متن خود را بازگردانید.

کار دیگری که می‌توانیم انجام دهیم این است که بررسی کنیم که آیا متنی جهت Cut کردن انتخاب شده است یا نه! پس کافیست که کد مربوط به Cut را به‌شکل زیر تغییر دهید:

if (textBox1.SelectedText != “”)

{

            textBox1.Cut();

}

فکر نمی‌کنم نیازی به شرح کدهای بالا وجود داشته باشد! کدها کاملاً گویای عملکرد خود هستند.

برای گزینه Undo نیز می‌توانیم چنین کاری را انجام دهیم؛ یعنی بررسی کنیم که آیا عملی برای Undo کردن وجود دارد یا نه! پس کدهای Undo را به‌شکل زیر تغییر دهید:

if (textBox1.CanUndo == true)

{

            textBox1.Undo();

}

اگر برنامه‌ی خود را اجرا کنید و ابتدا بر روی Cut کلیک کنید، متن شما Cut خواهد شد. اگر یک‌بار بر روی Undo کلیک کنید، متن شما باز خواهد گشت. اگر یک بار دیگر Undo کنید، مجدداً متن شما Cut می‌شود. این بدلیل این هست که شما بعد از دستور Undo، مراحل قبلی را پاک نکردید، برای این‌کار، کد زیر را جایگزین کنید:

if (textBox1.CanUndo == true)

{

            textBox1.Undo();

            textBox1.ClearUndo();

}

کد بالا را اجرا کنید؛ خواهید دید که با دوبار Undo کردن، عملیات Cut مجدداً انجام نخواهد شد.

حال وقت آن رسید که دو گزینه Copy و Past را نیز راه‌اندازی کنیم. پس ابتدا بر روی گزینه Copy دابل-کلیک کنید تا وارد بخش کدنویسی آن شویم. کدی که برای کپی استفاده خواهیم کرد، به‌شکل زیر است:

textBox1.Copy();

اما برای بررسی اینکه آیا متنی برای کپی کردن انتخاب شده است، باید به‌شکل زیر عمل کنیم:

if (textBox1.SelectionLength > 0)

{

            textBox1.Copy();

}

ما در واقع در حال بررسی مقدار SelectionLength هستیم که ببنیم چه تعداد کاراکتر انتخاب شده است. اگر که برابر با صفر باشد، یعنی هیچ کاراکتری برای کپی شد انتخاب نشده است، پس وارد بدنه IF نمی‌شود؛ در غیراینصورت، کدهای داخل بدنه IF اجرا خواهند شد.

برای Past کردن، از Text Box دومی استفاده خواهیم کرد. پس کد زیر را برای گزینه Past اضافه کنید:

textBox2.Past();

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

بخش ۲۴ام از آموزش سی‌شارپ بنا به‌دلایلی فاقد فایل PDF بود؛ بنابر قولی که داده بودم، در این بخش (۲۵ام) می‌توانید فایل PDF این بخش را دانلود کنید. اینجا را کلیک کنید.

دیدگاه خود را وارد کنید
تعداد دیدگاه ها : 23 دیدگاه
    1. سلام دوست عزیزم،

      خواهش می‌کنم، شما هم خسته باشید! برنامه وقتی که Debug می‌شه، به‌صورت یک فایل EXE در‌می‌آید که می‌تونید از طریق فولدری که برای Solution شما در Visual Studio ساخته شده، پیداش کنید.
      اما وقتی که نرم‌افزاری را به‌صورت کاملی طراحی می‌کنید، باید به‌جای Debug، آن را Publish کنید.

      امری باشه درخدمتم.
      موفق باشید!

  1. salam omidvaram haletun khub beshe. bebekhshid man ziyad mozahemetun misham 🙂 ghabl az inke bekham c, c + + , …… shoru konam Algorithm & flowchart bayad kar konam???? va age chiz dgee ham bayad kar konam age ba zekre manba va ketab bem begid ye donya mamnun misham. bazam sepas

    1. سلام،

      خواهش می‌کنم، ما اینجا هستیم که هم به بقیه کمک کنیم و هم بقیه به ما کمک کنند، پس راحت باشید و سوال‌هاتون رو بپرسید!
      ببینید، من خودم شخصاً این‌ها رو نخوندم (نمی‌دونم کار درستی انجام دادم یا نه) ولی خلاصه اتفاقی که افتاد و شروع کردم به خوندن زبون‌ها بدون در نظر گرفتن الگوریتم و فلوچارت. من آدم با تجربه و متخصصی نیستم و خدایی نکرده نمی‌خوام چیزی رو به شما بگم که بعداً گمراه شید.

      امر دیگه‌ای باشه من در خدمت شما و همه هستم،
      موفق باشید!

  2. با سلام وخسته نباشید
    من میخواهم تازه برنامه نویسی رو شروع کنم و بین زبان c++ و java و c# مرددم به نظر شما کدوم بهتره واینده بهتری داره

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

      اینی که شما می‌خواید خیلی تخصصی هست و باید ببینید که شما کلاً دوست دارید به کدوم سمت برید. بخث مفصلی هست ولی من تا جایی که می‌تونم کمکتون می‌کنم. معمولاً اونایی که میرن سراغ C++، آدم‌هایی هستند که طرفدار اوپن‌سورس‌اند و بیشترهاشون هم لینوکس کارند (البته ربطی نداره!)
      Java هم محاسن خودش رو داره؛ به‌طوری که کاملاً مستقل از سیستم‌عامل هست و روی هر دستگاه و سیستم‌عاملی کار می‌کنه. حتی همین یخچال‌هایی که بعضی‌هاشون صفحه نمایش دارند، اون‌ها بیشترشون جاوا هست!
      C# هم که محصول مایکروسافت هست که دقیقا اشتراک (و نه اجتماع) دو زبان C++ و Java هست. یعنی هر قابلیتی که توی C# هست، بدونید که توی هر جفت C++ و Java هست.

      امری باشه من در خدمت هستم.

    2. در مورد اینده شغلی چطورن بیشتر به کدوم نیاز هست

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

      به همشون نیاز هست و همشون رو لازم دارند! شما یک زبان رو شروع کن، بقیه زبان‌ها را در کمترز از ۲ هفته یاد می‌گیری. زیاد نگران این‌ها نباشید. اگرچه، برنامه‌نویسان C++ خیلی شاخ هستند و اصولاً توی زمینه‌های امنیت و نفوذ کار می‌کنند. چونکه C++ می‌تونه دسترسی مستقیم به منابع کامیتور داشته باشه.

    4. تشکر فراوان
      امیدوارم کردید با امید هر کاری می توان کرد

  3. سلام آقای موسوی ببخشید بنده این ترم دانشگاه درس مباحث ویژه که کنسول درس میدن اگر براتون امکان داره لینک یک منبع که کد نویسی کنسول باشه رو قرار بدید ممنون میشم

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

      کد نویسی با کنسول، تفاوت آنچنانی‌ای با Windows Application نداره … فوقش چند تابع متفاوت چند انجام عملیات input و output هست که خیلی ساده می‌تونید یاد بگیرید.
      متأسفانه سایتی که خودم از اون کنسول رو خونده باشم ندارم، اما من کتاب‌های O’Reilly رو خوندم و با اون‌ها کنسول و در ادامه Windows Application رو یاد گرفتم.

      موفق باشید!

  4. باسلام و خسته نباشید
    من این ترم درس شیوه و ارائه مطلب برداشتم خیلی گیر موضوع برای ارائه هستم میشه شما یه موضوع در این زمینه به من پیشنهاد کنید؟

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

      می‌شه لطف کنید که موضوع در چه زمینه‌ای می‌خواید؟ کلاً آیا می‌خواید مقاله تهیه کنید؟ مثلاً نظر شما در رابطه با بررسی شبکه‌های اجتماعی چیه؟

      موفق باشید!

    2. آره باید مقاله بدیم بررسی شبکه های اجتماعی خوبه ولی بچه ها انتخابش کردن لطفا اگه موضوعی مد نظرتونه چندتا منبع هم ازش بگید که بتونم مقاله تهیه کنم ازش
      باتشکر

  5. با سلام
    چند مورد:
    شرط: [CODE](textBox1.SelectedText!=””)[/CODE]( بررسی اینکه متنی در textbox1 انتخاب شده یا نه) برای عمل “Cut” , با زمانی که این شرط را هنوز برای “Cut” تعریف نکردیم در زمان اجرا یکسان عمل می کنه! انگار شرط اضافه ایه و به طور پیش فرض این شرط براش تعریف شده.
    و همچنین شرطی که برای عمل “Copy” اضافه شد به همین صورته! شایدم من بد متوجه شدم.

    در مورد “paste” به شکلی دیگر اگر چندین texbox در فرم داشتیم و بخواهیم در textbox ای که کاربر انتخاب و کلیک کرده متن paste بشه, چه کار باید کرد؟

    1. با سلام،

      اول از همه ممنونم از شما بابت دقتتون در آموزش‌های بنده، خیلی تشکر می‌کنم. در رابطه با موضوع بررسی شروط، دقت کنید که من اون بررسی کردن‌ها رو به‌دلیل ایجاد مشکل در کدهای قبلی اضافه نکردم؛ بلکه اینکه خواستم «نحوه» بررسی کردن رو آموزش بدم که اگر توی برنامه‌ای نیاز باشه شما بررسی کنید که آیا کاربری متنی رو انتخاب کرده یا نه، بتونید این‌کار رو انجام بدید. مثلاً اگر متنی انتخاب نشده بود، یک پیغام خطا در Message Box به کاربر نشون بده، ولی به‌صورت معمولی، نیازی وجود نداره. اما همیشه سعی کنید که برنامه‌های خودتون رو به‌صورت استاندارد بنویسید.

      در رابطه با Past کردن هم عجله نکنید، به‌تک تک اونها خواهیم پرداخت.

      موفق باشید.

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

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

      یک Undo و Redo واقعی (دقیقاً چیزی شبیه به نرم‌افزارهای دیگر مثل Photoshop، Word و ..) مراحل پیچیده داره و فعلاً خیلی فراتر از چیزی هست که ما درحال آموزش هستیم. چونکه به‌نحوی به مطالب شیء گرایی و class ها مربوط هست (چیزی که من بلد هستم البته!) و فعلاً موقعیت مناسبی برای مطرح کردنش نیست. البته خودش باید یک مطلب جداگانی‌ای باشه؛ انشاءالله اگر عمری برای ما باقی موند، سعی می‌کنم یک مطلب در این رابطه بنویسم.

      ممنونم از لطف شما،
      موفق باشید.

  7. سلام ببخشید من برنامه رو publish کردم ولی وقتی در یک سیستم دیگه میخوام SETUP و اجرا کنم پیغام میده که DLL های مربوطه به VS رو میخواد…چی کار کنم

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

      با چه نسخه‌ای از .NET Framwork برنامه را Compile، و سیستمی که قصد نصب آن را دارید چه نسخه‌ای از .NET Framwork را دارا می‌باشد؟

      موفق باشید!

  8. سلام
    آقای موسوی واقعا خسته نباشید
    ازتون خیلی ممنونم که این آموزش را آماده کردید
    راستش من تو این بخش یه مشکلی دارم
    وقتی
    textBox1.ClearUndo();
    رو تعریف میکنیم با زدن undo متن به حالت قبلی برنمیگرده و کلا میره به حالت اولش
    برای این مشکل باید چیکار کرد؟
    بازم از زحمتاتون تشکر میکنم

  9. سلام بهتر نبود برای تمرین میگفتید دوستان یک مسیج باکس تعریف کنن که وقتی چیزی برای کپی یا آندو نیست یک مسیج بده

    ممنونم از اموزشتون

  10. سلام ببخشید ما چگونه می توانیم که یک متن بیرون از سی شارپ را به textbox اضافه کنیم

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