# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ > آموزش: آموزش برنامه نویسی با سی شارپ از مبتدی تا .........

## system32

*به نام خدا*

سلام به سی شارپ دوستان:

بنده و سایر دوستان برنامه نویسم (لیست دوستانم) برای شما برنامه نویسان گذشته، حال و آینده آرزوی موفقیت می نماییم. بنده قصد دارم برنامه نویسی با سی شارپ را در حد وسع و توانم از سطح مبتدی تا .... توضیح بدهم. 

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

ادامه دارد....

----------


## system32

مقدمه:

هنگام تولد دات نت فریمورک یک زبان برنامه نویسی مهیج نیز متولد شد. نام این زبان برنامه نویسی سی شارپ است. سی شارپ یک زبان برنامه نویسی برای کار با چهارچوب دات نت است.  
فراگیری یک زبان برنامه نویسی می تواند بسیار جالب باشد. اگر شما قبل از این هرگز یک برنامه نویس نبوده اید برای شما تایپ کردن یکسری متن برای تولید یک برنامه قدرتمند بسیار عجیب به نظر می رسد و این نگرانی در شما ایجاد می شود که از کجا و چگونه شروع به یادگیری یک زبان برنامه نویسی بکنم. البته شما باید یکسری مراحل را پشت سر بگذارید تا این کاره شوید.
اولین مرحله داشتن اعتماد به نفس است. برنامه نویسی یک هنر است و قسمتی از علوم و فناوری. اگرچه آن ممکن است شبیه سحر و جادو باشد ولی بیشتر به تخیلات شما وابسته است. شما تخیل می کنید و سپس تخیل خود را عملی می نمایید. 
قبل از اینکه به بررسی ویژگی های زبان برنامه نویسی سی شارپ بپردازیم جادارد که با پراهمیت ترین تکنولوژی برای برنامه نویسان یعنی تکنولوژی دات نت آشنا شویم. دات نت محیطی را فراهم می کند که شما را قادر می سازد هر برنامه کاربردی را برای ویندوز بسازید. این درحالی است که سی شارپ یک زبان برنامه نویسی است که برای کار با این محیط طراحی و ساخته شده است. با استفاده از سی شارپ شما می توانید به عنوان مثال یک صفحه وب، یک برنامه کاربردی تحت ویندوز، یک وب سرویس، یک کامپوننت و ... ایجاد کنید. 
برای درک مفهوم دات نت نیاز است که شما برنامه هایی که در 18 سال پیش نوشته شده اند را به خاطر بیاورید. اگر چه این برنامه ها از لحاظ شکل و شمایل از ویندوز 3.1 گرفته تا ویندوز 7 بسیار با هم متفاوتند ولی توجه کنید که هسته اصلی API تمامی آنها یکسان است. همانطور که نسخه های جدیدی از ویندوز راهی بازار می شود توابع جدیدی به این هسته اضافه می گردند. *
*
*مبانی دات نت * 
 دات نت ، پلات فرم   جديد ماکروسافت بمنظور تحقق نظريه : " نرم افزار بعنوان سرويس " ، است . دات نت   يک محيط  پياده سازی است که بکمک آن می توان اقدام به ايجاد و بکارگيری نرم  افزار و نسل جديدی از عناصر موسوم به " سرويس های وب " ، نمود.  تمامی محصولات  اصلی ماکروسافت از ويژوال استوديو دات نت تا ويندوز و نهايتا"  مجموعه آفيس ،  متاثر از پلات فرم فوق شده و خواهند شد . دات نت به پياده کنندگان اين امکان را  خواهد داد که با زبان برنامه نويسی مورد علاقه خود ، اقدام به پياده سازی برنامه ها   نمايند.  ويژگی ( پتانسيل ) فوق از طريق معرفی  CLR)Common Language Runtime )، ميسر شده  است . در اين مقاله قصد داريم به بررسی دات نت پرداخته و پتانسيل ها و قابليت های  آن را تشريح نمائيم . 
در جولای سال 2000 ، شرکت ماکروسافت در کنفرانس پياده کنندگان حرفه ای (PDC  ) ، در شهر Orlando ايالت کاليفرنيا ،  جزئيات بيشتری  از نسل جديد پلات فرم خود ( دات نت )  بمنظور پياده سازی برنامه های ويندوز و  اينترنت را در اختيار علاقه مندان خصوصا" پياده کنندگان نرم افزار قرار داد .  محوريت ابتکار فوق ، بر فريمورک دات نت استواربوده  ونشاندهنده يک پلات فرم  مناسب بهمراه  کتابخانه های کلاس گسترده ای است که پتانسيل های متعددی را در  اختيار قرار می دهد. يکی از نکات قابل توجه  در پلات فرم فوق،استفاده از  XML و SOAP  بمنظور ارتباط بين  نرم افزارها ی موجود در اينترنت ( نرم افزارهای مبتنی بر وب ) ، است . در اين راستا  مجموعه ای از محصولات مبتنی بر سرويس دهنده با نام سرويس دهندگان Enterprise   دات نت،  مطرح که بمنزله نسل جديدی از  محصولات Backoffice   ماکروسافت ، می باشند.
 فريمورک دات نت ، مدلی کاملا" جديد بمنظور برنامه نويسی و بکارگيری نرم افزار  را ارائه  نموده است. "بيل گيتس "، در سخنرانی خود در  PDC ، بدين نکته  اشاره داشتند  که در هر  پنج تا شش سال ما شاهد يک  تحول عمده در رابطه با پياده سازی نرم افزار بوده  ايم . آخرين موارد در اين زمينه به سوئيچ  از DOS به  ويندوز در سال 1990 و گذر از پياده سازی شانزده بيتی به سی و دو بيتی ( از ويندوز widows 3.x به ويندوز NT/95 ) در  اواسط دهه 90 ميلادی ، است.
با معرفی دات نت در PDC ، پياده  کنندگان آن را معماری مناسبی برای پياده سازی نرم افزار ( برنامه های  Desktop و برنامه های وب )  مشاهده  نمودند . ويژوال استوديو دات نت ، اولين محصول مبتنی بر دات نت ماکروسافت بوده که  در سال 2001 در اختيار علاقه مندان قرار گرفت . اهميـت دات نت برای ماکروسافت تا  بدين حد است که در سال 2001 ، بيش از هشتاد درصد منابع  بخش تحقيق و توسعه اين  شرکت در رابطه با آن صرف شده است . زبان سی شارپ ، که زبانی جديد برای برنامه نويسی  در دات نت است بعنوان زبان استاندارد برای پياده سازی داخلی در شرکت ماکروسافت  پذيرفته شده است . 

*يک پلات فرم مناسب برای آينده 
* دات نت،  اولين پلات فرم طراحی شده از صدر تا ذيل با در نظر  گرفتن واقعيتی با نام  اينترنت است . دات نت از يک ماشين مجازی  خاص در  اين زمينه استفاده می نمايد . ماهيت ماشين مجازی فوق ، بگونه ای است که  از API ويندوز  فاصله و در اين رابطه از يک کتابخانه کلاس استفاده می نمايد که می توان به جرات اين  ادعا را داشت که تاکنون نظير آن ، ايجاد نشده است . امکان استفاده از زبانهای متعدد  برنامه نويسی ، وجود خواهد داشت .معماری  دات نت ، امکان ارتباط بين زبانها را  بسادگی فراهم خواهد کرد .دات نت ، يک رويکرد جديد در رابطه با پياده سازی نر م  افزار را مطرح نموده است . نگاه به دات نت ، عمدتا" بصورت سيستم های توزيع شده است.  با استفاده از XML  ،امکان اجرای  توابع بر روی کامپيوترهای متفاوت يک سازمان ويا جهان فراهم و  جلوه ای زيبا در همياری بمنظور اجرای يک برنامه ، به نمايش در خواهد آمد. از اين  منظر ، سيستم ها از سرويس دهندگان تا سيستم های بدون کابل ، قادر به اشتراک پلات  فرم عمومی يکسانی خواهند بود . با استفاده از  نسخه های  دات نت که برای  تمام آنها در دسترس خواهد بود،  امکان ارتباط مناسب آنها با يکديگر فراهم  خواهد شد. دات نت ، بمنظور طراحی و پياده سازی برنامه های سنتی نيز راهکارها و  امکانات مناسبی را ارائه تا از اين طريق امکان پياده سازی و بکارگيری اين نوع از  نرم افزارها ، بسادگی انجام گيرد . برخی از تکنولوژی ها ی  ارائه شده در دات  نت نظير فرم های ويندوز، تلاشی در اين راستا است .

