1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت اول

شروع موضوع توسط minaaa ‏10/11/11 در انجمن C #C++

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    [h=2][/h]
    ايجاد يك پروژه تحت ويندوز در دات نت
    براي ايجاد يك پروژه تحت ويندوز كافي است بعد از با كردن محيط توسعه نرم افزار ويژوال استوديو دات نت (Visual Studio .NET) بر روي زبان سي شارپ كليك كنيد و سپس از قسمت Template گزينه Windows Application را انتخاب نمائيد. سپس نام پروژه خود را تايپ كرده و مسير پروژه را مشخص نمائيد. (شکل 1-1)
    [​IMG]
    [​IMG]
    بعد از ايجاد پروژه براي اينكه ببينيم هر پروژه تحت ويندوز شامل چه فايل هايي است از منوي View گزينه Solution Explorer را انتخاب كرده و به ساختار فايل هاي پروژه خود نگاهي بياندازيم. (شکل 2-1)
    [​IMG]
    همانطور كه مي بينيد هر پروژه تحت ويندوز به صورت پيش فرض شامل چند قسمت مي باشد:
    Properties - در اين قسمت تنظيمات و خواص پروژه مي باشد. در مورد اين قسمت در قسمت هاي بعدي توضيح خواهم داد.
    References -در اين قسمت ارجعات اين پروژه به Assembly ها و پروژه هاي ديگر مي باشد.
    Form.cs - يك فرم كه به صورت پيش فرض در پروژه موجود است.
    البته اگر بيشتر دقت کنيد خواهيد ديد که زير Form1.cs يک فايل ديگري به نام Form1.Designer.cs هم وجود دارد.
    Program.cs - كلاس Program كه برنامه ما از متد Main اين كلاس شروع مي شود.
    از کلاس Program شروع مي کنيم. اگر بر روي اين کلاس دوبار کليک کنيد تا آن را باز کنيد ، خواهيد ديد که اين کلاس يک کلاس static است که داراي يک متد به نام Main مي باشد. (شکل 3-1) همانطور که قبلا هم گفتم ، اين متد محلي است که Application شما از آنجا شروع خواهد شد. داخل اين متد چند خط کد نوشته شده است. خطوط اول و دوم براي ايجاد حالت ويژوال نرم افزار شماست که بعد ها بيشتر توضيح خواهيم داد. اما در خط از متد Run کلاس Application استفاده شده است. کلاس Application يک کلاس Utility براي دسترسي يافتن به اطلاعات نرم افزار شماست. اين کلاس در namespaceي به نام System.Windows.Forms قرار دارد. System.Windows.Forms يکي از مهم ترين namespace هايي است که در توليد Windows App ها استفاده مي کنيم.


    [​IMG]

    تعيين فرم اصلي نرم افزار
    متد Run در کلاس Application فرم اصلي نرم افزارتان را براي شروع نرم افزار اجراء مي کند. در واقع در سي شارپ ويندوز براي اينکه فرم اصلي نرم افزارتان را مشخص کنيد بايد يک شيء از جنس يک Form به اين متد پاس کنيد. (شکل 4-1) همچنين يک متد به نام Exit هم در اين کلاس وجود دارد که براي خارج شدن از نرم افزار استفاده مي شود.
    [​IMG] این تصویر تغییر اندازه داده شده است. برای مشاهده تصویر کامل روی این جایگاه کلیک کنید.[​IMG]
    فرم چيست؟
    قبل از شروع برنامه نويسي در Windows Application توجه به اين نکته که فرم هاي ويندوزي نيز کلاس هستند و تمامي شرايط ، قوانين و ... که در دوره قبلي اشاره شد ، در مورد آن ها نيز صدق مي کند. مهم ترين تفاوت آن ها اين است که در محيط Visual Studio .NET داراي يک Visual Designer مي باشند که به شما امکان طراحي ويژوال را مي دهد. دقت کنيد که تمام تغييراتي که شما توسط Designer ايجاد مي کنيد به صورت کد در کلاس شما اضافه مي شوند. يعني اگر شما همان کد ها را با استفاده از يک نرم افزار ساده مثل Notepad در کلاستان تايپ کنيد ، همان شکل ظاهري را خواهيد داشت.
    کلاس فرم يک کلاس پايه است که داراي امکانات بسياري است که در طول دوره به آن ها مي پردازيم. وقتي شما يک فرم جديد به نرم افزارتان اضافه مي کنيد ، در واقع يک کلاس جديد با نام دلخواه (مثلا Form1 يا frmMain) ايجاد مي کنيد که از کلاس Form به ارث رفته است. (شکل 5-1) پس تمام امکانات کلاس پايه به شما ارث مي رسد. يکي از اين امکانات همان نحوه نمايش فرم در ويندوز مي باشد. براي ديدن کد هاي يک فرم کافيست در Solution Explorer آن را انتخاب کنيد و بر روي آن راست کليک کرده و در نهايت گزينه View Code را کليک نمائيد. (اينکار را مي توانيد با استفاده از کليد F7 نيز انجام دهيد). در رابطه با کد نويسي در فرم در قسمت بعدي توضيح خواهم داد.
    [​IMG]


    ايجاد فرم هاي جديد
    براي ايجاد فرم جديد در پروژه خود کافيست در Solution Explorer بر روي پروژه خود راست کليک کرده و گزينه Add کليک کرده و در نهايت گزينه Windows Form را انتخاب نمائيد. در پنجره اي که باز مي شود نام فرم خود را انتخاب نمائيد. دقت فرمائيد که نام فرم شما ، نام کلاس شما نيز خواهد بود. (شکل 6-1)
    [​IMG]
    اضافه کردن کنترل ها بر روي فرم
    براي اضافه کردن کنترل ها بر روي فرم خود ، از Toolbox (براي فعال کردن Toolbox از کليد هاي Alt + Ctrl + X استفاده کنيد) کنترل خود را انتخاب کرده و بر روي فرم خود Drag & Drop کنيد.
    تست کردن فرم جديد
    براي تست کردن فرم خود کافي است در کلاس Program داخل متد Main فرم اصلي را به فرم جديد خود تغيير دهيد. به عنوان مثال در صورتيکه فرم جديد شما Form2 مي باشد ، کافيست يک شيء از اين کلاس به متد Run در کلاس Application پاس کنيد. (شکل 7-1)
    [​IMG]


    گردآورنده: طه - Borna66
     
    وضعیت سفید و jodiabut از این پست تشکر کرده اند.
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت اول

    [h=2]آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت دوم[/h]

    بررسي فرم ها در برنامه هاي تحت ويندوز
    تمامي فرم هايي که شما ايجاد مي کنيد از يک کلاس به نام Form در System.Windows.Form به ارث رفته اند پس بياد داشته باشيد که وقتي شما يک فرم به برنامه تان اضافه مي کنيد ، در واقع يک کلاس جديد به پروژه اضافه مي کنيم. کلاسي که ايجاد مي شوند کلاس هايي Partial هستند. (شکل 1-2) کلاس هاي Partial کلاس هايي هستند که مي توانند در بيش از يک فايل تقسيم شوند. در واقع تعريف اين کلاس ها از مجموع کد هاي نوشته شده در چند فايل ايجاد مي شود. اما چرا؟
    [​IMG]
    تصوير 1-2
    محيط Visual Studio .NET يک محيط Visual است ، به اين معني که شما مي توانيد فرم هايتان را به صورت گرافيکي (Visual) طراحي کنيد. مثلا شما از ليست کنترل هايتان (Toolbox) يک کنترل از نوع TextBox ، يک کنترل از نوع Label و .... بر روي فرم تان قرار مي دهيد. محل قرار گيري اش را مشخص مي کنيد ، اندازه و ساير اطلاعاتش را مشخص مي نمائيد. اما توجه داشته باشيد که اين محيط Visual در واقع در پس اين ظاهر گرافيکي براي شما کد هايي توليد مي کند که در نتيجه آن کد ها فرم شما به صورتي که ميبينيد نمايش داده مي شود.
    به عنوان مثال وقتي شما يک TextBox روي صفحه ايجاد مي کنيد ، در واقع يک شيء از يک کلاس TextBox در System.Windows.Forms ايجاد مي کنيد و آن را به ليست کنترل هاي فرم تان اضافه مي کنيد. سپس اطلاعاتي مثل اندازه ، محل قرارگيري ، نام کنترل (ID يا Name) و .... را تعيين مي کنيم. حالا اين کد ها کجا مي رود؟
    اگر از منوي View گزينه Solution Explorer را انتخاب کنيد ، خواهيد ديد که يک فايل به نام Form1.cs داريم ، اين همان فرم اول شماست. حالا از گزينه + کنار نام اين فايل را کليک کنيد ، خواهيد ديد که يک فايل به نام Form1.Designer.cs نيز وجود دارد. (شکل 2-2) بر روي فايل دوبار کليک کنيد. داخل اين فايل ادامه تعريف کلاس Form1 با استفاده از تعريف Partial را خواهيد يافت. حالا اگر داخل اين فايل را نگاهي بياندازيد ، خواهيد ديد که Region به نام Windows Form Designer generated code وجود دارد (شکل 3-2) که اگر آن را باز کنيد يک متد به نام InitializeComponent در اين کلاس تعريف شده است ، داخل اين متد تعريف و ست شدن خصوصيات کنترل Textbox تان را خواهيد يافت. (شکل 4-2) اينجا جايي است که تغييرات شما در محيط ويژوال ثبت و نگهداري مي شوند. توجه به اينکه بسيار مهم است که تمامي اين کد ها (شامل کد هايي که در فايل Form1.cs هستند + کد هاي موجود در فايل Form1.Designer.cs) باهم تعريف کلاس شما را مي سازند.
    [​IMG]
    تصوير 2-2
    [​IMG]
    تصوير 3-2
    [​IMG]
    تصوير 4-2
    پس دليل خرد شدن تعريف کلاس Form1 اين است که بتوان تعريف هايي که Visual Studio .NET ايجاد مي کند را از کد هاي که شما به صورت دستي مي نويسيد جدا کند تا شما راحت تر باشيد. (دوستاني که با سي شارپ 1 و 1.1 کار کرده اند بايد به ياد داشته باشند که در Visual Studio .NET نسخه هاي 2002 و 2003 چون تعريف Partial وجود نداشت ، اين کد ها داخل يک Region در همان فايل Form1.cs وجود داشت.)
    ادامه دارد...

    گردآورنده: طه - Borna66
     
    یک شخص از این تشکر کرد.
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت اول

    [h=2]آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت سوم[/h]
    خصوصيات کلاس فرم - Form Properties بعد از شناخت ساختار هريک از فرم ها در سي شارپ ، به بررسي خصوصيات مهم کلاس فرم مي پردازيم. وقتي شما يک فرم ايجاد مي کنيد ، براي فرمتان يک اسم مشخص مي کنيد ، اين اسم از طريق پنجره Properties و خصوصيت Name قابل دسترسي است. توجه داشته باشيد که اسامي به صورت پيش فرض با Form1 ، Form2 و .... ساخته مي شوند. براي مثال من اسم فرم اصلي خودم را به frmMain تغيير مي دهم. (پيشنهاد مي کنم در نام گذاري فرم هايتان يک قانون خاص را رعايت کنيد. به عنوان مثال من اسامي فرم ها را با frm شروع مي کنم و بعد اسم فرمم را ذکر مي کنم. استفاده از يک فرمول شبيه به اين خوانايي کد شما را بالا مي برد.)
    خوب شما در تمامي فرم ها (به صورت پيش فرض) يک متن را در قسمت بالا سمت چپ به صورت عنوان فرم مي بينيد. براي مشخص کردن عنوان فرم خود از خصوصيت Text استفاده کنيد. خصوصيات ControlBox براي نمايش يا عدم نمايش Icon ، کليد بيشينه ، کليد کمينه و کليد بستن فرم استفاده مي شود. البته شما مي توانيد نمايش يا عدم نمايش کليد هاي بيشينه و کمينه را با استفاده از خصوصيات MaximizeBox و MinimizeBox کنترل کنيد. همچينين نمايش يا عدم نمايش آيکون فرم را با استفاده از گزينه ShowIcon مشخص کنيد. ضمنا با استفاده از گزينه Icon مي توانيد آيکون فرمتان را مشخص کنيد. همچنين با استفاده از گزينه ShowInTaskBar مي توانيد مشخص کنيد که فرم شما در TaskBar ويندوز نمايش داده شود يا خير.
    [​IMG]
    خصوصيت BackColor و ForeColor براي مشخص کردن رنگ پس زمينه فرم و رنگ متون فرم استفاده مي شوند. خصوصيات BackgroundImage و BackgroundImageLayout براي مشخص کردن تصوير پس زمينه فرم و همينطور نحوه نمايش تصوير پس زمينه استفاده مي شود. به عنوان مثال اگر تصوير پس زمينه شما کوچکتر از اندازه فرم شما باشد. شما مي توانيد با مشخص کردن مقدار Tile يا Stretch براي BackgroundImageLayout اندازه تصوير را با فرمتان مطابقت دهيد. در حالت Tile تصوير شما به تعداد لازم بر روي صفحه تکرار خواهد شد و در حالت Stretch تصوير شما به اندازه فرمتان کش داده خواهد شد.


    [​IMG]
    [​IMG]
    با استفاده از گزينه Size مي توانيد اندازه فرمتان را مشخص کنيد. همچنين مي توانيد با استفاده از خصوصيت WindowState وضعيت اندازه فرمتان را مشخص نماييد. مقادير Normal ، Minimize و Maximized را مي توانيد استفاده کنيد. در صورتيکه مقدار اين خصوصيت را Maximize يا Minimized ست کنيد خصوصيت Size شما اثر نخواهد کرد.
    گزينه StartPosition مي توانيد محل باز شدن فرمتان را مشخص نمائيد. در صورتيکه مقدار اين خصوصيت را به Manual ست کنيد مي توانيد با استفاده از خصوصيت Location محل نمايش فرم را به صورت X,Y مشخص کنيد. يا اينکه با استفاده از مقادير CenterScreen يا CenterParent فرمتان را در وسط صفحه نمايش يا وسط فرم پدر نمايش دهيد. مقادير WindowsDefaultBound و WindowsDefaultLocation در محل پيش فرض پنجره در ويندوز مي باشند با اين تفاوت که وقتي مقدار بر روي WindowsDefaultBound ست شده باشد اندازه فرمتان نيز به اندازه پيش فرض Windows تغيير خواهد کرد.


    فرم خصوصيات بسيار ديگري دارند که در پست هاي بعدي توضيح خواهم داد. در پست آينده به رويداد هاي فرم ها مي پردازيم. ادامه دارد...

    گردآورنده: طه - Borna66
     
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت اول

    [h=2]آموزش برنامه نويسي تحت ويندوز - سي شارپ دات نت - قسمت چهارم[/h]
    رويداد هاي فرم - Form Events

    همانطور که قبلا صحبت شده بود تمامی فرم هایی که شما ایجاد می کنید از یک کلاس به نام System.Windows.Forms.Form به ارث رفته اند و در واقع فرم هایی که شما در محیط Visual Studio .NET ملاحظه می کنید کلاس هایی هستند که از کلاس Form به ارث رفته اند. در کلاس Form تعداد زیادی رویداد تعریف شده است که به شما امکان می دهد تا در مواقع مورد نظر اطلاعاتی در رابطه با اتفاقاتی که بر روی فرم شما می افتد داشته باشید.
    رويداد Form Load
    اولین رویدادی که معمولا در فرم استفاده می شود (رویداد پیش فرض) رویداد Load می باشد. این رویداد دارای آرگونی از جنس EventArgs می باشد (که به این معناست که هیچ اطلاعات خاصی در رابطه با رویداد به شما نمی دهد). معمولا در مواقعی که شما می خواهید قبل از نمایش فرمتان یک سری کار را انجام دهید از این رویداد استفاده می کنید. برای استفاده از این رویداد کافی است که فرمتان را باز کنید (نمایش Visual) سپس بر روی فرم خود دوبار کلیک کنید. در این صورت یک متد به نام Form_Load در کد کلاس فرم شما ایجاد خواهد شد. تمامی کد هایی که در این متد نوشته شوند در موقع Load شدن فرم شما (قبل از نمایش) اتفاق خواهد افتاد. به عنوان مثال فرض کنید که شما یک فرم صدور فاکتور دارید. حالا موقع Load می خواهید که فرمتان اطلاعات قبلی ذخیره شده در بانک اطلاعاتی را خوانده و در یک GridView که در قسمت پایین فرم شما است نمایش دهد.
    رويداد Form Closing
    رویداد Form Closing زمانی رخ می دهد که درخواستی برای بستن فرم تان ارجاع شده باشد. چه این درخواست توسط کاربر با زدن کلید های Alt + F4 باشد(یا کلیک بر روی دکمه X) , چه از طریق کد و با فراخوانی Application.Exit یا this.Close و یا از هر طریق دیگر. این رویداد دارای آرگومانی از جنس FormClosingEventArgs می باشد که اطلاعاتی همچون منبع درخواست برای بسته شدن فرم (از طریق خاصیتی به نام CloseReason که از جنس یک enum به نام CloseReason) و خاصیتی به نام Cancel برای ممانعت از بسته شدن فرم می باشد.
    فرض کنید که در یک فرم ورود اطلاعات فاکتور کاربر شما اقدام به ایجاد یک فاکتور جدید کرده است , اما در نهایت فراموش می کند که کلید ذخیره را بزند و بر روی دکمه بستن فرم کلیک می کند. حالا شما می توانید با چک کردن وضعیت فرمتان از طریق رویداد FormClosing و با استفاده از خصوصیت Cancel در صورت لزوم از بسته شدن فرمتان ممانعت به عمل آورید.
    [​IMG] این تصویر تغییر اندازه داده شده است. برای مشاهده تصویر کامل روی این جایگاه کلیک کنید.[​IMG]
    استفاده از MessageBox
    گاهي اوقات در نرم افزارهاي تحت ويندوز براي نمايش اطلاعات از کلاس MessageBox استفاده مي کنيم. براي اين کار کافي است متد Show از کلاس MessageBox را صدا بزنيم و پارامترهاي لازمش را مهيا کنيم. متد Show در کلاس MessageBox داراي چندين overload مي باشد. در مثال بالا من ابتدا پيغام هشداري که مي خواهم نمايش دهم را نويشتم و سپس عنوان پيغام را مشخص کردم . بعد کليد هايي که بايد نمايش دهند را از طريق يک enum به نام MessageBoxButton مشخص کردم ، سپس آيکون مورد نظر را انتخاب کردم (MessageBoxIcon) و در نهايت کليد پيش فرض را مشخص کنيد.
    دقت کنيد که انتخاب کليد پيش فرض در خيلي از مواقع حياتي است. مثلا شما قبل از حذف يک رکود بيا مانند مثال قبل موقع بسته شدن فرمتان با استفاده از MessageBox يک تاييديه از کاربر مي خواهيد:
    [​IMG]
    البته مي توانيد با پاس کردن MessageBoxOption.RtlReading و همينطور MessageBoxOption.RightAlign امکان نمايش متون فارسي را از راست به چپ داشته باشيد.
    در بيشتر موارد کاربران شما بدون توجه به متن MessageBox با زدن کليد Enter از شرٍ MessageBox خلاص مي شوند. پس من به صورت پيش فرض کليد دوم يعني No را انتخاب مي کنم که اگر Enter را کليک کرد ، رکورد حذف نشود و در صورتي که کاربر صراحتاَ کليد Yes را فشرد ، آن وقت رکورد را حذف مي کنم.
    نکته اي که نبايد فراموش کنيد اين است که متد Show در کلاس MessageBox يک خروجي از جنس DialogResult به شما مي دهد. در نتيجه شما مي توانيد تشخيص دهيد که بعد از نمايش MessageBox کاربر شما کدام گزينه را انتخاب کرده و در مقابل آن عکس العمل مناسب را انجام دهيد.
    کلاس فرم داراي رويداد هاي بسياري است ، که در حوصله اين سري آموزشي نيست اما در پست بعدي به چند رويداد مهم ديگر اين کلاس خواهيم پرداخت.

    گردآورنده: طه - Borna66
     
    یک شخص از این تشکر کرد.