رفتن به مطلب

پست های پیشنهاد شده

csharp3.png

سلام دوستان :icon_gol:

 

در این تاپیک قصد داریم که به کمک هم #C یاد بگیریم.

 

شیوه آموزش به اینصورته که از ابتدا شروع به نوشتن پروژه می کنیم و همزمان با نوشتن پروژه، جزئیات بخش ها و کدها بیان میشه.

 

تقریبا هر دو روز یکبار، آموزش جدید قرار میگیره.

 

لطفا اگه نظر یا پیشنهادی دارید بیان کنید. امیدوارم بتونیم به کمک هم آموزش خوب و کاملی داشته باشیم. :a030:

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 1:

 

محیط برنامه نویسی:

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.

 

 

ایجاد پروژه جدید:

 

بعد از نصب برنامه، ابتدا در یک درایو پوشه ایی با نام دلخواه (مثلا "project1") ایجاد می کنیم. در این فولدر، دو فولدر به نام های data و proj ایجاد می کنیم. در فولدر proj فایلهای مربوط به #C قرار می گیرد و در فولدر data فایلهای مربوط به sql server قرار می گیرد. به اینصورت فایلها در فولدر (مثلا project1) متمرکز است.

 

File -> New -> project -> visual c# -> windows -> windows from application

erj4dmpnsavexa7b02jx.jpg

در قسمت 7: نام پروژه

در قسمت 8: مکان ذخیره پروژه (در مثال ما مسیر project1/proj) را مشخص می کنیم.

در قسمت 9: بدلیل تعیین مسیر ذخیره سازی در مرحله 8، تیک مربوط به create directory for solution را برمی داریم.

 

بعد از طی مراحل بالا، صفحه پروژه برای طراحی باز می شود.

 

 

2m6pj4xfd9niky2mdeil.jpg

1- نوار منو (Meno Bar)

2- نوار ابزار استاندارد (Standard Bar)

3- جعبه ابزار (Toolbox)

4- پنجره طراحی فرم(Form Design)

5- پنجره مرورگر پروژه (Solution Explorer)

6- پنجره خواص و خصوصیات (Properties Window)

که در آینده با بخش های مختلف آشنا می شویم

 

کدهای پشت فرم

در پشت فرم، دو سری کد وجود دارد:

1- View->code (کلید F7)

 

szgmgfuo0oiuee1bitnd.jpg

 

1. در ابتدای این کد، یکسری using وجود دارد که یکسری کلاسهای کامپایل شده است که بصورت فایل dll هستند و بهمراه net frame work. بروی کامپیوتر نصب می شود و باعث می شود که فرآیند کدنویسی سریعتر انجام شود.

بعنوان مثال برای کار با پایگاه داده از dll مربوط به system.data استفاده می کنیم و برای کار با کنترلرهایی مثل label و ... از system.windows.forms استفاده می کنیم.

 

2. هر پروژه ایی که شروع می کنیم شامل یک name space است و هر name space شامل چندین کلاس است. کلاسها، برای نظم دهی به پروژه است. توابع را داخل کلاس می نویسیم. کلاسها را می توان به روشهای مختلف با هم ارتباط داد.

 

3. در ابتدا، name space شامل یک کلاس بنام form1 است که داخل دو آکولاد باز و بسته است. در پمحدوده کلاس می توان توابع را تعریف کرد.

 

4. بصورت پیش فرض یک تابع پیش فرض بنام form1 ایجاد می شود که به آن تابع سازنده می گویند.یک کلاس می تواند تابع سازنده داشته باشد یا نداشته باشد. تابع سازنده، دو خصوصیت مهم دارد:

الف) حتما هم نام کلاس است.

ب) اولین تابعی است که در طول کلاس اجرا می شود و با صدا زدن کلاس خالی بصورت پیش فرض اولین تابع سازنده اجرا می شود.

 

تابع سازنده شامل تابعی بنام ()InitializeComponent است. این تابع، قبلا نوشته شده است و اگر بروی آن راست کلیک کرده و go to definition را انتخاب کنیم می توانیم تعریف تابع را ببینیم که بخش دوم کدهاست.

 

 

2- form1.designer.cs

در این کد، یکسری توابع وجود دارد مانند:

 

InitializeComponent: که کدهای تمام کارهایی که بصورت طراحی انجام می دهیم مانند اضافه کردن label و textbox و ... در این قسمت قرار دارد.

Dispose: که تابع مخرب است و پس از اینکه اجرای پروژه تمام شد، تمام کلاس ها و آیتم ها را تخریب می کند تا حافظه اشغال نشود.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 2

تعریف توابع

توابع در محدوده کلاسها ایجاد می شود و همانطور که گفته شد در هر پروژه بطور پیش فرض، یک تابع بنام form1 وجود دارد.

در #C دو تابع داریم:

 

1. توابعی که خروجی ندارند و صرفا یک کار انجام می دهند.

(پارامتر ورودی) نام تابع void سطح دسترسی

}

دستورات

{

 

2. توابعی که خروجی دارند.

(پارامتر ورودی) نام تابع نوع خروجی سطح دسترسی

}

دستورات