*ايده های اوليه 
*از اواخر سال 1995 ، شرکت ماکروسافت توجهی خاص و  قابل توجه نسبت  به اينترنت نمود . هدف ماکروسافت در اين زمينه پيوند بين پلات فرم ويندوز و اينترنت  بود. ماحصل تلاش  ماکروسافت در اين زمينه ارائه مدل برنامه نويسی  Windiws DNA ، بود . در اين راستا مجموعه ای  از ابزارها و تکنولوژی های  مبتنی بر اينترنت ، طراحی و ارائه گرديد .  ASP  ، از اولين تلا ش های ماکروسافت در اين زمينه است .  عملا" در اين زمينه ( مطرح شدن اسکريپت ها ی مفسری ) يک برگشت به عقب نسبت به پياده  سازی ساختيافته و شی گراء را شاهد بوده ايم . طراحی ، اشکال زدائی و نگهداری چنين  کدهای غير ساختيافته ای مسائل خاص خود را خواهد داشت . ساير زبانها نظير ويژوال  بيسيک بصورت موفقيت آميز در رابطه با برنامه نويسی بر روی اينترنت و پلات فرم  ماکروسافت استفاده می گرديد ولی اغلب از آن  بمنظور ايجاد عناصری که از طريق ASP ، بخدمت گرفته می شدند ، استفاده می گرديد .در اين  رابطه تلاش های اندکی  نيز در جهت  ايجاد يک اينترفيس مبتنی بر وب بر روی  زبان های سنتی نظير webclasses در VB  ، نيز انجام شد ولی هيچکدام از تلاش های فوق ، در سطح گسترده ای مورد استقبال و  پذيرش قرار نگرفت . ماکروسافت در صدد حل آشفتگی های همراه برنامه های ويندوز  DNA بود . ويندوز DNA  ، تصويری مناسب از يک معماری Three-Tire و مبتنی بر  COM بود که تکنولوژی ASP در لايه  Presentation ، اشياء Bussiness در لايه  ميانی و يک engine  بانک اطلاعاتی رابطه ای در لايه Data ، قرار می گرفت . مفاهيم همراه DNA  ،کامل و بی عيب  بود اما در زمان استفاده عملياتی  چالش های خاص خود را  بدنبال داشت . پياده سازی عناصر COM ، مستلزم يک سطح مناسب  از دانش و مهارت است  و می بايست زمان زيادی  در اين رابطه صرف گردد .   بکارگيری نرم افزارهای DNA ، نيز مسائل خاص خود را داشت (  مسائل مربوط به ورژن ، نصب عناصر و عناصری که با آن  مرتبط می باشند ) .
 بموازات تلاش ساير شرکت ها در رابطه با ارائه راهکارهائی خاص بمنظور پياده  سازی برنامه ها ی وب  ،  شرکت ماکروسافت در صدد برطرف نمودن محدوديت های  مدل برنامه نويسی DNA  گرديد. 

*تولد دات نت 
*در اوايل سال 1998 ، گروهی از پياده کنندگان نرم افزار در ماکروسافت ،  کار خود را بر روی نسخه ای جديد از IIS  ( نسخه چهار) ، به اتمام رساندند که دارای چندين ويژگی جديد در رابطه با ASP  بود .در اين راستا ،  قابليت های جديدی بمنظور پياده سازی برنامه های وب   در ويندوز NT ، فراهم گرديد.گروه پياده کننده دارای ايده  های متعددی برای اعمال اصلاحات جديد بودند . گروه فوق ، کار خود را بر روی يک  معماری جديد برای پياده سازی ايده های مطرح شده ، آغاز نمود . اين پروژه ،  NGWS)Netx Generation Window Services)  ، ناميده گرديد. پس از ارائه  ويژوال استوديو شش ،  در اواخر سال 1998 ،  تلاش برای ايجاد نسخه ای  جديد از ويژوال استوديو در دستور  NGWS ، قرار گرفت . گروه COM+/MTS   در مدل پيشنهادی خود از يک Runtime ، عمومی برای تمامی  زبانهای استفاده شده در ويژوال استوديو ، استفاده نمودند . تلاش افراد درگير در  پروژه NGWS ادامه تا در نهايـت ، شرکت ماکروسافت در کنفرانس  پياده کنندگان حرفه ای (PDC) ، دات  نت را معرفی نمود. 

