سلام.
قصد دارم در این مطلب در مورد برنامه نویسی Console Application و Windows Form Application صحبت کنم. می خوام تفاوت های جزئی این دو روش برنامه نویسی رو برای شما خواننده عزیز، مشخص کنم. به احتمال زیاد، شما بعد از مطالعه این مطلب، بسیاری از مشکلات خودتون در برنامه نویسی رو حل شده، خواهید یافت. (چ جمله بندی ای :) )
قبل از اینکه بخوام بحث اصلی رو شروع کنم، اجازه دهید کمی در مورد این دو روش مهم برنامه نویسی، صحبت کنم.
برنامه نویسی به روش کنسول اپلیکیشن: در زمان های قدیم، کامپیوترها به اندازه الآن باحال نبودند. چیزی به نام ویندوز وجود نداشت. اصلا چیزی بنام گرافیک در کامپیوتر، وجود خارجی نداشت. یعنی شما فقط می تونستید با استفاده از صفحه کلید (Keyboard) ، دستورات مدنظر خودتون رو به کامپیوتر انتقال دهید و در نهایت کامپیوتر نتایج اجرای دستورات شما رو بصورت یک سری متن و نوشته، در یک صفحه با پس زمینه سیاه به نمایش در می آورد. تازه همین نمایش متن و نوشته، بر روی مونیتور (Monitor) ، خودش انقلابی در صنعت کامپیوتر و الکترونیک بوده :)
یه عده از برنامه نویسان خوش ذوق هم بودند که، با استفاده از همین متن و نوشته ها (کاراکترها)، سعی می کردند که یه محیط جذاب تری رو بوجود بیارن. حالا اون بندگان خدا چقدر به خودشون زحمت می دادند و اینکه آیا الآن (در زمان ما) رضایت شما رو جلب می کنند یا نه؛ بماند :)
مثلا یه همچی محیطی: (خوبه؟!)
برنامه نویسی به روش ویندوز فرم اپلیکیشن: با این روش دیگه عمرا اگه آشنا نباشید. اما یه کمی در مورد این روش هم صحبت می کنم. در این روش برنامه نویسی، شما به شکل خیلی جذابی با کامپیوتر تعامل خواهید کرد. دیگر خبری از اون صفحه سیاه و بی ریخت نیست. اما این فقط ظاهر کار هست؛ در باطن، برنامه نویسی به این روش تفاوت هایی با روش کنسولی داره. البته تفاوت ها خیلی زیاد و گیچ کننده نیستند و شما می تونید سریع این تفاوت ها رو درک کنید.
برنامه نویسی به روش کنسولی، خیلی ساده هست. چون برنامه خط به خط اجرا میشه و (تقریبا) تنها دستور خروجی، دستور زیر هست:
Console.WriteLine("Hello");
شما فقط با همون صفحه سیاه و بدترکیب سروکار دارید. بنابراین دستوری جز همین دستور وجود نداره. به همین علت بنده همیشه ترجیح میدم به هنرآموزان برنامه نویسی، (در جلسات اولیه) کنسول اپلیکیشن رو آموزش بدهم. شاید شما هم وقتی در مورد برنامه نویسی ویندوز فرم (در سطور بعدی) صحبت کنم، به همین نتیجه برسید.
برنامه نویسی به روش ویندوز فرم، کمی پیچیده هست. به نظرم یکی از مهم ترین علت های این قضیه این باشه که شما فقط با یک خروجی سر و کار ندارید. برنامه شما ممکنه ده ها خروجی داشته باشه. اما کافیه که بدونید چطور با این همه خروجی تعامل داشته باشید. برای مثال ممکنه برنامه شما دارای چندین TextBox ، چند ListBox و دکمه ها و... باشه. طبیعیه که نتونیم فقط با یک دستور، همه ی این خروجی ها (و ورودی ها) رو کنترل کنیم.
اجازه دهید برنامه محاسبه فاکتوریل را در هر دو روش، بررسی کنیم؛ تا با این تفاوت ها بیشتر آشنا شوید.
به کد زیر دقت کنید. این برنامه یک عدد را از ورودی گرفته و پس از محاسبه فاکتوریل آن عدد، نتیجه را در خروجی نمایش خواهد داد. درست حدس زدید. این برنامه به روش Console Application نوشته شده.
using System; using System.Collections.Generic; using System.Text; namespace Factorial1 { class Program { static void Main(string[] args) { int n = Convert.ToInt32(Console.ReadLine()); int f = 1; for (int i = 1; i <= n; i++) { f *= i; } Console.WriteLine("{0:5}! = {1:15}",n,f.ToString()); Console.ReadKey(); } } }
کدی که در بالا می بینید، کل برنامه Console Application برای محاسبه فاکتوریل عدد n در سی شارپ بود.
حالا به ساختار همین برنامه در Windows Form Application دقت کنید:
ابتدا یک پروژه Windows Form Application می سازیم. بعد فرم برنامه رو بصورت زیر طراحی می کنیم. البته این طراحی ظاهر برنامه، کاملا به سلیقه شما بستگی داره.
روی دکمه دابل کلیک می کنیم تا بتونیم برای رویداد Click اون برنامه نویسی کنیم. در نهایت کد برنامه به شکل زیر در میاد:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace factoral2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int n = Convert.ToInt32(textBox1.Text); int f = 1; for (int i = 2; i <= n; i++) { f *= i; } label2.Text = String.Format("{0:5}! = {1:15}", textBox1.Text, f.ToString()); } } }
البته یادتون باشه که این کد، تمام کدی نیست که برای نوشتن برنامه محاسبه فاکتوریل به روش Windows Form Application نوشته شده. بسیاری از کدها رو خود ویژوال استودیو تولید می کنه و احتمالا شما بی خبر بوده اید. اما در این پست بحث ما بر روی اون کدهایی که بصورت اتوماتیک توسط ویژوال استودیو تولید میشن نیست.
به برنامه دقت کنید...
- این برنامه زمانی محاسبه فاکتوریل را شروع می کند که کاربر روی دکمه "محاسبه" کلیک کرده باشه. در نسخه کنسولی این برنامه، کاربر یک عدد را وارد می کرد و بعد از فشار دادن کلید Enter ، برنامه، محاسبه فاکتوریل را شروع می کرد.
- در این برنامه کاربر باید عدد مورد نظر خود را در TextBox وارد کند. ما می تونستیم بجای تکست باکس، کنترل های دیگری مثل NumericUpDown قرار دهیم؛ یا اینکه مثل برنامه ماشین حساب ویندوز، برای ورود اعداد، از دکمه ها استفاده کنیم و...
اما در برنامه کنسولی، برنامه هیچ کار دیگری بجز انتظار برای ورود عدد، انجام نمی دهد و تنها راه وارد شدن عدد، همان راه است. (هرچند راه که زیاده؛ اما کی میره اون همه راه رو؟!) - در این برنامه، خروجی را در Label2 به نمایش در آوردیم؛ سلیقه ای هست دیگه! شما می تونید نتیجه رو در یک TextBox دیگه نشون بدید، یا اگر دوست نداشتید روی دکمه نمایش بدید (کلمه "محاسبه" که روی دکمه نوشته شده، به جواب فاکتوریل تبدیل بشه). این درحالی است که در حالت کنسول اپلیکیشن، ما راهی جز نمایش نتیجه برنامه در همان صفحه سیاه نداشتیم.
به قول سایت ویکی پدیا، این مقاله خورد و خمیر هست :)
شما با سوالات و نظرات خودتون به جون گرفتنش کمک کنید.
موفق باشید.
یاعلی
سلام
اقا یه راح حل یادم میدی چطوری از زمان تو کنسول استفاده کنم؟
مثلا تا ثانیه 10 کنسول خالی باشه
ثانیه 11 خط اول کد ثایپشه
ثانیه 15 خط بعدی و ...