{

 

مثال1:

تابعی بنویسید که موقعیت شروع یک رشته را در رشته دیگر برگرداند. (مثلا موقعیت شروع reza در alireza، سه است. دقت کنید که موقعیت از صفر شروع می شود)

جواب مثال 1:

ابتدا یک کلاس تعریف می کنیم. برای ایجاد کلاس، روی نام پروژه در پنجره solution explorer راست کلیک-> add اسم کلاس را می نویسیم (مثلا lib.cs).

(کلاس form1 دارای یک ظاهری بنام فرم است ولی کلاسی که ایجاد می کنیم ظاهری ندارد.)

 

کد زیر را داخل کلاس تعریف شده می نویسیم.

 

ndf869a6rqmk3pzoagiu.jpg

 

تعریف متغیر: برای تعریف متغیر ابتدا نوع متغیر و سپس نام متغیر را می نویسیم. مثال: string s

 

()IndexOf: متدی آماده است که string (رشته) می گیرد و موقعیت رشته دریافتی را در رشته به ما می دهد.

بعد از نوشتن تابع، باید آنرا فراخوانی کنیم.

 

فراخوانی تابع

به این منظور ابتدا form1 را در پنجره solution explorer دبل کلیک کرده و یک کنترلر label و دو کنترلر textbox و یک کنترلر button از پنجره toolbox اضافه می کنیم.

 

 

5am3wytosw3w5ao6oqo2.jpg

 

هر کنترلر، یکسری خصوصیات دارد که در پنجره properties قرار دارند. در ادامه خصوصیات مهم چهار کنترلر استفاده شده، بیان می شود. هرکدام از کنترلرها را که انتخاب کنیم می توانیم خصوصیات آنرا پنجره properties تغییر دهیم.

 

Label: این کنترلر شامل متنی است که در صفحه نمایش داده می شود. برای نوشتن متن مورد نظر، در پنجره properties، خصوصیت Text آنرا تغییر می دهیم. برای نوشتن متن فارسی یا متن فارسی و انگلیسی باید خصوصیت RightToleft آنرا برابر Yes قرار دهیم تا متن، بهم ریخته نشود.

 

Textbox: این کنترلر برای وارد کردن مقدار یا کاراکتر توسط کاربر است. در کد نویسی با نام (name) کنترلرها سروکار داریم. برای نامگذاری دو نکته مهم است:1. فارسی نباشد. 2. هدفمند باشد به اینصورت که قسمت اول نام مخفف نوع کنترلر و قسمت دوم مشخص کننده نام کنترلر باشد مثلا برای کنترلرهای textbox مربوط به رشته جستجو txtstr1 و برای textbox مربوط به عبارت جستجو شده txtstr2 قرار می دهیم.

 

Botton: کنترلی است که با کلیک بروی آن عملی انجام می شود. یک کنترلر botton به فرم اضافه کرده و خصوصیت name آنرا به btnsearch و خصوصیت text آنرا به جستحو تغییر می دهیم.

 

می خواهیم وقتی روی دکمه جستجو کلیک کردیم تابع findchar که قبلا تعریف کردیم فراخوانی شود. یعنی در event کلیک btnsearch تابع findchar فراخوانی شود. به این منظور می توانیم روی دکمه جستجو دوبار کلیک کنیم و یا اینکه در قسمت properties مربوط به دکمه جستجو، علامت ساعقه را کلیک کنیم تا event های مربوط به button نشان داده شود و سپس روبروی event مربوط به click دوبار کلیک کنیم.

 

نکته مهم :

ما دو کلاس داریم که فرم مربوط به کلاس form1 است و کلیک btnsearch در آن قرار دارد و یک کلاس lib که تابع findchar در آن تعریف شده است. برای فراخوانی یک تابع در یک کلاس در کلاس دیگر باید علاوه بر اینکه تابع را public تعریف می کنیم، همچنین سراسری هم تعریف شود به این منظور از کلمه static در تعریف تابع در کلاس lib استفاده می کنیم. در غیر اینصورت قادر به فراخوانی کلاس lib در کلاس form1 نیستیم.

 

[color=#0000ff]public static int[/color] findchar([color=#0000ff]string [/color]s, [color=#0000ff]string [/color]str)

 

برای فراخوانی تابع findchar در کلاس form1 به اینصورت عمل می کنیم:

9adenyxbppgsu6tqh2qc.jpg

برای فراخوانی تابع بصورت زیر عمل می کنیم:

 

(ورودی ها)نام تابع . نام کلاس. Namespace = نام متغیر نوع متغیر

 

 

Messagebox: پیغامی را به کاربر نشان می دهد و این پیغام از نوع string(رشته) است.

()ToString: عدد را به رشته تبدیل می کند. علت استفاده اینست که messagebox باید رشته باشد.

 

اجرای برنامه:

برای اجرای برنامه کلیک F6 را کلیک می کنیم. با اینکار برنامه شروع به کامپایل می کند. حال اگر در textbox اول رشته ایی نوشته (مانند reza) و در textbox دوم رشته دیگر مثلا alireza، در پنجره پیغام موقعیت شروع ali در alireza نشان داده می شود. شروع موقعیت در #C از صفر است. بنابراین عدد 0 نشان داده می شود.

 

 

ztp37vp8jl6n1aay209d.jpg

طریقه چسباندن رشته به متغیر در message box:

اگر بخواهیم علاوه بر موقعیت رشته در رشته دیگر، متنی نیز در پنجره پیغام به کاربر نشان داده شود، نوشته هایی که به صورت ثابت هستند و به همان شکل باید به کاربر نشان داده شود را در دابل کوتیشین (" ") قرار می دهیم.

 

 

 
  [color=#0000ff]public partial class[/color] [color=#008000]Form1 : Form[/color]
   {
       [color=#0000ff]public [/color]Form1()
       {
           InitializeComponent();
       }

       [color=#0000ff]private void[/color] btnsearch_Click([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]string [/color]s1 = [color=#0000ff]this[/color].txtstr1.Text;
           [color=#0000ff]string [/color]s2 = [color=#0000ff]this[/color].txtstr2.Text;
           [color=#0000ff]int [/color]i = project1.[color=#008080]lib[/color].findchar(s1, s2);
           [color=#008080]MessageBox[/color].Show([color=#ff0000]"The position of "[/color]+s1+[color=#ff0000]"in "[/color] +s2+[color=#ff0000]"is : "[/color] +i);
       }
   }

 

نکته: به دلیل آنکه به رشته چسبیده شده است نیاز به تابع Tostring نیست.

 

 

hynyym3yqbdank61debl.jpg

 

اگر بخواهیم موقعیت را از یک نشان دهد بدلیل اینکه اولویت پرانتز از همه بیشتر است، می توانیم بصورت زیر عمل کنیم:

    [color=#008080]MessageBox[/color].Show([color=#ff0000]"The position of "[/color]+s1+[color=#ff0000]"in " [/color]+s2+[color=#ff0000]"is : "[/color] +(i+1));

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 3

 

باز کردن پروژه ذخیره شده:

 

برای باز کردن پروژه ایی که قبلا ایجاد شده است، به مسیر ذخیره سازی آن رفته و بر روی نام پروژه(در اینجا project1) با پسوند csproj. دابل کلیک می کنیم.

index.php?module=thumbnail&file=4npux29ndjttt8av7wq.png

Event, Properties و Method

برای هر کلاس در C# ممکن است یکسری Event, Properties و Method وجود داشته باشد.

 

Event: اتفاقی است که بر اثر آن باید عملی انجام شود. مثلا کلیک یک دکمه.

برای صدا زدن یک event خاص، در پنجره properties، گزینه event را انتخاب می کنیم(مانند شکل) و سپس بروی event مورد نظر دوبار کلیک می کنیم. با اینکار کد مربوط به event باز می شود.

urgyf1lu6k3a8t6nvbc.png

Properties: مشخصات کنترلرهاست. مشخصه ای که می تواند Set(مثال 1) یا get (مثال 2) ویا هر دو آن شود.

(1) [color=#0000ff]this[/color].txtsrt1.Text=” ali”;
(2) s2 = [color=#0000ff]this[/color].txtsrt1.Text;

نکته: در مثال های بالا، text یک properties است.

خط زیر به اینصورت خوانده می شود: "من از propertyِ textِ تکسباکس txtstr1 استفاده می کنم."

[color=#0000ff]this[/color].txtsrt1.Text;

مثال: مثلا برای مشخص کردن طول یک رشته از property مربوط به length استفاده می شود که ذاتا می تواند فقط Get شود.

int h= [color=#0000ff]this[/color].txtsrt2.Text.Length;

Method: متد یک کار است. هر متد حتما پرانتز باز و بسته دارد.

مثال 1 متد: پاک کردن یک تکسباکس.

            [color=#0000ff]this[/color].txtsrt1.Clear();

مثال 2 متد: متد show که این متد، نیاز به ورودی هم دارد.

            [color=#008080]MessageBox[/color].Show("hi");

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

تمرین 1:

--------------------------------------------------------------------------------------------------------------------------------------------------------------

برنامه ایی بنویسید که به محض لود فرم، یک متن مثلا "لطفا جمله اول را تایپ کنید" در تکسباس 1 نوشته شده باشد و به محض کلیک کاربر، آن نوشته پاک شود.

 

جواب 1:

برای اینکار، همانطور که از صورت تمرین هم مشخص است باید دو کار انجام شود:

مرحله 1. باید در event مربوط به load فرم، کد نوشته شود.

مرحله 2. سپس propertyِ textِ تکسباکس، سِت شود.

 

مرحله 1:

ابتدا فرم را انتخاب می کنیم و در پنجره properties و در قسمت event ها، بروی event مربوط به load فرم دوبار کلیک می کنیم.

d4aev72ltyxtvyfnomb5.png

 

روش دوم اینست روی فرم دوبار کلیک می کنیم با اینکار event مربوط به load فرم صدا زده می شود و کد مربوط به load فرم باز می شود.

1ud7x8mh58ih3f33y5t.png

سپس برای اینکه با لود شدن فرم، متن " جمله اول را تایپ کنید " ظاهر شود کد زیر را در event مربوط به لود فرم می نویسم:

        [color=#0000ff]private void[/color] Form1_Load([color=#0000ff]object [/color]sender, [color=#008080]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].txtsrt1.Text = [color=#ff0000]" اول را تایپ کنید جمله "[/color];
       }

 

مرحله 2:

در این مرحله می خواهیم وقتی کاربر بروی textbox اول کلیک کرد متن بالا پاک شود. ابتدا textbox یک را کلیک می کنیم و سپس event کلیک را در پنجره properties دبل کلیک کنید.

        [color=#0000ff]private void[/color] txtsrt1_Click([color=#0000ff]object [/color]sender, [color=#008080]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].txtsrt1.Clear();
       {

با اجرای برنامه متن "جمله اول را تایپ کنید" در تکسباکس اول ظاهر می شود و با کلیک بروی آن، جمله پاک می شود.

kt27v4lt188blmk9k6i.png

--------------------------------------------------------------------------------------------------------------------------------------------------------------

تمرین 2

در تمرین یک پس از هر بار کلیک تکسباکس محتوای آن پاک می شود، می خواهیم پاک شدن تکسباکس تنها با کلیک اول اتفاق بیفتد و در کلیک های بعدی محتویات تکسباکس تغییری نکند، برای این کار باید چکار کنیم؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 4:

جواب تمرین 2:

برای انجام تمرین، باید از دستور if استفاده شود.

 

دستور if:

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

 


[color=#0000ff]if[color=#222222](شرط یا شروط)[/color]
[/color]}
دستورات
{

 

سه روش برای انجام تمرین، وجود دارد.

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

روش 1:

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

می توانیم یک متغیر boolean تعریف کنیم و پیش فرض آن را false قرار دهیم. سپس بررسی می کنیم، اگر این متغیر، false باشد تکسباکس را پاک کن و متغیر را برابر true قرار بده، در غیراینصورت عملی انجام نده.

 


[font=Tahoma] [color=#0000ff]bool [/color]b = [color=#0000ff]false[/color] ;[/font][font=Tahoma]
[color=#0000ff]private void[/color] txtsrt1_Click([color=#0000ff]object [/color]sender, [color=#008080]EventArgs [/color]e)
{
[color=#0000ff]if [/color](b == [color=#0000ff]false[/color])
{
[color=#0000ff]this[/color].txtsrt1.Clear();
b = [color=#0000ff]true[/color] ;
}
}[/font]

مرحله 1:

تابعی از نوع Boolean تعریف می کنیم. این متغیر، باید به دو دلیل قبل از فراخوانی event مربوط به کلیک تکسباکس اول تعریف کنیم.

دلیل 1: با اینکار، متغیر تعریف شده (متغیر b) در توابع دیگر قابل دسترسی است.

دلیل 2: در صورتی که داخل event کلیک تکسباکس، تعریف شود، با هر بار کلیک بروی تکسباکس، مقدار b مساوی با false می شود.

مرحله 2:

Event مربوط به کلیک تکسباکس 1 را فراخوانی می کنیم. (مانند مرحله 1 تمرین 1)

مرحله 3:

از دستور if برای بررسی شرط استفاده می کنیم.

 

نکته: boolean نوعی متغیر است که تنها دو حالت true یا false می تواند داشته باشد و برای بررسی درست یا غلط شرطی از آن استفاده می شود.

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

روش 2:

-------------------------------------------------------------------------------------------------------------------------------------------------------------

می توانیم از یک متغیر int با مقدار اولیه 0 استفاده کنیم و با هر با کلیک تکسباکس، یکی به آن اضافه کنیم و در شرط بگویم اگر متغیر، کوچکتر یا مساوی از صفر بود textbox را پاک کن.

 

[font=Tahoma]        [color=#0000ff]int [/color]b = 0;[/font][font=Tahoma]
       [color=#0000ff]private void[/color] txtsrt1_Click(objectsender, [color=#008080]EventArgs [/color]e)
       {
          [color=#0000ff]if [/color](b<=0)
              [color=#0000ff]this[/color].txtsrt1.Clear();
           b+= 1;
       }[/font]

عملگر =+: عملگری است که مقداری برابر با مقدار روبروی عملگر، به متغیر اضافه می کند و داخل متغیر می ریزید. (b+=1 عملکردی مشابه با b=b+1 دارد.)

نکته: از روش دوم می توان برای این مورد استفاده کنیم که کاربر اگر سه بار رمز را اشتباه وارد کرد، اجازه ورود به آن کاربر داده نشود.

-------------------------------------------------------------------------------------------------------------------------------------------------------------

روش 3:

-------------------------------------------------------------------------------------------------------------------------------------------------------------

می تواینم جمله داخل تکسباکس 1 را با جمله "جمله اول را تایپ کنید" مقایسه کنیم و در صورتی که برابر با این جمله بود، با کلیک کاربر، جمله پاک شود. برای اینکار کد زیر را می نویسیم:

 

[font=Tahoma]
 [color=#0000ff]private void[/color] txtsrt1_Click([color=#0000ff]object[/color]sender, [color=#008080]EventArgs [/color]e)
       {
          [color=#0000ff]if [/color]([color=#0000ff]this[/color].txtsrt1.Text == [color=#ff0000]"جمله اول را تایپ کنید"[/color])
              [color=#0000ff]this[/color].txtsrt1.Clear();
       }

[/font]

مشکل روش 3:در صورتی که کاربری جمله "جمله اول را تایپ کنید" در تولباکس اول بنویسد، با کلیک دوباره بروی تکسباکس 1، این جمله پاک می شود.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 5

توابع Overload:

توابعی هستند که نام یکسان دارند ولی پارامترهای ورودی متفاوت دارند. در برنامه های سطح پایین، برای اینکه از یک تابع با ورودی های مختلف استفاده کنیم باید آنرا با نام های مختلف ذخیره می کردیم. ولی در overload مثلا اگر 3 تابع max داشتیم که ماکزیمم اعدادی را حساب کنند و تابع اول، ماکزیمم بین دو عدد، تابع دوم ماکزیمم بین سه عدد و تابع سوم ماکزیمم بین 4 عدد، ما باید 3 بار تابع max را تعریف کنیم ولی همه آنها را با یک نام ذخیره کنیم مثلا max.

در فراخوانی تابع، براساس تعداد پارامترهای ورودی، تابع مورد نظر صدا زده می شود. یعنی در صورتی که در فراخوانی تابع، مثلا سه پارامتر ورودی داشته باشیم، خود به خود تابع دوم صدا زده می شود.

 

مثال:

تابع ماکزیمم را برای محاسبه ماکزیمم بین دو عدد، سه عدد و چهار عدد بنویسید.

جواب:

برای اینکار، در پروژه قبلی و در کلاس lib، کدهای زیر را وارد می کنیم:

f95o93vofx4efmi8lzj.png

 

 

توضیحات کد:

همانطور که در شکل مشخص است ما سه تابع مختلف اما با یک نام تعریف کردیم. همانطور که در جلسه 2 نیز اشاره شد، برای اینکه بتوان تابعی در یک کلاس را در کلاس دیگر استفاده کرد باید علاوه بر عمومی بودن(public)، سراسری(static) نیز تعریف شود. نوع برگشتی تابع از نوع integer است و نام هر سه تابع را max گذاشتیم. در زیر توابع را توضیح می دهیم:

 

تابع 1:

این تابع دو ورودی به نام های i و j و از نوع integer دارد.

یک متغیر کمکی بنام maxNumber تعریف کرده و مقدار j را در آن می ریزیم و آن را بعنوان ماکزیمم در نظر می گیریم. سپس با یک شرط(دستور if) چک می کنیم در صورتیکه i>j بود ماکزیمم(maxNumber) را برابر با i در نظر می گیریم و در آخر مقدار ماکزیمم(maxNumber) را بر می گردانیم.

 

تابع 2:

در تابع دوم، ما سه متغیر ورودی به نام های i، j و k داریم. در این تابع، از تابع 1 که تعریف کردیم استفاده می کنیم؛ یعنی تابع در تابع می شود و دوبار تابع 1 را به صورت زیر صدا می زنیم:

1. ابتدا با دستور (max(i,j مقدار ماکزیمم بین دو متغیر i و j را بدست می آوریم .

2. سپس با استفاده دوباره از تابع max، مقدار ماکزیمم بدست آمده در مرحله 1 را با مقدار k مقایسه کرده و مقدار ماکزیمم را برمی گرداند.

 

تابع 3:

در تابع سوم، نیز دو مرحله دارد و از تابع دوم که تابع max که سه پارامتر ورودی دارد و تابع اول که دو پارامتر ورودی دارد استفاده می شود. به اینصورت که :

1. ابتدا با استفاده از تابع دوم که سه پارامتر ورودی دارد مقدار ماکزیمم بین سه متغیر بدست می آید ( (max(i,j,k )

2. سپس با استفاده از تابع 1 که دو پارامتر دارد، مقدار ماکزیمم بین مقدار بدست آمده از مرحله 1 و متغیر h بدست می آید و مقدار ماکزیمم را برمی گرداند.

 

فراخوانی تابع در کلاس form1:

در فرم 1، دو تکسباکس و یک دکمه اضافه می کنیم و به صورت زیر نامگذاری می کنیم(نامهای قرمز، برابر با خصوصیت name آنهاست).

 

aoym25o17d9h7r4o8764.png

 

سپس کد زیر را در event کلیک دکمه btnmax می نویسیم.با این کار، تابع max را فراخوانی می کنیم.

 

       [color=#0000ff]private void[/color] btnmax_Click([color=#0000ff]object [/color]sender, [color=#008080]EventArgs [/color]e)
       {
           [color=#0000ff]int [/color]m = project1.lib.max([color=#0000ff]int[/color].Parse([color=#0000ff]this[/color].txtnum1.Text), [color=#0000ff]int[/color].Parse([color=#0000ff]this[/color].txtnum2.Text));
           [color=#008080]MessageBox[/color].Show(m.ToString());
       }

 

int.parse: این تابع، رشته را به عدد تبدیل می کند. علت استفاده از این تابع اینست که تکسباکس ها، رشته هستند و برای اینکه پارامترهای ورودی تابع max، از نوع integer است باید از این تابع استفاده کنیم تا رشته به عدد تبدیل شود.

 

نکته:

چون هر دو کلاس داخل یک namespace است می توانیم نام namespace را ننویسیم( namespace در اینجا project1 است).

 

 

 

  • بدلیل اینکه در این فراخوانی تابع دو ورودی داریم، تابع max اولی فراخوانی می شود.

 

 

اگر یک تکسباکس دیگر اضافه کنیم و یا اینکه یک عدد به ورودی ها اضافه کنیم (مانند کد زیر) تابع دوم صدا زده می شود.

w1eajb1j74f63439w9s0.png

نکات توابع overload:

 

بسیاری از متدهای آماده در سی شارپ، overload هستند مثل متد show مربوط به messagebox اگر کد زیر را بنویسیم می بینیم که در پنجره راهنمای باز شده نشان می دهد که این متد، 21 حالت یعنی 21 overload دارد که با استفاده از کلیدهای بالا و پایین می توانیم این حالات را نگاه کنیم:

 

mohtn77jk4sr87cnp2at.png

 

تمرین 3:

 

از حالتی از متد show مربوط به messabox استفاده کنید که همانند شکل زیر، برای پنجره پیغام باز شده، عنوان "ماکزیمم" نوشته شود.

 

66sri5lr10xe93omufh.png

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 6

----------------------------------------------------------------------------------------------------------------------------------------------------

جواب تمرین 3:

----------------------------------------------------------------------------------------------------------------------------------------------------

با دستور زیر، کپشن پنجره پیغام به "ماکزیمم" می شود.

 

      [color=#0000ff]private void[/color] btnmax_Click([color=#0000ff]object [/color]sender, [color=#008080]EventArgs [/color]e)
       {
           [color=#0000ff]int [/color]m = project1.[color=#008080]lib[/color].max(int.Parse([color=#0000ff]this[/color].txtnum1.Text), [color=#0000ff]int[/color].Parse([color=#0000ff]this[/color].txtnum2.Text) ) ;
           [color=#008080]MessageBox[/color].Show(m.ToString(),[color=#ff0000]"ماکزیمم"[/color]) ;
       }

----------------------------------------------------------------------------------------------------------------------------------------------------

Indexof

Indexof هم یک تابع overload است که 4 حالت دارد:

 

  • حالت 1: کاراکتر قبول می کند.
  • حالت 2: رشته قبول می کند.
  • حالت 3: کاراکتر و start index قبول می کند.
  • حالت 4: رشته و start index قبول می کند.

 

Start Index: در حالات 1 و 2، که شروع ایندکس را نمی دادیم از کاراکتر شماره صفر، شروع به شمارش می کند ولی در صورتی که Start Index مشخص کنیم، از آن مکان شروع به شمارش می کند. مثلا مکان شروع a در alireza در حالت شماره 1، صفر می شود ولی مثلا اگر در جلسه 2 مثال 1 در صورتی که در کلاس lib، تابع findchar را بصورت زیر بنویسیم و start index آنرا 2 قرار دهیم، از کاراکتر i به گشتن می کند و موقعیت شروع a را در موقعیت 6 می بیند و عدد 6 را می دهد(اگر موقعیت رشته ali را در alireza بخواهیم در صورتی که استارت ایندکس آن 2 است، جواب 1- را برمی گرداند چونکه از موقعیت 2 به بعد، رشته ali در alireza وجود ندارد.)

       [color=#0000ff]public static int[/color] findchar([color=#0000ff]string [/color]s,[color=#0000ff]string [/color]str)
       {
       [color=#0000ff]int [/color]charindex;
       charindex=str.IndexOf(s,2);
       [color=#0000ff]return [/color]charindex;
       }

 

نکته :

کاربرد index برای بررسی فرمت ورودی هاست مثلا کاربر حتما در قسمت وارد کردن ایمیل، از @ استفاده کند و @ نباید از موقعیت اول شروع شود.

 

نوشتن توضیحات:

با استفاده از خط دستورهای زیر، برای نوشتن توضیحات استفاده می کنیم.

[color=#808080]/// <summary>
[/color]///[color=#00ff00]توضیحات[/color]
[color=#808080] /// </summary>
[/color]

 

مثال : اگر دستورات زیر را در کلاس lib و در بالای تابع max بنویسیم، وقتی تابع max را در صدا بزنیم، توضیحات مربوط به تابع را نشان می دهد.

       /// <summary>
       /// این تابع، ماکزیمم را محاسبه می کند.
       /// </summary>

 

اگر تابع max را در کلاس form1 صدا بزنیم، توضیحات مربوطه را مانند شکل نشان می دهد.

5cqgzng8gaf8a36oe2p.png

 

آبجکت سازی از کلاس(ساختن شی از کلاس)

همانطور که در جلسات پیش نیز به آن اشاره شد، در صورتی که یک تابع در محدوده کلاسی تعریف کنیم و تنها public می نوشتیم، امکان دسترسی در کلاس دیگر به آن تابع وجود نداشت و باید علاوه بر عمومی بودن(public)، سراسری(static) نیز تعریف می شد.

روش دیگر برای دسترسی توابع یک کلاس در کلاس دیگر اینست که از کلاس، شی بسازیم. برای ساختن زیر بصورت زیر انجام می شود:

;()نام کلاس new=نام شی نام کلاس

مثال:

اگر تابع max را تنها public تعریف کنیم برای دسترسی در کلاس form1 از کلاس lib، شی می سایزم. برای اینکار، در کلاس lib، توابع max را تنها public تعریف می کنیم و سپس در کلاس form1 و در event کلیک btnmax، ابتدا از کلاس lib، شی می سازیم و سپس تابع max را فراخوانی می کنیم. کد را به صورت زیر می نویسیم:

       [color=#0000ff]private void[/color] btnmax_Click([color=#0000ff]object [/color]sender, [color=#008080]EventArgs [/color]e)
       {
           [color=#008080]lib [/color]objmax = new lib();
           [color=#0000ff]int [/color]m = objmax.max(int.Parse([color=#0000ff]this[/color].txtnum1.Text), [color=#0000ff]int[/color].Parse([color=#0000ff]this[/color].txtnum2.Text));
           [color=#008080]MessageBox[/color].Show(m.ToString(),"ماکزیمم");
       }

 

طراحی سایت (design)

در هر نرم افزار، یک فرم main دارد که شامل منوها و زیرمنوهاست. برای اینکار، یک پروژه جدید (project6) ایجاد می کنیم سپس :

روی نام پروژه(project6) راست کلیک کرده -> add -> windows form -> از پنجره باز شده windows form -> windows form -> یک نام انتخاب می کنیم مثلا frmmain -> add

 

برای اینکه تمام کنترلرهایی که اضافه می کنیم یک فونت و یک سایز باشد، روی فرم کلیک کرده و در پنجره properties، در قسمت font، نوع قلم را Tahoma و اندازه آن را 9 قرار می دهیم و خصوصیت RightToLeft را true قرار می دهیم. Menustrip به فرم اضافه می کنیم و مانند شکل زیر، منو و زیرمنوها را اضافه می کنیم.

aiq8g886sn908ls4ouxo.png

نکات فرم:

  • برای ایجاد خط تیره (که در شکل با قرمز نشان داده شده است)، از علامت دَش(-) استفاده می کنیم.
  • می توانیم برای هر زیر منو یا زیر منو، کلیک کرده و در پنجره properties، قسمت image عکس مورد نظر را import می کنیم.
  • می توانیم برای منوها و زیر منوها کیبورد تعیین کنیم. برای اینکار، از پنجره properties مربوط به منو، در قسمت shortcutkey می توانیم کلیدهای ترکیبی تعریف کنیم.

باز شدن فرم main در ابتدا:

فرم main، فرم اصلی پروژه است که باید با اجرای برنامه، ابتدا این صفحه باز شود. به این منظور، در پنجره solution Explorer، گزینه program.cs را دابل کلیک می کنیم. در پنجره باز شده، توابعی وجود دارد.

 

بعنوان مثال :

 

           Application.EnableVisualStyles();

که استایل های ویندوز را به فرم می دهد مانند حالت دکمه ها

برای باز شدن فرم main باید کد زیر را بنویسیم:

           Application.Run(new Form1());

 

تمرین 4:

در فرم ایجاد شده، برنامه ایی بنویسید که با کلیک بر روی زیر منوی خروج، هم فرم و هم کل پروژه بسته شود.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 7

--------------------------------------------------------------------------------------------------------------------------------------------------------------

جواب تمرین 4

---------------------------------------------------------------------------------------------------------------------------------------------------------------

ابتدا خصوصیت name مربوط به زیر منوی خروج را برابر با tsclose قرار می دهیم(ts مخفف toolstrip است). سپس در event مربوط به کلیک زیر منوی خروج، کد زیر را می نویسیم:

       [color=#0000ff]private void[/color] tsclose_Click(object sender, [color=#008080]EventArgs [/color]e)
       {
           // بستن فرم جاری
           [color=#0000ff]this[/color].Close();

           // بستن کل پروژه
           [color=#008000]Application[/color].Exit();
       }

 

  • برای نوشتن توضیح هر خط کد، می توانیم از // استفاده کنیم.
  • This به فرم جاری اشاره می کند و دستور close باعث بستن فرم می شود در نتیجه با دستور ()this.close، فرم جاری بسته می شود.
  • دستور ()applcation.exit باعث بستن کل پروژه می شود.

فرم خوشامد (spalshform)

هر نرم افزار، یک فرم خوشامد گویی دارد که قبل از باز شدن فرم ها، ظاهر می شود. برای اینکار مراحل زیر را انجام می دهیم:

 

1.ابتدا یک فرم جدید باز می کنیم(روی پروژه راست کلیک -> add

 

2.اگر به فرمهای خوشامد دقت کرده باشید، دکمه ضربدر یا مینیمایز ندارند. برای اینکار، در پنجره properties مربوط به فرم و قسمت formborderstyle آنرا برابر با non می گذاریم.

 

3.می توانیم برای این فرم، یک عکس نیز قرار دهیم. به این منظور، در خصوصیت backgroundimage آدرس عکس را می دهیم (برای اینکه عکسها، همراه با پروژه باشد، در فولدر پروژه یک فولدر بنام images ایجاد کرده و عکسها را در این فولدر قرار می دهیم).

 

4. سپس باید این فرم را بعنوان فرم اول قرار دهیم. برای اینکار اگر مانند جلسه پیش در پنجره solution Explorer، گزینه program.cs را دابل کلیک کنیم و کد(()Application.Run(newfrmsplash را بنویسیم، درصورتی که پنجره خوشامد را ببندیم، کل پروژه بسته می شود. بنابراین باید فرم main در این قسمت بعنوان فرم اصلی قرار گیرد. پس برای اینکه فرم خوشامد، ابتدا باز شود، باید فرم splash را در event مربوط به load فرم اصلی صدا بزنیم:

 

        [color=#0000ff]private void[/color] frmmain_Load([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#008000]frmsplash [/color]f = new [color=#008000]frmsplash[/color]() ;
           f.ShowDialog();
}

با اینکار اگر پنجره خوشامدگویی را ببندیم، پنجره main باز می شود.

 

باز شدن فرم در وسط پنجره:

در پنجره properties مربوط به فرم، startposition را centerscreen می گذاریم.

 

 

زمان دهی به پنجره خوشامدگویی:

می خواهیم پنجره خوشامدگویی، به مدت مثلا 4 ثانیه نمایش داده شود و سپس پنجره main باز شود. برای اینکار:

 

1. یک تایمر به فرم خوشامد اضافه می کنیم.

 

2. روی تایمر راست کلیک کرده و در properties مربوط به تایمر، خصوصیت interval را برابر 4000 میلی ثانیه(یعنی 4 ثانیه) می گذاریم. این زمان برحسب میلی ثانیه است.

 

3. سپس در event مربوط به load فرم خوشامدگویی (frmsplash)، تایمر را start می کنیم. برای اینکار، دستور زیر را می نویسیم:

        [color=#0000ff]private void[/color] frmsplash_load([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].timer1.Start();
       }

4. سپس event مربوط به tick مربوط به تایمر را فراخوانی می کنیم. Tick تایمر براساس interval تیک می خورد، یعنی هر 4000 میلی ثانیه یکبار تیک می خورد. کد زیر را در event مربوط به tick می نویسیم:

        [color=#0000ff]private void[/color] timer1_Tick([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].timer1.Stop();
           [color=#0000ff]this[/color].Close();
       }

با خط دستور اول، تایمر متوقف شده و با دستور دوم، فرم خوشامدگویی بسته می شود.

 

با انجام کارهای بالا، پنجره خوشامدگویی مانند زیر باز می شود و به مدت 4 ثانیه باقی می ماند و سپس بسته می شود و فرم main باز می شود.

gbhlj05hvy4z2961ztm.png

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------

تمرین 5:

مانند شکل زیر به فرم یک progressbar اضافه کنید که در طول این چهار ثانبه پر شود.

 

48adcgbjjgodcmqvww8.png

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 8

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

جواب تمرین 5

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

مراحل زیر را انجام می دهیم:

 

1. برای اینکار یک progressbar به فرم splash(خوشامدگویی) اضافه می کنیم. برای اینکار باید با خصوصیت value آن کار کنیم.

 

2. چون تایمر ما 4000 میلی ثانیه (4 ثانیه) تنظیم شده بود و از آنجا که ما progressbar را 100 تایی در نظر می گیریم و می خواهیم که progressbar در مدت 4000 میلی ثانیه پر شود پس 40=100/4000 یعنی مقدار interval تایمر را برابر 40 میلی ثانیه قرار می دهیم و با اینکار هر 40 میلی ثانیه یکبار تایمر تیک می خورد و 100 بار تیک می خورد.

 

3. سپس در محدوده کلاس frmspalsh و بیرون از محدوده تابع (در اینجا متغیر c) تعریف می کنیم.

 

       [color=#0000ff] private void[/color] frmsplash_Load([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].timer1.Start();
       }
       [color=#0000ff]int [/color]c = 0;
       [color=#0000ff]private void[/color] timer1_Tick([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           c++;
           [color=#0000ff]this[/color].progressBar1.Value = c;
           [color=#0000ff]if [/color](c == 100)
           {
               [color=#0000ff]this[/color].timer1.Stop();
               [color=#0000ff]this[/color].Close();
           }
       }

 

نکته:

  • زمانی که متغیری خارج از محدوده تابعی تعریف شود در تمام توابع آن کلاس قابل دسترسی است.(مثل متغیر c)
  • اگر بخواهیم متغیری در بیرون از کلاس هم قابل دسترسی باشد باید public static تعریف کنیم.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

مثال:

یک label به فرم خوشامدگویی قرار دهید که درصد progressbar را نشان دهد.

 

       [color=#0000ff] private void[/color] frmsplash_Load([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].timer1.Start();
       }
       int c = 0;
       [color=#0000ff]private void[/color] timer1_Tick([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           c++;
           [color=#0000ff]this[/color].progressBar1.Value = c;
           [color=#0000ff]this[/color].lblpersent.Text = c.ToString();
           [color=#0000ff]if [/color](c == 100)
           {
               [color=#0000ff]this[/color].timer1.Stop();
               [color=#0000ff]this[/color].Close();
           }
       }

شفافیت فرم خوشامدگویی:

یعنی فرم خوشامد کم کم ظاهر شود. برای اینکار ابتدا opacity فرم خوشامد را برابر صفر می گذاریم و یک متغیر تعریف می کنیم و opacity در هر تیک تایمر 0.01 اضافه شود.

 

نکته : opacity از 0 تا 1 است.

 

[color=#0000ff]        int [/color]c = 0;                                                                   
       [color=#0000ff]double [/color]d = 0;
       [color=#0000ff]private void[/color] timer1_Tick([color=#0000ff]object [/color]sender, [color=#008000]EventArgs[/color] e)
       {
           d += 0.01;
           c++;
           [color=#0000ff]this[/color].Opacity = d;
           [color=#0000ff]this[/color].progressBar1.Value = c;
           [color=#0000ff]this[/color].lblpersent.Text = c.ToString();
           [color=#0000ff]if[/color] (c == 100)
           {
               [color=#0000ff]this[/color].timer1.Stop();
               [color=#0000ff]this[/color].Close();
           }
       }

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ممنون بابت این آموزشهای مفیدتون

ببخشید اگه من بخوام

progressbar به صورت عمودی تو فرمم قرار بدم باید چکار کنم

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
ممنون بابت این آموزشهای مفیدتون

ببخشید اگه من بخوام

progressbar به صورت عمودی تو فرمم قرار بدم باید چکار کنم

سلام دوست عزیز

مرسی از توجهتون :icon_gol:

 

progress bar عمودی

 

برای اینکار:

1.ابتدا در فرم frmsplash رفته و یک کلاس VerticalProgressBar تعریف می کنیم. برای اینکار، کد زیر را در کلاس frmsplash کد زیر را می نویسیم:

        [color=#0000ff]public class[/color] [color=#40e0d0]VerticalProgressBar[/color] : [color=#40e0d0]ProgressBar[/color]        {
           [color=#0000ff]protected override[/color] [color=#40e0d0]CreateParams [/color]CreateParams
           {
[color=#0000ff]                get[/color]
               {
                   [color=#40e0d0]CreateParams [/color]cp = [color=#0000ff]base[/color].CreateParams;
                   cp.Style |= 0x04;
                   [color=#0000ff]return [/color]cp;
               }
           }
       }

2. باید در پنجره properties مربوط به progress bar، رفته و خصوصیت Dock آنرا برابر با Left یا Right قرار بدیم.(در این مرحله اگر از پروژه، اجرا بگیریم، progress bar از چپ به راست شروع به پر شدن می کند.)

3. در پنجره solution explorer و در قسمت مربوط به کدهای فرم خوشامد با پسوند designer.cs. (در اینجا frmspalsh.designer.cs)، رفته و کدها را بصورت زیر تغییر می دهیم:

[font=Consolas][color=#0000ff]private [/color]System.Windows.Forms.ProgressBar progressBar1;[/font]

تغییر به

[font=Consolas][color=#0000ff]private [/color]VerticalProgressBar progressBar1;[/font]

 

 

و همچنین کد زیر را به اینصورت تغییر می دهیم:

[font=Consolas][color=#0000ff]this[/color].progressBar1 =[color=#0000ff]new[/color] System.Windows.Forms.ProgressBar();[/font]

تغییر به

[font=Consolas][color=#0000ff]this[/color].progressBar1 =[color=#0000ff]new [/color]VerticalProgressBar();[/font]

 

به اینصورت، progress bar عمودی ایجاد می شود:

2cpkfrhba7u8la9v76o6.png

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
بسیار عالی بود

مرسی شما لطف دارید.

امیدوارم مفید باشه :a030:

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 9

ارث بری:

ممکن است در یک نرم افزار، مثلا بیست فرم با خصوصیات مشابه مثل فونت، style و ... داشته باشیم. برای این فرمها، می توان یک فرم پایه درست کرد و تمام فرمهای دیگر، از فرم پایه ارث بری کنند.

 

ایجاد فرم پایه:

1. یک فرم با نام frmbase ایجاد می کنیم.

 

2. یک کنترلر statusstrip(نوار وضعیت) به فرم اضافه می کنیم و خصوصیت rightToLeft را yes می کنیم. می توانیم برای نوار وضعیت، آیتم تعریف کنیم. برای اضافه کردن آیتم دو روش داریم:

الف- راست کلیک از statusstrip، item، آیتم مورد نظر را انتخاب و add می کنیم.

ب- روی کشوی بازشو روی statusstrip کلیک کرده و آیتم مورد نظر را انتخاب می کنیم.

 

3. با یکی از دو روش اضافه کردن آیتم، یک statuse lable به فرم اضافه می کنیم و خصوصتی text=0 و name=tstime قرار می دهیم. می توانیم برای فاصله گرفتن دو statuse lable، در قسمت padding مربوط به آن، left آنرا تغییر می دهیم مثلا 50 بگذاریم.

 

4. یک statuse lable دیگر نیز اضافه کرده و text=0 و name=stdate قرار می دهیم.

 

6tstp6kw6mv1fo6mxv3q.png

 

سپس در event مربوط به لود فرم frmbase کد زیر را می نویسیم:

 

 

 [color=#0000ff] private void[/color] frmbase_Load([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
[color=#008000]            //for time
[/color] [color=#0000ff]this[/color].tstime.Text = [color=#00ccff]DateTime[/color].Now.ToLongTimeString();

[color=#008000]            //for date
[/color]            this.tsdate.Text = [color=#00ccff]DateTime[/color].Now.ToLongDateString();
       } 

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

برای اینکار، یک کنترلر contextMenuStrip به فرم پایه اضافه کرده و چند گزینه مانند شکل اضافه می کنیم و خصوصیت name را نامگذاری می کنیم.

 

4rm57m8xiq5m4vvx8ch.png

 

سپس در event مربوط به click خروج (tsclose) کد زیر را می نویسیم:

[color=#0000ff]private void[/color] tsclose_Click([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].Close();
       } 

همچنین در کلیک مربوط به تغییر رنگ پس زمینه، کد زیر را می نویسیم:

 

 

[color=#0000ff]private void[/color] tscolor_Click([color=#0000ff]object [/color]sender, [color=#008000]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].colorDialog1.ShowDialog();
           [color=#0000ff]this[/color].BackColor = [color=#0000ff]this[/color].colorDialog1.Color;
       } 

 

نکته مهم :

برای نمایش راست کلیک هنگام اجرای برنامه، باید خاصیت contextMenuStrip مربوط به فرم frmbase را برابر با contextMenuStrip1 بگذاریم.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

تمرین 6:

 

برای زیر منوهای تغییر پس زمینه، تاریخ شمسی و تاریخ میلادی کد بنویسید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 10

جواب تمرین 6:

تغییر پس زمینه

1. ابتدا به فرم frmbase، یک کنترلر openFileDialog اضافه می کنیم.

2. در رویداد کلیک مربوط تغییر پس زمینه، کد زیر را می نویسم:

       [color=#0000ff]private void[/color] tsback_Click([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)
       {
            [color=#0000ff]this[/color].openFileDialog1.ShowDialog() ;
          [color=#0000ff]this[/color].BackgroundImage = this.openFileDialog1.FileName ;
       }        

در صورتی که کد بالا را اجرا کنیم، خطا می دهد. چون دو طرف تساوی، از یک نوع نیست. برای اینکار از fromFile بصورت زیر استفاده می کنیم:

       [color=#0000ff]private void[/color] tsback_Click([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)
       {

           [color=#0000ff]if[/color] ([color=#0000ff]this[/color].openFileDialog1.ShowDialog() == [color=#40e0d0]DialogResult[/color].OK)
               [color=#0000ff]this[/color].BackgroundImage = [color=#40e0d0]Image[/color].FromFile([color=#0000ff]this[/color].openFileDialog1.FileName) ;
       }

تاریخ شمسی

 

برای تقویم شمسی باید از کلاس PersianCalendar استفاده کنیم که کلاسی از namespace مربوط به system.Globalization است. برای اینکه بتوانیم از همه متدها و propertiy های آن استفاده کنیم، یک شی از کلاس PersianCalendar تعریف می کنیم.

       [color=#0000ff]private void [/color]persiancalender_Click([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)
       {
           //for time
           [color=#0000ff]this[/color].tstime.Text = [color=#40e0d0]DateTime[/color].Now.ToLongTimeString() ;

           //persian calender
           System.Globalization.[color=#40e0d0]PersianCalendar [/color]pc = [color=#0000ff]new [/color]System.Globalization.[color=#40e0d0]PersianCalendar[/color]() ;
           [color=#0000ff]this[/color].tsdate.Text = pc.GetYear(DateTime.Now) + "/" + pc.GetMonth([color=#40e0d0]DateTime[/color].Now) + "/" + pc.GetDayOfMonth([color=#40e0d0]DateTime[/color].Now) ;
       }

خط دستور بالا، تقویم را بصورت مثلا 1393/4/2 نشان می دهد.

 

w3nvqro57r6388teutwu.png

تاریخ میلادی

برای اینکار، در event مربوط به کلیک تاریخ میلادی، کد زیر را می نویسیم:

[color=#0000ff]private void[/color] miladicalender_click([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)        
       {
           [color=#0000ff]this[/color].tsdate.Text = [color=#40e0d0]DateTime[/color].Now.ToLongDateString() ;

       }

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 11

رفع مشکل سیاه شدن صفحه هنگام زدن دکمه cancel در پنجره colordialog

در صورتی که در کلیک راست، تغییر رنگ را انتخاب کرده و cancel را بزنیم، صفحه سیاه می شود. برای رفع مشکل با دستور DialogResult می توان بررسی کرد که کاربر چه کلیکی را زده است. برای اینکار در فرم frmbase و در event مربوط به کلیک تغییر رنگ، کد زیر را می نویسیم:

 

      [color=#0000ff]  private void[/color] tscolor_Click([color=#0000ff]object [/color]sender, [color=#33cccc]EventArgs [/color]e)
       {
           [color=#0000ff]if[/color]([color=#0000ff]this[/color].colorDialog1.ShowDialog()==[color=#33cccc]DialogResult[/color].OK)
           [color=#0000ff]this[/color].BackColor = [color=#0000ff]this[/color].colorDialog1.Color;
       }

 

کار کردن ثانیه شمار ساعت:

با استفاده از کدهای جلسه پیش، ساعت را در نوار وضعیت نشان دادیم که این ساعت، ساعت کنونی سیستم را نشان می دهد ولی ثانیه شمارش تغییر نمی کند. برای اینکه ثانیه شمار آن کار کند بصورت زیر عمل می کنیم:

1. یک تایمر به فرم پایه اضافه کرده و خصوصیت interval آن را 1000 میلی ثانیه می گذاریم.

2. در load فرم، تایمر را با استفاده از کد زیر استارت می کنیم:

 

        [color=#0000ff]private void[/color] frmbase_Load([color=#0000ff]object[/color] sender, [color=#40e0d0]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].timer1.Start();
           ...
       }

3. سپس در event تیک تایمر، می گوییم که ساعت را به کاربر نشان بده:

        [color=#0000ff]private void[/color] timer1_Tick([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].tstime.Text = [color=#40e0d0]DateTime[/color].Now.ToLongTimeString();
       }

یعنی هر 1000 میلی ثانیه یکبار تیک می زند.

 

تمرین 7:

با استفاده از دستور if، برنامه را طوری تغییر دهید که با در راست کلیک، تنها تاریخ میلادی وجود داشته باشد و در نوار وضعیت، تاریخ شمسی نشان داده شود. وقتی بروی تاریخ میلادی کلیک می کنیم نوار وضعیت، تاریخ میلادی را نشان دهد و تاریخ میلادی در راست کلیک به تاریخ شمسی تفییر کند و برعکس

 

1289n7zwj4u6hxvwsl.png

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جواب تمرین 7

 

برای اینکار:

 

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

 

2. در event مربوط به فرم frmbase، مانند قبل کد زیر را می نویسیم:

       [color=#0000ff]private void[/color] frmbase_Load([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)
       {
           [color=#0000ff]this[/color].timer1.Start() ;
[color=#00ff00]            //for time        
[/color]            [color=#0000ff]this[/color].tstime.Text = [color=#33ccff]DateTime[/color].Now.ToLongTimeString() ;

           System.Globalization.[color=#33ccff]PersianCalendar [/color]pc = [color=#0000ff]new [/color]System.Globalization.[color=#40e0d0]PersianCalendar[/color]() ;
           [color=#0000ff]this[/color].tsdate.Text = pc.GetYear([color=#40e0d0]DateTime[/color].Now) + "/" + pc.GetMonth([color=#40e0d0]DateTime[/color].Now) + [color=#b22222]"/"[/color] + pc.GetDayOfMonth([color=#40e0d0]DateTime[/color].Now) ;
       }

سه خط اول، مربوط به شروع و نشان دادن تایمر در نوار وضعیت است و دو خط بعد برای نشان دادن تاریخ شمسی در نوار وضعیت است.

 

3. سپس در event کلیک مربوط به راست کلیک تاریخ میلادی کد زیر را می نویسیم:

bool b = false;
       [color=#0000ff]private void[/color] miladicalender_Click([color=#0000ff]object [/color]sender, [color=#40e0d0]EventArgs [/color]e)
       {
           [color=#0000ff]if [/color](b == [color=#0000ff]false[/color])
           {
               [color=#0000ff]this[/color].tsdate.Text = [color=#40e0d0]DateTime[/color].Now.ToLongDateString() ;
               [color=#0000ff]this[/color].miladicalender.Text = [color=#b22222]"تاریخ شمسی" [/color];
               b = [color=#0000ff]true [/color];
           }
           else if (b == true)
           {
               System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar() ;
               this.tsdate.Text = pc.GetYear(DateTime.Now) + "/" + pc.GetMonth(DateTime.Now) + "/" + pc.GetDayOfMonth(DateTime.Now) ;
               this.miladicalender.Text =[color=#b22222] "تاریخ میلادی" [/color];
               b = [color=#0000ff]false [/color];
           }
       }

ابتدا یک متغیر را بیرون از محدوده تابع، تعریف می کنیم مقدار آن را false که اینجا بعنوان نشان دهنده تاریخ میلادی در راست کلیک و تاریخ شمسی در نوار وضعیت است می گذاریم.

سپس بررسی می کنیم اگر b=false است، "تاریخ میلادی" را در راست کلیک به "تاریخ شمسی" تبدیل کند و تاریخ میلادی را در نوار وضعیت نشان می دهد و در else if برعکس.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 12

ایجاد فرم ها از فرم base(ارث بری)

 

همانطور که در جلسه 9 گفته شد، اگر در نرم افزاری 20 فرم با خصوصیت یکسان داشته باشیم، یک فرم بعنوان فرم پایه تعریف می کنیم و تمامی فرمهای دیگر از آن فرم ارث بری می کنند.

در جلسات 9، 10 و 11 فرم پایه را طراحی کرده و مشکلات آن را برطرف کردیم. در این جلسه می خواهیم که یک فرم از فرم پایه ارث بری کنیم.

ارث بری از فرم پایه:

برای اینکار :

روی اسم پروژه راست کلیک کرده، add، new Item، Windows Forms، Inherited form، در قسمت name یک نام برای فرم انتخاب می کنیم مثلا frmMatter، سپس کلید add را انتخاب می کنیم. در صفحه باز شده می پرسد که از کدام کلاس ارث بری کند که frmbase را انتخاب می کنیم. به اینصورت فرم frmMatter با خصوصیاتی مشابه با frmbase ایجاد می شود.

 

حال می خواهیم با کلیک روی زیرمنوی ثبت کالا در فرم اصلی، فرم frmMatter نشان داده شود. برای اینکار ابتدا خصوصیت name مربوط به زیر منوس ثبت کالا را برابر با tsmatter می گذاریم و سپس در event کلیک مربوط به ثبت کالا، کد زیر را می نویسیم:

        [color=#0000ff]private void[/color] tsmatter_Click([color=#0000ff]object[/color] sender, [color=#40e0d0]EventArgs[/color] e)
       {
           frmMatter f = [color=#0000ff]new [/color]frmMatter();
           f.ShowDialog();
       }

تنظیم یک فرم از قبل تعریف شده برای ارث بری:

 

در صورتی که فرمی را آماده کردیم و الان تصمیم داریم که از فرم دیگری ارث بری کند، به قسمت کد آن مراجعه کرده و ارث بری را تعریف می کنیم. مثلا به کد مربوط به frmMatter که از فرم frmbase ارث بری کرده دقت کنید:

    [color=#0000ff]public partial class[/color] [color=#40e0d0]frmMatter[/color] : project6.[color=#40e0d0]frmbase[/color]

دو نقطه نشان دهنده ارث بری است. اسم فرم قبل از دو نقطه نشان دهنده فرم ایجاد شده و نام فرم بعد از دو نقطه نشاندهنده فرمی است که فرم اول از آن ارث بری می کند.

کنترلر Tool Tip

اگر یک کنترلر Tool Tip را به فرم اضافه کنیم، هر کنترلر یک خصوصیت جدید به نام tool tip text پیدا می کند که متنی که در این قسمت نوشته می شود با نگه داشتن ماوس بروی آن کنترلر نشان داده می شود.

مثلا اگر یک کنترلر tool tip به فرم اصلی اضافه کنیم و tool tip text مربوط به جستجو را برابر با click for search قرار دهیم، با اجرای نرم افزار و نگه داشتن ماوس بر روی زیرمنوی جستجو، این متن نشان داده می شود.

ydffu1he3f00c2z9vm8x.png

کنترلر notifyicon

این کنترلر چیزی شبیه به notification ویندوز (سمت گوشه چپ پایین) است. اگر این کنترلر را به فرم اضافه کنیم می توانیم text برایش تعریف کنیم. همچنین آیکن اختصاص دهیم. حتی می توانیم در event کلیک آن کد بنویسیم تا با کلیک بر آن مثلا متنی نشان داده شود:

        [color=#0000cd]private void [/color]notifyIcon1_MouseDoubleClick([color=#0000ff]object [/color]sender, [color=#40e0d0]MouseEventArgs [/color]e)
       {
           [color=#40e0d0]MessageBox[/color].Show([color=#a52a2a]"Thanks users"[/color]);
       }

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

جلسه 13

کار با پایگاه داده

از این جلسه به بعد، همزمان با آموزش سی شارپ، کار با پایگاه داده نیز اضافه میشه. ورژنی که در اینجا استفاده شده، SQL server 2012 هست که می تونید از دی وی دی نصبش کنید یا از لینک

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
دانلود کنید(البته حجمش سه و نیم گیگه). طریقه نصب SQL Server 2012 در

محتوای مخفی

    برای مشاهده محتوای مخفی می بایست در انجمن ثبت نام کنید.
قرار داره، این آموزش نصب روی ویندوز سرور هست ولی می تونیم ما هم ازش کمک بگیریم، از قسمتی که SQL را می خواد از دی وی دی نصب کنه مربوط به کار ماست.

 

طریقه باز کردن SQL Server

Start-> All program -> SQL Server 2012 -> SQL Server management

 

در پنجره باز شده:

قسمت Server name: نام کامپیوتر سرور را می دهیم. چون الان کامپیوتر خودمان، هم سرور است و هم client نام کامپیوتر خود را وارد می کنیم. (برای یافتن نام کامپیوتر، روی My computer راست کلیک، properties، computer name را نگاه می کنیم.)

یا می توانیم در server name از علامت . یا (local) استفاده کنیم.

 

قسمت Autentication: این قسمت را روی Autentication windows می گذاریم. سپس connect می زنیم.

 

n836zhsoqa789ng0nav8.png

 

لیست پایگاه داده ها را در Object Explorer نشان می دهد.

 

ایجاد Data Base

1.روی پوشه DataBases کلیک راست کرده

2.new Data base را انتخاب کرده

3.در پنجره باز شده در قسمت General، یک نام در نظر می گیریم. مثلا projectDB

4.در قسمت path، مسیر پوشه project/data را می دهیم تا در پوشه خودمان ذخیره شود.

 

gzoanzmbkzeujrvi26od.png

 

5. در قسمت option، در قسمت collation گزینه Persian_100_CI_As را انتخاب می کنیم چون فارسی داریم. سپس Ok می زنیم. با اینکار یک Data Base ایجاد می شود.

 

z2d8g4q7c5k9dxgfkzs.png

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
جلسه 14

ایجاد جدول در SQL server:

در پنجره Object Explorer، Databases، پایگاه داده ایجاد شده (projectDB) را باز می کنیم.بروی فولدر Tables راست کلیک کرده ، new Table را انتخاب می کنیم. به اینصورت جدولی باز می شود که می توانیم سطرها و ستون های آن را نامگذاری و تعیین کنیم.

lfjopycv6vf6dwe9atgb.png



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

هر جدول سه قسمت دارد که عبارتند از:

1. Column Name: نام ستونهای جدول است.

2. Type: زمانی که وارد این قسمت می شویم، پنجره Column properties باز می شود. در این قسمت می توانیم نوع داده و یکسری خصوصیات برای فیلد را مشخص کنیم.

3. Allow Nulls: این قسمت، اگر روبروی هر ستون تعریف شده، تیک داشته باشد می تواند آن فیلد توسط کاربر پر نشود.


مثال هایی از انواع مختلفی داده:

tiny int: از جمله انواع int است که حجم کمتری از پایگاه داده را اشغال می کند و برای مثلا سن نوع داده مناسب است.

big int: از جمله انواع int است که نسبت به tiny int حجم بیشتری اشغال می کند و مثلا برای کدملی مناسب است. (در صورتی که نخواهیم عملیات ریاضی بر روی کد ملی انجام دهیم آنرا از نوع string تعریف می کنیم.)

bit : نیز نوع دیگری از انواع داده است که مانند متغیر بولین در سی شارپ است. برای جنسیت می توانیم از bit استفاده کنیم.

String : شش نوع string داریم که در دو دسته تقسیم می شود.

Character string(text, varchar, char)


Unicode character string(nchar.nvarchar,ntext)



فرق این دو دسته string:

اگر فارسی نویسی داریم یا ترکیبی از فارسی و انگلیسی داریم، باید از Unicode ها استفاده کنیم ولی در صورتی که فارسی نویسی نداریم بهتر است از دسته اول استفاده شود تا حجم کمتری اشغال شود. مثلا برای نوشتن نام کالا از stringهای دسته Unicode استفاده می کنیم. حالا از بین این سه نوع Unicode کدام را انتخاب کنیم:

Ntext: اطلاعات در چند صفحه است.

Nchar: این نوع به اندازه ایی که تعریف می کنیم حجم اشغال می کند. مثلا اگه 50 کاراکتری تعریف کنیم و تنها 10 کاراکتر آن را استفاده کنیم به اندازه 50 کاراکتر فضا اشغال می کند.

Nvarchar: این نوع داده به اندازه ایی حجم اشغال می کند که داده برایش تعریف شده است.

بنابراین بهترین انتخاب، nvarchar است.


تعریف کالا:
جدول کالا را بصورت زیر تعریف کرده و نوع هر فیلد را مشخص می کنیم. تنها allow null مربوط به فیلد description را تیک می زنیم.

xxxzys7iyrfy1bs4xb.png



Identify specification : این خصوصیت سه قسمت دارد که عبارتند از:

1. is identify: در صورتی که این گزینه برابر yes باشد، فیلد مورد نظر از یک شروع شده و با اضافه شدن هر رکورد، یکی به آن اضافه می شود. (این خصوصیت را برای فیلد ID برابر Yes می گذاریم)

2. identify increment: تعداد افزایش

3. identify seed: از چه عددی شروع شود.

تعیین کلید اصلی

هر جدولی یک کلید اصلی دارد که نمی تواند تکراری و null باشد. از آنجا که ID را بصورت identify تعریف کردیم، هیچ وقت تکراری نمی شود. بنابراین گزینه خوبی برای کلید اصلی است. برای تعیین کلید اصلی، روی فیلد مورد نظر(در اینجا فیلد ID) کلیک راست کرده، set primary key را انتخاب می کنیم.

ذخیره جدول

بعد از تعریف فیلدها، باید آن را ذخیره کنیم. برای اینکار از تب file، گزینه save را انتخاب می کنیم. در این مرحله باید یک نام برای جدول تعیین کنیم مثلا Tmatter می گذاریم و ذخیره می کنیم.

ویرایش جدول

اگر به پایگاه داده مورد نظر (project db) رفته، سپس فولدر Tables برویم و روی جدول ایجاد شده راست کلیک کنیم، با انتخاب گزینه design می توانیم جدول را edite کنیم.

وارد کردن دستی اطلاعات

اگر بروی جدول ایجاد شده راست کلیک کرده و گزینه edit top 200 rows را بزنیم، می توانیم اطلاعات را دستی وارد کنیم. جدول کالا را مانند زیر با همین روش مقدار دهی می کنیم.

wwg96u3umpe4w1pu2dg.png


به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • جدید...