*مروری بر فريمورک دات نت 
*فريمورک دات نت ، تمامی لايه های پياده سازی نرم افزار را از سطح سيستم  عامل به  بالا ،  تحت پوشش قرار می دهد. فريمورک فوق، سطحی مناسب  وقدرتمند از ارتباط و همبستگی بين تکنولوژی   Presentation  ، تکنولوژی های Component  و تکنولوژی های  Data  را ارائه می نمايد ( نظير  اين ارتباط و همبستگی تاکنون در پلات فرم ويندوز مشاهده نشده است) .  معماری  فوق ، امکان طراحی و پياده سازی برنامه های مبتنی بر اينترنت و محيط های  Desktop ، را بسادگی فراهم و نيازهای هر  گروه از نرم افزارهای فوق را بخوبی جواب می دهد . اجزای اصلی فريمورک دات نت در شکل  زير نشان داده شده است . 
  فريمورک دات نت از  لايه  پائين با عملياتی نظير مديريت حافظه آغاز و بسمت بالا بمنظور ارائه  اينترفيس های برنامه ها و کاربران ، دنبال  می شود . در بين لايه ها ، لايه  های سيستمی ديگر که هر يک دارای پتانسيل های خاصی برای پياده کنندگان می باشند ،  وجود دارد.
 CLR) Common Language  Runtime) ، بمنزله قلب فريمورک دات نت محسوب و engine  لازم بمنظور ارائه قابليت های کليدی را ارائه می نمايد . CLR  ، شامل عناصر اساسی ديگری نظير:  (Common Type System (CTS ، است. علاوه بر مديريت حافظه ، CLR  ، مراجعات به اشياء و عمليات Garbage Collection را نيز  انجام می دهد .
 در لايه ميانی ، ما شاهد نسل جديدی از سرويس های استاندارد نظير  ADO.NET و XML می باشيم .سرويس های فوق ،  تحت کنترل فريمورک بوده و امکان بکارگيری آنها بصورت جامع و استاندارد در بين تمامی  زبانها ، فراهم می گردد . بالاترين لايه ، شامل اينترفيس های برنامه و کاربر است .  فرم های ويندوز ، روشی جديد بمنظور ايجاد برنامه های Desktop  مبتنی بر win32  می باشند. فرم های وب ، يک رابط کاربر  مناسب برای برنامه های  مبتنی بر وب را ارائه می نمايند. سرويس های وب ،  مکانيزمی بمنظور ارتباط برنامه ها از طريق اينترنت و با استفاده از SOAP   ، می باشد. سرويس های وب ، قابل مقايسه با عناصر COM و DCOM بوده با اين تفاوت مهم که در اين راستا از تکنولوژی  های متعدد اينترنت ، استفاده می گردد. فرم های وب و سرويس های وب ،  اينترفيس  اينترنت  دات نت را تشکيل و پياد ه سازی آنان از طريق بخش ديگری در فريمورک  دات نت که  ASP.NET ، ناميده می شود ، محقق می گردد . 
پتانسيل های موجود در هر لايه فريمورک دات نت ، توسط هر يک از زبان های سازگار با  دات نت ، قابل استفاده خواهد بود. در پايان لازم است به اين نکته اشاره گردد که   در اين رابطه ( فريمورک دات نت ) می توان از اينترفيس های مبتنی بر متن ( کاراکتری)  نيز استفاده کرد . اين نوع برنامه ها اصطلاحا" Console Application  ، ناميده می شوند .


ادامه دارد....

----------


## Farshid007

دمت گرم داداش
منم سعی می کنم هر چی گیر اوردم بزارم اینجا!!

----------


## masoud_z_65

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

----------


## system32

*شروع ویژوال سی شارپ 2008:*

برای شروع برنامه ویزوال استادیو را باز کنید. روی گزینه New Project کلیک کنید. حال گزینه WindowsformApplication را انتخاب نمایید. در قسمت Name نام پروژه خود را تعیین کنید. سپس روی دکمه OK کلیک نمایید. 



حال شما یکسری پنجره مشاهده می کنید که به اختصار به توضیح ان ها می پردازم:
1- Solution Explorer: در سمت راست قرار دارد. شما با استفاده از این پنجره می توانید فایل هایی که پروژه شما را تشکیل می دهند را مشاهده و مدیریت کنید.

2- Toolbox: در سمت چپ قرار دارد. یک جعبه ابزار کاملا غنی که می تواند تخیلات شما را به واقعیت تبدیل کند.
3- Properties: در سمت راست قرار دارد وشاید مهمترین پنجره ای باشد که شما به آن احتیاج دارید. 

تقریبا هر چیزی که شما درمحیط ویژوال استادیو با آن کار می کنید یک شی است. فرم ها به عنوان مثال یک شی هستند. اشیا بر حسب کلاس دسته بندی می شوند. برای مثال form یک شی از کلاس Form است. آیتم هایی که شما می توانید روی فرم قرار دهید به نام کنترل شناخته می شوند. تعدادی از اشیا دارای ظاهر دیداری نیستند ولی با کدنویسی می توان آنها را ایجاد کرد. 
هر شی ای از یکسری خواص که به نام Properties ساخته شده است. شما نیز دارای یکسری خصوصیات هستید از قبیل نام، قد، وزن، رنگ مو و ...
خواص معمولا به عنوان ویژگی های یک شی شناخته می شوند. اولین کاری که شما باید انجام دهید تنظیم این خواص می باشد. برای نمایش خواص یک شی کافیست که فقط روی شی کلیک کنید. قبل از این کار مطمئن شوید که پنجره خواص شما نمایش داده شده است. حالا هرجایی از فرم خود را کلیک چپ کنید. حالا به پجره خواص توجه کنید می بینید که خواص فرم به شما نمایش داده می شود. در بالا پنجره خواص می توانید یک لیست پایین افتادنی را مشاهده کنید که نام شی را به شما نمایش می دهد. (Form1 System.Windows.Forms.Form) 
Form1 نام شی شما و System.Windows.Forms.Form نوع شی شماست.

*نامگذاری اشیا:*
قبل از نامگذاری باید توجه کنید که سی شارپ یکسری کلمات را برای خورد رزرو کرده است بنابراین شما نمی توانید از آنها در نمگذاری استفاده کنید.

1- نام باید با حرف و یا یک زیر خط _ شروع شود.
2- نام می تواند ترکیبی از حروف و ارقام باشد.
3- نام نمی تواند شامل هیچ علائمی غیر از _ باشد.
4- نام نمی تواند شامل فضای خالی باشد i am نامعتبر است.

توجه کنید که سی شارپ حساس به حروف است یعنی کلمه Student با student متفاوت است.

----------


## system32

*نامگذاری فرم:*

فقط کافی است خاصیت Name فرم را تغییر دهیم.

* تنظیم عنوان فرم:*

به عنوان فرم خود توجه کنید. بله عنوان آن Form1 است. برای تغییر این عنوان از خاصیت Text فرم استفاده می کنیم. 

* اختصاص آیکن به فرم:*

هر کسی که از ویندوز استفاده می کند با وازه آیکن بسیار آشناست. یک عکس کوچک که معرف برنامه است. 
برای اختصاص آیکن به سراغ اصیت Icon رفته و ان را انتخاب کنید. یک کلید کوچک روبروی آن نمایش داده می شود روی کلید کلیک کنید. پنجر ای جهت اختصاص آیکن به شما نمایش داده می شود. آیکن مورد نظر خود را انتخاب کرده و روی کلید Open کلیک کنید. با انتخاب آیکن یک شکل کوچک از آن در بالای فرم سمت چپ به شما نمایش داده می شود. با حداقل رسانی پنجره در زمان اجرا این ایکن درنوار وظیفه به شما نمایش داده خواهد شد.

* تغییر اندازه فرم:*
برای تغییر اندازه طول و عرض فرم باید به سراغ خاصیت Size رفت. روی دکمه + کلیک کرده و مقادیر مورد نظر را در جای مناسب وارد کنید. شما همچنین می توانید با ماوس روی لبه های فرم رفته و اندازه آن را تغییر دهید.


* اضافه کردن کنترل به فرم:*
تعدادی از کنترل ها دارای یک شکل دیداری هستندد ر حالی که بعضی از آنها اینگونه نیستند. روی جعه ابزار خود رفته در قسمت Common Controls و به عنوان مثال کنترل button را با کلیک چپ ماوس گرفته و روی فرم رها کنید یا روی Button دو بار کلیک چپ کرده تا کنترل به فرم شما اضافه شود.

*تعیین موقعیت فرم:*
به سراغ خاصیت StartPosition رفته و با توجه به توضیحات زیر یکی از گزینه ها را انتخاب کنید:
CenterParent: فرم در مرکز والد خود قرار می گیرد. اگر فرم مربوطه توسط فرم دیگری ایجاد نشده باشد پس فرم در مرکز دستکتاپ قرار می گیرد.
CenterScreen: فرم در مرکز دستکتاپ قرار می گیرد.
Manual: فرم در موقعیتی که ددر خاصیت Location تعیین شده است قرار می گیرد.
WindowsDefaultLocation: سیستم عامل موقعیت فرم را تعیین می کند.

* نحوه نمایش فرم:*
به سراغ خاصیت WindowState رفته و یکی از موارد زیر را انتخاب کنید:
Maximize: فرم در بزرگترین اندازه خود نمایش داده می شود. این اندازه در خاصیت MaximumSize قابل تنظیم است.
Minimize: فرم در کوچکترین اندازه خود نمایش داده می شود. این اندازه در خاصیت MinimumSize قابل تنظیم است.
Normal: فرم در حالت عادی خود نمایش داده می شود.

*نمایش فرم در نوار وظیفه:*
برای این کار مقدار خاصیت ShowInTaskbar را برابر True قرار دهید.

*تنظیم رنگ فرم و تصویر فرم:*
برای این کار از خواص BackColor و BackgroundImage استفاده می کنیم.

ادامه دارد...

----------


## system32

اضافه کرن یک کنترل غیر بصری به فرم:

به عنوان مثال شما فرض کنید که می خواهید به کاربر یک پنجره نمایش ددهید تا کاربر با استفاده از این پنجره عکس خود را انتخاب کنید. پس ما نیاز به یک کنترل داریم که این کار را برای ما انجام دهد. نام این کنترل OpenFiledialog است. 
از جعبه ابزار این کنترل را انتخاب کنید. توجه کنید که این کنترل روی فرم شما اضافه نشد بلکه ر پایین فرم قرار گرفت.
حال به سراغ خواص این کنترل می رویم:

Filename: با استفاده از این خاصیت شما می توانید مسیر فایل خود را مشخص کنید.
Filter: این خاصیت برای محدود کردن نوع فایلی است که یک کاربر می تواند انتخاب کند.
Title: عنوان پنجره ای که به کاربر نمایش می دهد را مشخص می کند.

فرمت خاصیت فیلتر به صورت *فیلتر|توضیحات* است. توضیحات متنی است که در مور این فیلتر توضیح می دهد و فیلتر نیز نوع آن را مشخص می کند. 
Windows Bitmaps|*.BMP|JPEG Files|*.JPG

حال باید کدی بنویسیم که پنجره را به کار نمایش دهد. برای این کار از رویدادها استفاده می کنیم. یک رویداد عملیاتی است که در پاسخ به رفتار کاربر یا ویندوز رخ می دهد. 
حال یک دکمه به فرم خود اضافه کرده و نام آن انتخاب بگذارید. سپس یک کنترل PictureBox نیز به نام picShowPicture برای نمایش عکس و یک کنترل OpenFileDialog نیز به نام ofdSelectPicture برای انتخاب عکس به فرم خود اضافه کنید. حال روی دکمه انتخاب دوبار کلیک کنید. به بلوک کدی که داخل آن قرار دارید توجه کنید یک بلوک کد شامل نام کنترل به همراه یک فایل و سپس نام رویداد Click که زمانی رخ می دهد که کاربر روی این دکمه کلیک کند.
حال برای نمایش پنجره انتخاب عکس احتیاج به یک متد به نام ShowDialog() داریم. :گریه:  اگر مبحث برای شما سخت شد نگران نشوید :ناراحت:  به زودی در قسمت های بعدی به تفصیل در مورد این کنترل ها بحث خواهم کرد :لبخند گشاده!:  فعلا می خواهم شما را با کنویسی آشنا کنم. خوب برمی گردیم سر کارمان. دستور زیر را برای نمایش پنجره انتخاب تصویر بنویسید:

if (ofdSelectPicture.ShowDialog() == DialogResult.OK)
{
در مثال بالا از خاصیت Dialogresult برای تشخیص رفتار کاربر استفاده می کنیم. یعنی می خوهیم متوجه شویم آیا کاربر بعد از انتخاب عکس روی دکمه Ok کلیک کرده یا نه اگر کلیک کرده دستور زیر اجرا بشه:


picShowPicture.Image = Image.FromFile(ofdSelectPicture.FileName);


دستور بالا برای نمایش عکس در قاب عکس به کار می رود.
در نهایت شما باید یک چنین کدی داشته باشید:

if (ofdSelectPicture.ShowDialog() == DialogResult.OK)
{
picShowPicture.Image = Image.FromFile(ofdSelectPicture.FileName);
}


 همچنین شما احتیاج به یک دکمه برای خروج از برنامه دارید. پس یک دکمه به فرم خود اضافه کرده و نام آن را btnExit بگذارید حال دوبار روی ان کلیک کرده و دستور زیر را بنویسید:

this.Close();

اجرای پروژه:

حالا پروژه شما برای اجرا آماده است. روی دکمه SaveAll در نوار ابزار خود کلیک کرده تا پروژه ذخیره شود. حال با زن دکمه F5 برنامه خود را اجرا کنید. حال روی دکمه انتخاب کلیک کرده و عکس مور نظرتان را انتخاب کنید. تبریک می گویم شما در این لحظه اولین برنامه خود را نوشتید.  :تشویق: 

ادامه دارد....

----------


## system32

سلام:

بابت تاخیر یک روزه معذرت می خوام.

*اضافه کردن فرم جدید به برنامه:*

برای این کار از منوی Project روی گزینه Add Windows Form کلیک کرده پنجره ای به شما نمایش داده خواهد شد در کادر Name نام فرم خود را تعیین کرده و سپس دکمه Add را کلیک کنید.

*متغیر
*
به بيان بسيار ساده، مكانهايي جهت ذخيره اطلاعات هستند. شما اطلاعاتي را در يك متغير قرار مي‌دهيد و از اين اطلاعات بوسيله متغير در عبارات ‍‍C#‎ استفاده مي‌نماييد. كنترل نوع اطلاعات ذخيره شده در متغيرها بوسيله تعيين كردن نوع براي هر متغير صورت مي‌پذيرد.

C#‎ زباني بسيار وابسته به انواع است، بطوريكه تمامي عملياتي كه بر روي داده‌ها و متغيرها در اين زبان انجام مي‌گيرد با دانستن نوع آن متغير ميسر مي‌باشد. قوانيني نيز براي تعيين اينكه چه عملياتي بر روي چه متغيري انجام شود نيز وجود دارد.(بسته به نوع متغير)

*
تعريف متغيرها در سي شارپ:*

سي شارپ عناصري را كه بكار مي گيرد همانند اعداد و كاراكترها ، به صورت نوع ها (Types) طبقه بندي مي كند. اين انواع شامل موارد زير مي شوند : 
نوع هاي پايه ايي از پيش تعريف شده مانند اعداد و غيره. 
نوع هاي تعريف شده توسط كاربر كه شامل STRUCT ها و ENUM ها مي شوند. 

*نحوه ي تعريف متغيرها از نوع هاي پايه ايي از پيش تعريف شده :*
همانطور كه مي دانيد از متغيرها براي نگهداري اطلاعات استفاده مي شود. در سي شارپ ابتدا نوع متغير و سپس نام متغير و در آخر يك سمي كولون بكار برده مي شود. براي مثال : 

int a;

كه در اينجا متغير a بعنوان يك متغير حاوي اعداد صحيح تعريف شده است. 

*انواع در ‍C#‎*


sbyte : نوع داده ايي صحيح 8 بيتي علامت دار. 

byte : نوع داده ايي صحيح 8 بيتي بدون علامت. مثال :                        

sbyte val = 12; 



short : نوع داده ايي صحيح 16 بيتي علامت دار. 

ushort : نوع داده ايي صحيح 16 بيتي بدون علامت. مثال :  

short val = 12;



 int : نوع داده ايي صحيح 32 بيتي علامت دار. 

uint : نوع داده ايي صحيح 32 بيتي بدون علامت. مثال :                       

int val = 12;



long : نوع داده ايي صحيح 64 بيتي علامت دار. 

ulong : نوع داده ايي صحيح 64 بيتي بدون علامت. مثال :               

long val1 = 12; 


كلا در اينجا u به معناي unsigned است.


float : نوع اعشاري با single precision . 

double : نوع اعشاري با double precision . مثال :                 

float val = 1.23f;

bool : نوع داده ايي Boolean كه مي تواند true و يا false باشد. مثال : 

bool val = true; 


char : كاراكتر

char val = 'h'; 

_ به نحوه ي تعريف كاراكتر ها و همچنين رشته ها در سي شارپ دقت كنيد._ 

decimal : نوع داده ايي دسيمال با 28 رقم معني دار.              

decimal val = 1.23M;

object : نوعي است نامحدود كه مي تواند تمام انواع ديگر را نيز شامل شود. مثال :

object val = null;

 string : رشته ؛ در اينجا يك رشته توالي كاراكترهاي يونيكد مي باشد. مثال :   

string s = "hello";

*يك نكته :* 

بهتر است هنگام تعريف يك متغير ، نامي با مسما براي آن انتخاب شود تا در هنگام كار خواندن كد ساده تر گردد. 
تمام نوع هاي پيش فرض تعريف شده در سي شارپ شيء هستند.

*عملگرها و عملوندها*
برای تعریف یک متغیر کافیست بدینصورت عمل نمایید: اول نام نوع متغیر مورد نظرتون رو تایپ كنید و بعد نامی را برای متغیر انتخاب نموده و در آخر می تونید اون رو مقداردهی اولیه نیر بكنید.
استفاده از چند علامت مساوی در مقداردهی اولیه متغیر:
همانند C شما در C#‎ نیز قادر به استفاده از چند علامت مساوی برای مقداردهی به متغیرها هستید. به مثال زیر دقت کنید:

i = j = k = 0;
خیلی ساده است، این دستور در زمان کامپایل برای CPU به دستوری مانند دستور زیر تبدیل می شود:

i = 0; j = 0; k = 0;

*عملگرهای محاسباتی:* 
جمع    
+

تفریق    
-

ضرب    
*

تقسم    
/

باقیمانده تقسیم صحیح    
%

*اپراتورهای منطقی:* 
عمل ترکیب AND روی بیتها    
&

عمل ترکیب OR روی بیتها    
|

عمل ترکیب یای انحصاری روی بیتها    
^

متمم یک عدد باینری    
~

حرکت بیتها به سمت راست    
>>n

حرکت بیتها به سمت    
<

همانند ++C، C و جاوا شما در #C اجازه استفاده از عملگرهای کاهش و افزایش را داريد. همچنین شما می توانید از دستورات انتساب خلاصه شده نیز استفاده کنید: 

// Increment and Decrement Operators i = 5;
j = 10;
x = i++; //x = 5, then i = 6
y = --j; //y = 9 and j = 9
z = ++i; //z = 7 and i = 7
// Combining Arithmetic and Assignment Statements
x = x + 3; //can also be written as:
x += 3; //add 3 to x; store result in x
//also with the other basic operations:
temp *= 1.80; //mult temp by 1.80
z -= 7; //subtract 7 from z
y /= 1.3; //divide y by 1.3



*عملگرهاي مقايسه اي:*
همانند تمامي زبانهاي برنامه نويسي سي شارپ نيز داراي عملگرهاي مقايسه اي است. اما در نوع نمايش عملگر تفاوت وجود دارد. در سي شارپ از دو مساوي براي مقايسه يكسان بودن استفاده مي شود. اگر شما به تركيب شرطها در يك دستور if نياز داشته باشيد مي تواند از سه عمگر "و"، "يا" و نقيض استفاده كنيد. البته اين سه عملگر مختص دستور if نيستند.

بزرگتر    
>

كوچكتر    
<

مساوي    
==

مخالف    
!=

بزرگتر مساوي    
>=

كوچكتر مساوي    
<=


*عملگرهاي منطقي:*
عملگر AND منطقي : &&
عملگر OR   منطقي : ||
عملگر NOT منطقي : ~

*نحوه تعریف یک تابع:*

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

public void MyProcedure()
{
// The procedure’s code goes here.
}

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

public string AuthorName()
{
return “James”;
}

در مثال زیر هم با یک تابع که یک پارامتر را به عنوان وودی می پذیرد آشنا شوید:

public string AuthorName(string BookName)
{
// procedure code goes here
}


منابع استفاده شده: 
1- jdmnarmafzar87.blogfa.com
2- ترجمه و تلخیص از سایت های آموزش سی شارپ
ادامه دارد.........

----------


## system32

*نمایش پنجره پیغام:*

یک پنجره پیغام کادری که به کاربر نمایش داده می شود و از او تقاضا می گردد که با توجه به متن پیغام عملی را انجام دهد یا اینکه این پیغام یک پیغام اطلاعاتی است. برای نمایش یک پیغام به صورت زیر کد می نویسیم:

MessageBox.Show(string _message_);
هنگام انتخاب یکی از کلیدهای پیغام توسط کاربر مقدار برگردانده می شود:

system32-1.png

مقدار بازگشتی در DialogResult ذخیره می شود. بعدا روی این قضیه مفصل بحث می کنیم.

*دادن عنوان:*
به صورت زیر کد می نویسیم:

Show(string text, string caption);*تعیین دکمه های روی پیغام:*

Show(string text, string caption, MessageBoxButtons buttons);
توجه کنید که MessageBoxButtons یک شمارشی است و شما دقیقا باید عین این عبارت را نوشته و سپس با گذاشتن یک نقطه جلوی آن لیستی از شمارشی های زیر به شما نمایش داده خواهد شد.
system32-1.png

اختصاص آیکن:
به مثال زیر توجه کنید:

MessageBox.Show("Your order appears to be correct" +                                "\nAre you ready to provide your credit card information?",                                "Customer Order Processing",                                               MessageBoxButtons.YesNoCancel,                                               MessageBoxIcon.Information);
همانند نکته بالا MessageBoxIcon نیز یک شمارشی است که با توجه به مقادیر زیر یکی از این آیکن ها در پیغام شما نمایش داده می شود
system32-1.jpg

ادامه دارد....

----------


## system32

*ایجاد کلاس:*
 برای تعریف کلاس در سی شارپ باید به صورت زیر عمل کرد:  [public] [abstract | sealed] [partial] class className
{
   ...
} برای مثال می خواهیم کلاسی برای یک دانشجو تعریف کنیم: public class Student
{
   public int ID { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public DateTime BornDate { get; set; }
   // other properties goes here ...
}
در مطلب قبلی یک کلاس برای دانشجو ایجاد کردیم. حالا نحوه استفاده از این کلاس را شرح می دهیم: Student st = new Student()
st.ID = 123563;
st.FirstName = "Ali";
st.LastName = "Alavi";
st.BornDate = DateTime.Parse("1368/08/15");

 در خط اول یک شیئ از کلاس Student با استفاده  از کلمه کلیدی new ایجاد کردیم و در خطوط بعدی به مشخصه های این کلاس یعنی  ID, FirstName, LastName, BornDate مقدار دادیم. در خط آخر برای مقدار دهی  به مشخصه BornDate از تابع Parse مربوط به کلاس DateTime استفاده کرده ایم.  این تابع ورودی متنی را به تاریخ / زمان تبدیل می کند.


برای ساخت یک کلاس به کمک محیط ویژوال استادیو از منوی Project گزینه Add Class را انتخاب نمایید.
برای مدیریت کلاس های موجود در سی شارپ از پنجره Class View در منوی View hsjthni ;kdn.


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

public class House {     string PropertyNumber;     char PropertyType;     byte Stories;     uint bedrooms;     decimal Value; }

در تعریف کلاس ها می توان یک سری کلمه کلیدی را به کار برد که به کلاس مورد  نظر ویژگی خاصی را می دهند. مثلا استفاده از کلمه کلیدی abstract باعث می  شود که نتوان از کلاس مورد نظر مشتق شد.

1. کلمه کلیدی abstract
استفاده  از این کلمه به این معنی است که نمی توان از این کلاس مشتق شد و این کلاس  فقط می تواند به عنوان کلاس پایه برای دیگر کلاس ها استفاده شود. البته  مطلب دوم شاید کاملا صحیح نباشد که در ادامه توضیح خواهیم داد. برای مثال  به کدهای زیر توجه کنید.
public abstract class A
{
   public int SomeProperty { get; set; }
}

....
A myA = new A();


 به  دلیل این که کلاس A به صورت abstract تعریف شده است، نمی توان یک شیئ از  این کلاس را تعریف کرد. پس خط آخر دستورات گفته شده، باعث بروز خطا هنگام  کامپایل برنامه خواهد شد. در صورتی که بخواهیم از کلاس A استفاده کنیم می  توانیم به صورت زیر عمل کنیم:


public class B : A
{
   public int OtherProperty { get; set; }
}

....
B myB = new B();
myB.SomeProperty = 12;
myB.OtherProperty = 20;

2. کلمه کلیدی sealed:
این  کلمه کلیدی دقیقا برعکس کلمه کلیدی Abstract عمل می کند. یعنی اگر کلاسی  به صورت sealed تعریف شود، نمی توان از این کلاس مشتق شد و برای استفاده  باید یک شئی جدید از این کلاس تعریف کرد. نحوه تعریف و استفاده از این کلاس  ها به صورت زیر است:

public sealed class mySealed
{
   public double P1 { get; set; }
}

...
mySealed m = new mySealed();
m.P1 = 50.7345;

3. کلمه کلیدی static:
در  صورتی که کلاس به کلمه کلیدی static معرفی شود، اعضای آن بدون نمونه سازی  از کلاس (تعریف شیئ جدید) قابل دسترسی هستند. البته تمام مشخصه ها و توابع  باید به صورت static تعریف شوند. به مثال زیر توجه کنید:

public static class myClass
{
  public static int myValue { get; set; }
  public static int Square()
  {
     return (myValue * myValue);
  }
}

...
myClass.myValue = 7;
int s = myClass.Square();

استفاده از دستور زیر باعث بروز خطا در زمان کامپایل می شود:
myClass m = new myClass();
m.myValue = 7;
int s = m.Square();

از  کلمه کلید static می توان استفاده های جالبی کرد. مثلا اگر یک مشخصه یا یک  تابع در یک کلاس به صورت static تعریف شود، بدون نمونه سازی از کلاس می  توان به آن دسترسی داشت. در مثال زیر کلاس A به صورت static تعریف نشده است  ولی بدون نمونه سازی از کلاس می توان به تابع Add دسترسی داشت.

public class A
{
   public static int myValue {get; set; }
   public static Add(int a, int b)
   {
      return (a + b);
   }
}

...
int m = A.Add(12, 40);

همچنین می توان از دستورات زیر استفاده کرد:

A myA = new A();
imt m = myA.Add (12, 40);



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

3. کلمه کلیدی partial:
استفاده  از این به کامپایلر می گوید که کد های ذکر شده در اینجا فقط بخشی از کدهای  کلاس اصلی است. یعنی می توان کد های کلاس را در چند کلاس مجزا نوشت. در  دات نت، تمامی کلاس های فرم به صورت partial تعریف می شوند. به مثال زیر  توجه کنید:

public partial class myClass
{
   public int P1 { get; set; }
}

...
public partial class myClass
{
   public int P2 { get; set; }
}

...
myClass mc = new myClass();
mc.P1 = 39;
mc.P2 = 86;
همانطور  که مشاهده می کنید بخشی از کد های کلاس myClass در یک جا و ادامه کدها در  قسمت دیگری آمده است. از این ویژگی می توان برای گسترش کلاس ها استفاده  کرد.






*تعریف ثوابت:*

برای تعریف یک ثابت از کلمه کلیدی const استفاده می کنیم. (const int i=0;)

منابع: وبلاگ http://linq-class-csharp.blogfa.com/ و ترجمه و تلخیص از سایت های آموزش سی شارپ

ادامه دارد.......

----------


## system32

*آرایه ها در سی شارپ :*

هنگامی آرایه ها ایجاد می شوند که بخواهیم با مجموعه ای از اطلاعات هم جنس کار کنیم. برای نمونه از یک آرایه برای ذخیره تعدادی کاراکتر می خواهیم استفاده نماییم. آرایه ها هم یک نوع متغیر هستند پس باید تعریف و مقدار دهی اولیه شوند ، نوع و تعداد اعضای آن ها نیز باید معین گردد.
فرض کنید ۱۰ داده ی هم جنس داریم ( برای مثال رشته (string) ) و می خواهیم آن ها را ذخیره کنیم. یا می توان ۱۰ متغیر مختلف را تعریف کرد و سپس تک تک آن ها را مقدار دهی نمود و یا یک آرایه تعریف نمود و سپس در خانه های مختلف آن این ده عضو را چید. این مطلب زمانی حائز اهمیت می شود که داده های هم جنس و به نوعی مرتبط ما تعداد زیادی داشته باشند.

برای تعریف آرایه چندین راه مختلف وجود دارد :
برای تعریف آرایه ابتدا نوع آن را مشخص می کنید سپس [] را باید جلوی تعریف نوع بگذارید این دستور زبان است و چون چرا ندارد! در زبان سی کمی متفاوت بود. این کروشه ها بعد از نام متغیر می آمدند. و سپس در این جا نام یک متغیر را که بعدا به آن ارجا می دهیم خواهید گذاشت. برای مثال


int[] table; // not int table[];


حد پایین آرایه صفر بوده برای مثال اگر آرایه chrData[] ده عضو داشته باشد، اولین عضو آن chrData[0] و آخرین عضو آن chrData[9] است.
مطلب دیگری که در مورد آرایه ها خیلی مهم است اندازه ی آن است. یعنی یک آرایه حاوی چند خانه ی خالی است که ما اجازه داریم آن را پر کنیم. مثال :

int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it’s a 20-element array


1- تعریف آرایه ای از رشته ها و مقدار دهی اولیه آن.


String[] strData = new string[2];


2- تعریف و مقدار دهی اولیه


string [] strData = { “1234″,”abcd” };


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

۳- روشی دیگر برای مقدار دهی اولیه


strData[0] = “1234″;
strData[1] = “abcd”;


* مثال:*
// [
 int[] numbers = new int[5] {1, 2, 3, 4, 5}; string[] names = new string[3] {"Matt", "Joanne", "Robert"};

int[] numbers = new int[] {1, 2, 3, 4, 5}; string[] names = new string[] {"Matt", "Joanne", "Robert"};

int[] numbers = {1, 2, 3, 4, 5}; string[] names = {"Matt", "Joanne", "Robert"};

int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };

int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };

int[,] numbers = { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };

int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; numbers[4] = 5;

int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} }; numbers[1, 1] = 5;

int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5} };
numbers[0][0] = 58; numbers[1][1] = 667;

*تعیین طول آرایه:*
int[] numbers = {1, 2, 3, 4, 5}; int LengthOfNumbers = numbers.Length;

*چاپ مقادیر درون آرایه*



int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0}; foreach (int i in numbers) {    System.Console.WriteLine(i); }
توجه: به جای Console.WriteLine  از MessageBox  استفاده کنید.



int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}}; foreach(int i in numbers) {    Console.Write("{0} ", i); }

منبع: سایت http://www.irandevelopers.com
مثال ها از MSDN

----------


## system32

*رشته ها*

تعریف: یک رشته شی ای از نوع String است که یک مقدار متنی را در خود ذخیره می کند. در واقع یک رشته از آرایه ای از کاراکترها تشکیل شده است. یک رشته با کلمه کلیدی String به صورت های زیر تعریف می گردد:

string message1;  
// Initialize to null. 
string message2 = null;  
// Initialize as an empty string. 
// Use the Empty constant instead of the literal "". 
string message3 = System.String.Empty;  
//Initialize with a regular string literal. 
string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";  
// Initialize with a verbatim string literal. 
string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";  
// Use System.String if you prefer. 
System.String greeting = "Hello World!";  
// In local variables (i.e. within a method body) 
// you can use implicit typing. 
var temp = "I'm still a strongly-typed System.String!";  
// Use a const string to prevent 'message4' from 
// being used to store another string value. 
const string message4 = "You can't get rid of me!"; 
 // Use the String constructor only when creating 
// a string from a char*, char[], or sbyte*. See 
// System.String documentation for details. 
char[] letters = { 'A', 'B', 'C' }; 
string alphabet = new string(letters);
*اتصال دو رشته:*
برای این کار از عملگر + استفاده می کنیم:
string s1 = "Hello "; 
string s2 = s1; 
s1 += "World";  
System.Console.WriteLine(s2); //Output: Hello World


* کاراکترهای خاص:*
یکسری کاراکتر وجود دارند که اگر در یک رشته قرار گیرند وظیفه خاصی را انجام میدهند این کاراکترها عبارتند از:
list.png

نکته: شما نمی توانید از کاراکتر \ به صورت تکی در یک رشته استفاده کنید بلکه یا باید آن را به صورت \\ بنویسید یا از یک علامت @ قبل از رشته استفاده کنید:

string filePath = @"C:\Users\scoleridge\Documents\"; 
//Output: C:\Users\scoleridge\Documents\
*زیر رشته ها:*

public string Substring(     int startIndex,     int length ) string s3 = "Visual C#‎‎‎‎‎ Express"; System.Console.WriteLine(s3.Substring(7, 2)); // Output: "C#‎‎‎‎‎
*دسترسی به کاراکترهای خاص یک رشته:*
string s5 = "Printing backwards";  
for (int i = 0; i < s5.Length; i++) 
{     
System.Console.Write(s5[s5.Length - i - 1]);
 } 
// Output: "sdrawkcab gnitnirP"
توجه کنید چون یک رشته آرایه ای از کاراکترهاست برای دسترسی به یک عنصر آرایه چه میکردیم؟ برای جواب به قسمت آرایه ها مراجعه کنید. :لبخند گشاده!: 

*تعریف رشته خالی:*

_منبع: MSDN_
string s = String.Empty;ادامه دارد...

----------


## system32

*جملات شرطی:*

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

*دستور If:*

if (condition)
statement(s)
else
statement(s)

مثال:
bool isZero;
if (i == 0)
{
isZero = true;
Console.WriteLine("i is Zero");
}
else
{
isZero = false;
Console.WriteLine("i is Non-zero");
}

دستور بالا می گوید اگر I برابر 0 بود مقدار isZero را برابر true گردان و اعلان کن که مقدار i صفر است و در غیر اینصورت ...
در مثال بالا در شرط if توجه کنید که برای مقایسه از علامت == استفاده شد نه علامت =

*دستور Switch:*
برای صرفه جویی در دستورات if-else  از این دستور استفاده می کنیم:

switch (integerA)
{
case 1:
Console.WriteLine("integerA =1");
break;
case 2:
Console.WriteLine("integerA =2");
break;
case 3:
Console.WriteLine("integerA =3");
break;
default:
Console.WriteLine("integerA is not 1,2, or 3");
break;
}

دستور بالا به این صورت عمل می کند که روی مقدار A تمرکز کن حال اگر مقدار A به عنوان مثال برابر 1 (case 1) بود مقدار 1 را چاپ کن و سپس از حلقه خارج شو (break).
توجه کنید که انتهای دستورات هر Case نوشتن یک break الزامیست.

// assume country and language are of type string
switch(country)
{
case "America":
CallAmericanOnlyMethod();
goto case "Britain";
case "France":
language = "French";
break;
case "Britain":
language = "English";
break;
}
نکته: اگر شما احتمال می دهید هیچ یک از Case ها اجرا نخواهد شد می توانید از مقدار default استفاده کنید.

switch(country)
{
case "America":
CallAmericanOnlyMethod();
goto case "Britain";
case "France":
language = "French";
break;
case "Britain":
language = "English";
break;
default: language="Persian";
}

نکته:اگر می خواهید یک دستور if برای همیشه درست باشد از دستور if (true) استفاده کنید.
نکته: شما در نوشتن if-else هیچ محدودیتی ندارید.
نکته: برای تست چندین شرط می توانید از if else به صورت زیر استفاده کنید:

if (input == "")
{
Console.WriteLine("You typed in an empty string.");
}
else if (input.Length < 5)
{
Console.WriteLine("The string had less than 5 characters.");
}
else if (input.Length < 10)
{
Console.WriteLine("The string had at least 5 but less than 10
Characters.");
}

نکته: شما همچنین می توانید برای ترکیب چندین شرط از علامت های && و || نیز استفاده کنید:

if (i==0&& j==1) {} یا if(i==0 ||j==1) {} هنگامی که شما از && استفاده می کنید باید هر دو شرط صحیح باشند تا مقدار true بازگردانده شود ولی برای || کافی است فقط یکی از شرط ها صحیح باشد.

ادامه دارد...

----------


## system32

*حلقه های تکرار:*

سی شارپ چهار حلقه تکرار (for, while, do . . . while, and foreach) را برای شما مهیا می کند. یک حلقه تکرار یکسری کد را تا وقتی شرط صحیح برقرا باشد مدام تکرار می کند.

*حلقه for:*
for (initializer; condition; iterator)
statement(s)

initializer: یک مقدار اولیه قبل از اینکه حلقه for اجرا شود.
condition: قبل از اینکه مقدار iterator تغییر کند باید این شرط برقرار باشد.
iterator: یک شمارنده برای حلقه for.

for (int i = 0; i < 100; i=i+1) // This is equivalent to
// For i = 0 To 99 in VB.
{
Console.WriteLine(i);
}

روند کار بدین صورت است که شما یک مقدار اولیه i تعریق نموده و مقدار 0 را به آن اختصاص می دهید حال اگر i کم تر از 100 باشدد کدهای درون حلقه اجرا شده و سپس یکی به مقدار i اضافه می گردد و سپس دوباره شرط بررسی شده و الی آخر. این کد اعداد 0 - 99 را نمایش می هد.

*حلقه While:*
این حلقه تا هنگامی که شرط درون آن صحیح باشد دستورات را اجرا می نماید.
while(condition)
statement(s);

bool condition = false;
while (!condition)
{
// This loop spins until the condition is true.
DoSomeWork();
condition = CheckCondition(); // assume CheckCondition() returns a bool
}

*حلقه do...while:*
این حلقه همانند حلقه while عمل می کند با این تفاوت که ابتدا دستورات داخل حلقه یکمرتبه اجرا می شود و سپس شرط حلقه بررسی می گردد. این کار زمانی مفید است که شما بخواهید حداقل یکبار دستورات شما اجر اشوند.

مثال:
bool condition;
do
{
// This loop will at least execute once, even if Condition is false.
MustBeCalledAtLeastOnce();
condition = CheckCondition();
} while (condition);

*حلقه foreach:*

foreach (int temp in arrayOfInts)
{
Console.WriteLine(temp);
}

از foreach براي حركت در  بين اعضاي يك آرايه (مانند مثال زیر) و يا مجموعه ايي از اشياء استفاده مي  شود 

int odd = 0, even = 0; 
int[] arr = new int [] {0,1,2,5,7,8,11}; 

foreach (int i in arr) 
{ 
if (i%2 == 0) 
even++; 
else 
odd++; 
} 
Console.WriteLine( "Found {0} Odd Numbers, and {1} Even Numbers.", odd, even) ; 
Console.ReadLine(); 
} 
} 
} 

در كد فوق با استفاده از حلقه ي foreach تك تك اعضاي آرايه در مورد زوج و  يا فرد بودن مورد بررسي قرار گرفته اند و تعداد اعضاي زوج و فرد در آخر  نمايش داده مي شود.

ادامه دارد....

----------


## system32

*برچسب ها (Lable)* 

برچسب ها کنترل هایی جهت نمایش متون ایستا هستند. این بدان معناست که کاربران به طور مستقیم نمی توانند متون آنها را  تغییر دهند. 
برچسب ها معمولا برای ارائه یکسری اطلاعات و توضیحات در مورد کنترل خاصی به  کاربر هستند. از جعبه ابزار یک برچسب به روی فرم خود اضافه کرده سپس از  پنجره خواص خواص آن را به صورت زیر تغییر دهید:
Name: نام کنترل
Text: متن برچسب

*جعبه متنی (TextBox)* 

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


122.png
MultiLine: چند خطی نمودن کنترل
ScrollBars: نمایش اسکرول هنگامی که متن شما از حد و حدود اندازه کنترل شما بیشتر باشد.
MaxLenght: تعیین حداکثر تعداد کاراکترهایی که می توانند وارد شوند.
مثال کدنویسی: 
 textBox1.MaxLength = 1020; PasswordChar: هر کاراکتری که در این قسمت وارد کنید هنگام نوشتن متنی در  درون جعبه متنی اطلاعات ورودی شما به صورت همیین کاراکتر نمایش داده خواهد  شد. با کاراکتر * امتحان کنید.
UseSystemPasswordChar: کنترل شما را به یک جعبه متنی با قابلیت دریافت  کلمه عبور تبدیل می کند. مثلا اجازه کپی گرفتن از اطلاعات را به شما نمی  دهد، کاراکترها را به صورت ستاره دار نمایش می دهدو ...
ReadOnly: اگر مقدار این خاصیت true باشد اطلاعات جعبه متنی فقط قابل خواندن می شود.

متدها:
اگر بخواهیم اطلاعات یک جعبه متنی را کپی یا برش دهیم یا متنی را داخل جعبه  متنی جاگذاری نماییم از شیوه زیر استفاده می کنیم. ابتدا سه دکمه روی فرم  خود قرار دهید و طبق نامگذاری زیر کد مربوطه را در هر دکمه قرار دهید.
 
 private void btnEditCut_Click(object  sender, EventArgs  e) {      this.txtNotice.Cut(); } 
      private void btnEditCopy_Click(object  sender, EventArgs  e) {      this.txtNotice.Copy(); }       
private void btnEditPaste_Click(object  sender, EventArgs  e) {      this.txtNotice.Paste(); } 

تکمیل خودکار اطلاعات جعبه متنی:






// List of custom suggestions
string[] suggestions = new string[] {
"Google",
"Google Images",
"Yahoo",
"Youtube"
};
 
// Use the AutoCompleteMode that suits you.
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
 
// Since we are using custom suggestions you
// should use this source.
// Use the other non-custom sources if you
// don't want to use custom suggestions.
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
 
// And finally add the above suggestions to the CustomSource
textBox1.AutoCompleteCustomSource.AddRange(suggest  ions);

 

رویدادها:

رویدادها اتفاقاتی هستند که هنگام انجام یک عمل اتفاق می افتد. تقریبا هر  کاری که شما می خواهید انجام دهیم توسط رویدادها انجام می پذیرد از کلیک  کردن روی یک دکمه گرفته تا حرکت های ماوس و صفحه کلید و باز و بسته شدن فرم  و ...
هر کنترل برای خود یکسری رویداد اختصاصی دارد. یکسری رویدادها هم روی اکثر  کنترل ها با هم مشترکند. مثلا برای جعبه متنی رویداد زیر وجود دارد:
TextChanged: این رویداد زمانی رخ می دهد که متن جعبه متنی تغییر می کند.

----------


## Abolfazl.programmer

سلام
اگه میشه بگین این کد ها رو کجا بنویسیم (منظورم کدوم رویداد یا متد یا شروع کلاس)

----------


## system32

*دکمه: (button)*

یک دکمه کنترلی است که اگر کاربر روی آن کلیک نمود کدی که در درون آن نوشته شده است اجرا می گردد.



امروز می خوام نحوه ساختن یک کنترل را از طریق کدنویسی توضیح بدم. به کد زیر توجه کنید:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication26
{
    public partial class Form1 : Form
    {
        public Form1()
        {
           
            InitializeComponent();
            
Button btn = new Button();
             this.Controls.Add(btn);
        }

    }
}
روی فرم خود کلیک راست کرده و View Code  را بزنید. یکسری کد به شما نمایش داده می شود.
8 خط اول فضای نامهای  (namespace) برنامه هستند. یک فضای نام بوسیله کلمه کلیدی using به برنامه معرفی می شود. وقتی به برنامه اضافه می گردد یکسری امکانات را در اختیار شما می گذارد به عنوان مثال اگر خواستید با محیط های گرافیکی کار کنید باید ابتدا فضای نام System.Drawing را به برنامه اضافه کنیم تا بتوانید از کلاس های درون آن فضای نام استفاده کنید.  شما هنگامی که یک پروژه جدید ایجاد می کنید خود ویژوال یکسری فضای نام را به طور پیش فرض به برنامه اضافه می کند پس شما فعلا نیازی ندارید که این قسمت را تغییر دهید. در آبنده بیشتر در این مورد توضیح می دهم.
کل فرم ما یک کلاس است و کنترل هایی که روی فرم قرار می دهیم اعضای این کلاس هستند. به خط 12 توجه کنید به خصوص کلمه کلیدی class و حوزه ای که این کلاس پوشش می دهد. (ابتدا و انتهای آکولاد را ببینید)
دستوراتی که در قسمت  Public Form() می نویسید هنگام ایجاد فرم شما اجرا می گردند پس ما کنترل هایی که می خواهیم به فرم خود اضافه کنیم را *فعلا* در این قسمت می نویسیم البته جاهای دیگه هم می تونیم اونارو اضافه کنیم ولی فعلا کاری باهاش نداریم. دکمه یک کلاس است و یک کلاس هم از یکسری اعضا استفاده می کنه که اعضای اونم یکسری خاصیت دارند (متن و رنگ متن و فونت و ...) پس ما برای استفاده از این کلاس باید اونو تعریف کنیم. به صورت زیر:
*نوع کلاس new= نام کلاس نوع کلاس*
طبق دستور بالا نوع کلاس ما از نوع Button و نام کلاس هم دست خودمونه. من اسمشو می زارم btn. در خط بعدی باید این کنترل را به فرم خودم اضافه کنم. برای اشاره به فرمم از کلمه کلیدی *this* استفاده می کنم. سپس از خاصیت *Controls* آن و سپس از متد *Add* آن برای اضافه کردن کنترل به فرم به صورت نوشته شده استفاده می کنم. توجه کنید 
ببینید در کل برای کدنویسی همونطوری که برای خودتان دستورات را می خوانید بنویسید. مثلا در این مثال من می گم به این (this) فرمم به کنترل های (controls) روی ان اضافه کن(add) کنترل کلید را(پارامتر متد). این یه نکته اساسی تو سی شارپه. من از سی شارپ به خاطر این ویژگیش خوشم اومد. البته یه ویژگی از بین هزارویژگی دیگر که از وقت و حوصله این مطلب خارجه. برنامه را اجرا کنید چه اتفاقی افتاد....
شما می توانید خواص دیگر کنترل را قبل از اضافه کردن تعیین کنید. مثلا اگر یه خط پایینتر بنویسید btn.Text="Hello" عنوان کلید شما تغییر می کنه. امتحان کنید. در ضمن تا فراموش نکردم در پایان هر دستور تو سی شارپ باید از *;* استفاده کنید. یه خاصیت می تونه هم خوندنی باشه و هم نوشتنی. حالا از کجا متوجه بشیم. ببینید وقتی شما یه خاصیت رو انتخاب می کنید یه کادر توضیحی کنارش نمایش داده می شه شما توی کادر به دنبال دو کلمه get و set بگردید اگر فقط get یافتید به این معنی است که این خاصیت یه مقداری رو برای شما بر می گردونه مثلا می گه متن کنترل شما چیه. و set به شما این اجازه رو می ده که خاصیت کنترلتون رو تغییر بدید. حالا برای اینکه نوع مقداری رو که خاصیت می گیره یا بر می گردونه را متوجه بشیم به اول کادر پیغام توجه کنید بله نوشته یا string یا bool یا int یا یه نام کلاس و .... پس اگه می خواهیم به رنگ پس زمینه دکممون رو عوض کنیم باید ابتدا نام btn را نوشته سپس یک . و سپس نام خاصیت BackColor را می نویسیم حال وقتی می خواهید BackColor را از لیست انتخاب کنید به کادر توضیحی توجه کنید. آیا یک خاصیت خواندنی یا نوشتنیه؟ بله درسته هم خواندنی و هم نوشتنی. نوعی که می گیره یا برمی گردونه چیه؟ Color خوب پس برای انتساب یک رنگ مشگی به کنترل می نویسیم:
btn.BackColor=Color.Black;و مثلا اگه بخواهیم رنگ پس زمینه فرم رو برای کنترل کلیدمون انتخاب کنیم می نویسیم:
btn.BackColor=this.BackColor
نکته ای که وجود داره اینه که نوع دو طرف علامت انتساب باید یکی باشه. دوم به نحوه چیدمان کدها در عملیات انتساب و دریافت مقدار در ددو کد بالا توجه کنید.

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

1- یه کنترل Label به روش کد نویسی روی فرمتون اضافه کنید که متن درونش Hello باشه.
2- یه کنترل Button به روش کدنویسی روی فرمتون اضافه کنید که رنگ متنش سفید و رنگ پس زمینش سیاه باشه در ضمن متنش رو از متن Label بگیره.
3- با توجه به اینکه خاصیت Opacity فرم میزان شفافیت فرم رو مشخص می کنه کدی بنویسید که هنگام اجرا شدن فرم، فرم را به آرامی از شفاف بودن به سمت کدر شدن ببره.

----------


## system32

با سلام:

و اما جواب سوال ها:

برنامه را از ضمیمه دانلود کنید یا به کد زیر توجه نمایید:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication27
{
    public partial class Form1 : Form
    {
        //Code by System32 : barnamenevis.org

        public Form1()
        {
            InitializeComponent();
            Label lbl = new Label();
            lbl.Text = "Hello";
            this.Controls.Add(lbl);

            Button btn = new Button();
            btn.ForeColor = Color.White;
            btn.BackColor = Color.Black;
            btn.Text = lbl.Text;
            btn.Location = new Point(100, 0);
            btn.Click += new EventHandler(btn_Click);
            this.Controls.Add(btn);
        }

        void btn_Click(object sender, EventArgs e)
        {
            this.Opacity = 0;
            for (double i = 0; i < 1; i = i + .00001)
            {
                this.Opacity = i;
            }
        }
    }
}

به ترتیب خطوط را توضیح می دم.

ابتدا شما یک کلاس از نوع لیبل تعریف می کنید. سپس متن ان را برابر Hello قرار می دهید. سپس لیبل را به کنترل های روی فرمتان اضافه می کنید. 
حال یک کلاس از نوع باتن می سازیم. رنگ متن آن را سفید و رنگ پس زمینه را سیاه در نظر می گیریم. سپس متن باتن را برابر متن لیبل قرار می دهیم. و اما خط بعد:
برای تعیین موقعیت دکمه روی فرم از خاصیت Location استفاده می کنید. این خاصیت برای هر کنترل به صورت نوشته شده باید بنویسید. در متد Location پارامتر اول آن موقعیت X و پارامتر دوم موقعیت Y باتن را روی فرم مشخص می کند. 

و باز هم خط بعدی: در این خط شما می توانید رویداد کلیکی به باتن خود اضافه کنید که اگر روی باتن کلیک کردیم فرم از حالت بی رنگ به حالت نرمال نمایش داده شود. برای تعریف این رویداد ابتدا نام کنترل btn را نوشته سپس نام رویداد Click را انتخاب کرده سپس یک + گذاشته و کلید TAB را فشار می دهیم. خود برنامه به صورت خودکار حوزه کدی را برای این رویداد در نظر می گیرد حال شما در این رویداد کدهای مربوط به نمایش فرم را می نویسیم. کدر بودن فرم با مقدار Opacity مشخص می شود هر چه این خاصیت به سمت 1 میل کند فرم واضح تر در غیر اینصورت شفاف تر می شود. خوب برای اینکه این عمل کاملا مشهود باشد ما از مقدار خیلی کم در حد ده هزارم استفاده می کنیم. یک حلقه for می گذاریم و هر بار که یک ده هزارم به مقدار i اضافه می شود این مقدار را برابر خاصیت Opacity قرار می دهیم.

نکته: تمام این علیات بالا از طریق کدنویسی تعیین می شود. این درحالی است که شما در محیط طراحی فقط کافیست یک باتن از جعبه ابزار به روی فرم خود اضافه کرده از پنجره خواص به سراغ Events ها که در بالای پنجره خواص قرار دارد مراجعه نموده و سپس رویداد مورد Click را پیدا کرده و دوبار روی آن کلیک کنید تا وارد محیط کدنویسی شده حال کدها را در محل مربوطه وارد کنید. در ضمن فقط برای رویداد کلیک شما می توانید حتی این مراحل را هم نرفته و فقط روی باتن دو بار کلیک کنید تا وارد رویداد کلیک شوید.

موفق باشید.

ادامه دارد ان شاء الله...........

----------


## system32

*اعمال فیلترینگ در ورودی های کاربر*

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

*ایجاد کنترل یه صورت پویا*
برای ایجاد این کنترل به صورت پویا به صورت زیر عمل کنید:
یک فرم به نام Excercise ساخته و مانند پست قبل عمل کنید:
 
public class Exercise : System.Windows.Forms.Form {     public Exercise()     {         InitializeComponent();
        MaskedTextBox txtFunctional = new MaskedTextBox();         Controls.Add(txtFunctional); 
     } }  *ایجاد کنترل در محیط طراحی:*
ابتدا یک کنترل از این نمونه به فرم خود اضافه کنید حال طبق تصویر روی میانبر آن بروید.



 

همانطور که مشاهده می کنید این کنترل شامل یکسری فیلترهاست. فقط کافی است  یکی از این گزینه ها را انتخاب نمایید. اگر هیچ یک از این فیلترها مناسب  کار شما نبود شما خود می توانید یکی را بسازید. برای این کار به سراغ خاصیت  Mask رفته و طبق موارد زیر یک فیلتر بسازید:

0: معادل تمامی رقم ها از 0 تا 9 است.
9: تمامی ارقام و فاصله
#: تمامی ارقام و فاصله خالی و یک + یا -
L: فقط حروف بدون فاصله *باید* وارد شوند
؟: فقط حروف بدون فاصله* می توانند* وارد شوند.
& و c: تمامی اعداد و حروف و فاصله خالی را می پذیرد.
 A یا a: تمام حروف و ارقام با فاصله
<: تمامی کاراکترهای وارد شده به حروف بزرگ تبدیل می شوند.
>:  تمامی کاراکترهای وارد شده به حروف کوچک تبدیل می شوند.
.: ممیز
,: جدا کننده رقم هزارگان
*:* : جدا کننده زمان
/ : جدا کننده تاریخ
$: نشانگر پول

این مقدار 
"999-000-0000"; را اعمال کرده و نتیجه را مشاهده کنید.
اگر توجه کرده باشید هنگام اعمال فیلتر کاراکتری به صورت __ نمایش داده می شود برای تغییر این خاصیت به سراغ PromptChar بروید. 

حال فرض کنید که کاربر ورودی اشتباهی را وارد کرده است و در این موقع می  خواهید کامپیوتر با یک بیپ هشداری به کاربر بدهد پس چاره کار شما خاصیت *BeepOnError* است. (خواندنی - نوشتنی - بولین - صدادار معادل true)

اگر توجه کنید وقتی کاربر از درون این کنترل خارج می شود هنور ___ که تکمیل  نشده اند نمایش داده می شوند برای عدم نمایش ___ ها خاصیت HidePromptOnLeave را برابر true قرا دهید.

نکته بعددی اینکه فرض کنید بخواهید محتویات درون این کنترل را کپی  کنید  حال سوال اینجاست که شما می خواهید هم ___ و هم مقادیری که کاربر وارد کرده  است کپی شوتد یا فقط مقادیر کاربر یا حالت های دیگر. برای این کار از  خاصیت  * 	CutCopyMaskFormat* استفاده می کنیم. این خاصیت را تغییر دهید و نتایج را مشاهده کنید.


*تمرین:* :متفکر: 

1- فیلتری برای شماره های همراه بسازید.
2- فیلتری برای دریافت ایمیل معتبر بسازید.
3- فیلتری جهت دریافت آدرس وب سایت بسازید.
4- فیلتری بسازید که چهار حرف اول را به صورت بزرگ و سه حرف بعد را به صورت کوچک و سپس دو رقم عددی را قبول کند.

----------


## MohammadGh2011

> *دکمه: (button)*
> 
> یک دکمه کنترلی است که اگر کاربر روی آن کلیک نمود کدی که در درون آن نوشته شده است اجرا می گردد.
> 
> امروز می خوام نحوه ساختن یک کنترل را از طریق کدنویسی توضیح بدم. به کد زیر توجه کنید:
> using System;
> using System.Collections.Generic;
> using System.ComponentModel;
> using System.Data;
> ...


*سلام عليکم
خوب دوستان من چه کدي بايد بنويسم که وقتي اين دکمه اضافه شد و روش کليک شد يه عملياتي رو انجام بده مثلا وقتي روش کليک شد يه مسيج باکس نشون داده بشه.
با تشکر*

----------


## MohammadGh2011

سلام
دوستان نيستيد که جواب اين سوالمون رو بديد!

----------


## mhdhp86

> *اعمال فیلترینگ در ورودی های کاربر*
> 
> اگر شما بخواهید کاربر را مجبور کنید فقط عدد یا حرف یا یک فرمت خاص را  وارد کند یا عبارتی برای ورودی های کاربر فیلتر اعمال کنید اینجاست که  کنترل MaskedTextBox به کار شما خواهد آمد. 
> 
> *ایجاد کنترل یه صورت پویا*
> برای ایجاد این کنترل به صورت پویا به صورت زیر عمل کنید:
> یک فرم به نام Excercise ساخته و مانند پست قبل عمل کنید:
>  
> public class Exercise : System.Windows.Forms.Form {     public Exercise()     {         InitializeComponent();
> ...


این دستور controls.add رو من ندارم!!!
لطفا کمک کنید.

----------


## mahmoodof

سلام و خسته نباشيد اساتيد گرامي
من براي طراحي يه سايت ساده از بانك اطلاعاتي sqlexpress استفاده كردم.
رشته اتصال رو به صورت زير تعريف كردم:

con.ConnectionString = "Data  Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto  ry|Database.mdf;Integrated  Security=True;User Instance=True";

زماني كه سايت طراحي شده رو توي يه كامپيوتر ديگه ميبرم.اجرا نميشه و خطا  ميده !!! بعضي ها ميگن بايد Attach بشه ، كه من اينكارو بلد نيستم . ميشه  توضيح بدين.
ممنونم ، يا علي...

----------


## porshe

خیلی خیلی ممنون از این تاپیک...من  تازه سی شارپ شروع کردم ..واقعا از مطالب تون استفاده میکنم ...مطالب ب زبان ساده ای بیان شده...
اگه ممکنه واسه هر مبحثی چن تا تمرین هم بزارید خیلی خوب میشه...حداقل مطالب جدیدی در هر مبحث یاد میگیریم .اینطور مشکلات مون رفع میشه....
سپاس فراوان :تشویق:

----------


## elec60

یه نگاهی با تاریخ تاپیک بنداز!

----------


## darabsoft

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

----------


## Mousavmousab

سلام

می تونین آموزش ویدئویی فارسی سی شارپ را از اینجا ببینین.

Handler1.ashx.gif
hoolity.com
موفق باشید.

----------

