آموزش C#.Net

mtr

عضو جدید
Introduction to C#.Net

Introduction to C#.Net

سي شارپ در سال 2001 توسط شركت مايكروسافت به همراه بسته دات نت براي اولين بار مطرح و ارائه شد. كه بعد ها به عنوان يك زبان برنامه نويسي استاندارد توسط ECMA http://csharptuning.blogfa.com/ECMA%C3%99%C2%8D و ISO http://csharptuning.blogfa.com/ISO مورد تائيد قرار گرفت.

زبان برنامه نويسي سي شارپ توسط تيمي به مديريت اندرز هايلزبرگ كه قبلا تجربه ارائه زبان هاي برنامه نويسي موفقي همچون توربو پاسكال و دلفي رو داشت ايجاد شد. هايلزبرگ سي شارپ را يك زبان برنامه نويسي شي گراء كه از زبان هاي برنامه نويسي بزرگ (همچون دلفي , جاوا و اسمال تاك) تاثير پذيري داشته معرفي مي كنه. Syntax زبان سي شارپ شبيه به ++C مي باشد و البته تفاوت هاي بسياري هم داره.

حالا قبل از اينكه بخواهم بيشتر در مورد سي شارپ توضيح بدم بايد يه توضيحاتي هم در مورد دات نت و امكاناتش بگم.

دات نت فريم ورك (NET Framework) يه بسته نرم افزاري شامل راه حل بسياري از نيازهاي توسعه نرم افزاري (Base Class Library) و همچنين امكان توسعه و اجراي برنامه هاي توليد شده براي اين فريم ورك مي باشد. برنامه هاي توليد شده براي دات نت فريم ورك توسط Common Language Runtime اجراء مي شوند.

CLR يا همان Common Language Runtime سرويس هايي مهمي از قبيل Garbage Collection , Memory Managment و Exception Handling رو ارائه مي دهد.

Garbage Collection: در زبان برنامه نويسي سي شارپ ديگر نگراني از جهت مديريت اشياء در حافظه وجود ندارد به اين معني كه وقتي شما شيء ايجاد مي كنيد بعد از اينكه ديگر از آن شي ء استفاده نكرديد آن شيء به طور اتوماتيك از حافظه پاك خواهد شد. اين كار توسط GC يا همان Garbage Collector انجام مي شود.
روش كار GC به اين ترتيب است كه تا موقعي كه Referenceي به يك object وجود داشته باشد آن شيء در حافظه باقي خواهد ماند اما در صورتيكه Referenceي به آن شيء وجود نداشته باشد بعد از يك بازه زماني نامشخص آن شيء به صورت اتوماتيك از حافظه پاك خواهد شد. در مورد نحوه عملكردش بعدا بيشتر توضيح ميدم.

يه نكته ديگري كه بايد بهش اشاره كنم اينه كه برخلاف زبان هاي برنامه نويسي ديگر وقتي كد شما در زبان برنامه نويسي سي شارپ (يا هريك از زبان هاي ديگر دات نت) كامپايل مي شود به يك زبان ديگري به نام Intermediate Language يا همان IL تبديل مي شود. و در موقعي كه درخواست براي اجراء آن داده مي شود توسط يك مكانيزمي به نام Just In Time Compiler كه در CLR موجود است به زبان خاص آن ماشين تبديل شده و اجراء مي گردد.




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

mtr

عضو جدید
C#.Net قسمت دوم

C#.Net قسمت دوم

حالا مي خوام در مورد سي شارپ كمي بيشتر صحبت كنيم. سي شارپ يك زبان شيء گراست به اين معني كه هرآنچه كه در سي شارپ وجود دارد در غالب دو مفهوم كلاس (Class) و شيء (Object) و روابط بين آنها خلاصه مي شود.


كلاس(Class): در واقع يك ايده (Concept) يا ذهنيت مي باشد. مثلا يك نجار چه ذهنيتي نصبت به يك "ميز" دارد؟ خوب مسلما يه صفحه , چهار پايه و .... اين ذهنيتي است كه يك نجار نسبت به "ميز" دارد. اين دقيقا مفهوم كلاس است. يعني تا موقعي كه آن ميز ساخته نشه فقط يك ذهنيت يا در واقع كلاس است.


شيء (Object): اشياء موجوديت هايي هستند كه از كلاس ها (ذهنيت) ساخته مي شوند. باز براي مثال همان نجار وقتي ذهنيتش رو به واقعيت تبديل مي كنه در واقع يك ميز مي سازه يا يك Object (شيء) ايجاد كرده است.


حالا اگر يكم دقت كنيم مي بينيم كه توي دنياي واقعي هم همينطوره. مفهوم انسان يك كلاس است و وقتي يك نفر متولد مي شود يك شيء از آن كلاس داريم.


باز وقتي بيشتر دقت مي كنيم مي بينيم كه همه كلاس ها (ذهنيت ها) مي تونن يكسري مشخصات داشته باشند. مثلا انسان. مسلما هر انساني اسم داره , سن داره , رنگ مو , رنگ پوست و ... اين اطلاعات state يا خصوصيات هر فرد هستند. و البته هر انساني يكسري توانمندي داره يعني مي تونه يكسري كار انجام بده. مثلا راه بره , حرف بزنه , گوش كنه , بنويسه , .... اين ها رفتار ها يا behavoir هر فرد هستند.

حالا سوالي كه پيش مياد اينه كه آيا ميشه دو نفر با خصوصيات مشترك و رفتار مشترك رو يكي دونست؟

علي احمدي 33 ساله - علي احمدي 33 ساله؟
آيا به نظر شما اين دو يك نفر هستند!؟!

خير. پس هميشه يك چيز وجود داره كه ما ميتونيم دو نفر رو از هم تميز بديم: ما به اون مي گيم Identity (وسيله شناسايي). براي اين دو مي تونه شماره شناسنامشون باشه يا كد ملي يا ...

حالا به نظر شما براي كامپيوتر دو موجود كه داراي اطلاعات و رفتار هاي كاملا مشترك هستند چطور از هم تشخيص داده مي شوند؟ جواب محل قرار گيريشان در حافظه است.

ادامه دارد..:heart:
 

mtr

عضو جدید
آموزشC#.Net - قسمت سوم

آموزشC#.Net - قسمت سوم

كلاس هاي پايه دات نت - dot Net Base Class Library
بعد از اينكه مفهوم كلاس و شيء رو متوجه شديم. براي اطلاعتون بايد بگم كه دات نت فريم ورك حدود 2500 كلاس داره كه قبلا براي شما نوشته شده و شما بدون اينكه احتياجي به نوشتنشون داشته باشين خيلي راحت مي تونين از اين 2500 كلاس موجود استفاده كنين.

Namespace چيست؟
اگر يك مقدار فكر كنيم مي بينيم كه پيدا كردن يك كلاس بين 2500 كلاس پايه و احتمالا كلاس هايي كه خودتون نام گذاري شون مي كنين كار سختي خواهد بود!
Namespace ها در حقيقت اين امكان رو بشما مي دهند كه بتوانيد كلاس هاي خودتون رو دسته بندي كنين و هر كلاس رو داخل دسته مورد نظر خودشون قرار بدين. به عنوان مثال ما كلاسي داريم به نام SqlConnection و همينطور كلاس ديگري به نام SqlDataAdapter و .... براي همين يك Namespace به نام System.Data.SqlClient ايجاد شده كه كلاس هايي كه مربوط به System و كار با داده ها (Data) و در نهايت مختص Sql Server هستند رو داخل اين namespace قرار مي دهيم. توي اين تصوير تعدادي از namespace هاي عمومي دات نت نمايش داده شده اند.



اين نكته رو هم بياد داشته باشين كه اسم كامل يك كلاس شامل اسم به همراه نام namespace آن است:
System.Data.SqlClient.SqlConnection اسم كامل ( Qualified Name) كلاس SqlConnection مي باشد.

using
اما اگر قرار باشد براي استفاده از يك كلاس هميشه اسم كاملش رو بنويسيم كار ما خيلي سخت مي شود. براي همين شما ميتوانيد با يكبار نوشتن اسم Namespace آن كلاس (يا كلاس هايي كه مي خواهيد استفاده كنين) با استفاده از يك keyword به نام using از تكرار آن جلوگيري كنين.

به عنوان مثال من در يك مثال مي خواهم ده ها بار از كلاس Console و دستوراتش استفاده كنم. براي همين بالاي كدم يك بار using System; رو ذكر مي كنم تا از نوشتن كلمه System براي دفعات مكرر جلوگيري كنم:

;using System
 

mtr

عضو جدید
آموزشC#.Net - قسمت چهارم

آموزشC#.Net - قسمت چهارم

اجازه بدين كمي از دنياي تئوري خارج شيم و كمي هم كد بنويسيم. اما قبل اينكه وارد كد نويسي بشيم بايد با محيطي كه قراره توش كد بنويسيم رو بشناسيم.

برنامه نويسان سي شارپ دات نت معمولا از Visual Studio .NET براي توليد كد استفاده مي كنند. هرچند كه در اين مورد شما هيچ محدوديتي ندارين و مي تونين از هر ابزاري حتي Notepad براي توليد كد استفاده كنين.

Visual Studio .NET 2005
نسخه 8 Visual Studio شركت مايكروسافت كه خيلي راحت مي تونين از بازار تهيه كنين و خوشبختانه (يا شايد هم متاسفانه) دو سه هزار تومان بيشتر قيمت نداره. البته به دليل قيمتي زيادي كه در بيرون از ايران داره مايكروسافت يك نسخه مجاني به نام Visual Studio 2005 Express Edition رو هم ارائه مي كنه كه مي تونين از لينك زير دانلودش كنين.
Visual Studio 2005 Express Edition
! من توي توضيحاتم از نسخه Professional استفاده خواهم كرد.

بعد از اينكه مراحل نصب تمام شد. از منوي Start --> All Programm --> Microsoft Visual Studio 2005 روي Microsoft Visual Studio 2005 كليك كنين تا پنجره مقابل براتون باز بشه. اين صفحه Start Page مي باشد.




اگر دقت كنين سمت چپ بالا دو تا گزينه Open و Create كه امكان ايجاد يا باز كردن پروژه يا وب سايت رو به شما مي دهد دارين. روي گزينه Create Project كليك كنين(مي تونين اين كار رو با استفاده از كليد هاي Shift + Ctrl + N هم انجام بدين. بهتون پيشنهاد مي كنم براي سريع تر شدن كارتون Shortcut ها رو ياد بگيرين.



در پنجره مقابل روي گزينه Visual CSharp كليك كنين تا انواع پروژه هايي كه مي شه با زبان سي شارپ توليد كرد رو بينين. در ابتدا دوره ما با پيروي از اصول مايكروسافت مثال هايمان در محيط Console Application كه يك محيطي شبيه با DOS و بدون طراحي UI مي باشد شروع خواهيم كرد. در ادامه وارد Windows و ... مي شويم.

در قسمت پائين صفحه داخل قسمت Name نام پروژه خود رو بنويسين و در قسمت Location مسير پروژه خود رو مشخص كنين و در نهايت اسم Solution رو وارد نمائيد. به صورت پيش فرض اسم Solution همان اسم پروژه شماست. دقت كنين كه در دات نت براي هر پروژه يك Folder ايجاد خواهد شد. البته در صورتيكه شما گزينه Create directory for solution رو هم تيك بزنين يك Folder هم براي Solution ايجاد خواهد شد.

Solution چيست؟
Solution يا به معناي فارسي راه حل بالاترین سطح دسته بندي در محيط ويژوال استوديو دات نت است. به اين معني كه يك Solution مي توانيد شما يك يا چند پروژه و هم اين طور فايل باشد. اصولا وظيفه Solution نگهداري اطلاعات روابط بين پروژه هاست كه يك فايل با پسوند sln مي باشد. و داراي تاثير در خروجي پروژه نخواهد بود. در ادامه دوره بيشتر در اين مورد توضيح خواهم داد.

در مقابل Project يا همان پروژه ها داراي خروجي مستقيم با توجه به نوعشان هستند. به عنوان مثال Console Application ها داراي خروجي با پسوند exe به معناي executable يا همان فايل هاي قابل اجراء مي باشند. در دات نت ما به خروجي هر پروژه فارغ از اينكه چه نوع فايلي است (exe يا dll) اسمبلي - Assembly مي گويم.

بعد از اينكه كليد OK رو زديد پروژه شما ايجاد مي شود و براي شما يك فايل به نام Programm.cs رو باز مي نمايد. اين فايل به صورت پيش فرض محلي است كه نرم افزار شما از داخل آن شروع خواهد شد. حالا فقط براي اينكه شروع كرده باشيم داخل اين فايل و مطابق شكل زير شروع به تايپ كردن نمائيد:
Console.WriteLine("Hello World - C# Tuning!");

و در نهايت براي اينكه نرم افزارتون رو بتونين تست كنين كافيه كه كليد Ctrl + F5 رو بزنين تا اين نتيجه رو بگيرين:





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

mtr

عضو جدید
آموزشC#.Net - قسمت پنجم

آموزشC#.Net - قسمت پنجم

اجازه بدين ابتدا كدي را بررسي كنيم:cool:.
کد:
Console.WriteLine("Hello World - C# Tuning");
اين خط در حقيقت همان جمله Hello World - C# Tuning رو براي ما چاپ مي كنه. در حقيقت كلاس Console داراي يك رفتار (Method) مي باشد كه امكان چاپ بر روي صفحه رو به ما مي دهد. اين متد WriteLine مي باشد.

پس اگر شما هر چيز ديگري داخل پرانتز و بين " " قرار دهيد همان را براي شما چاپ خواهد كرد.

Method چيست؟
در واقع Method ها همان رفتار هايي هستند كه ما از كلاس ها انتظار داريم. در مثال بالا نوشتن بر روي تصوير رو مي توانيم با استفاده از متد WriteLine بر روي كلاس Console استفاده كنيم.

ايجاد متغيير ها در سي شارپ - Variables in CSharp

براي ايجاد يك متغيير در سي شارپ بايد ابتدا نوع داده اي آن و سپس نام متغيير را وارد نمائيم و در انتها ; را تايپ كنيم:
کد:
int MyNumber = 1000;
Console.WriteLine(MyNumber);
در مثال بالا از نوع داده اي int كه يك نوع داده اي عددي است استفاده شده است. پس مي توانيم مقادير عددي رو داخل اين متغيير قرار دهيم. و مثل كد بالا با استفاده از WriteLine چاپش كنيم.


نوع هاي داده اي در سي شارپ - C# DataTypes

نوع هاي داده اي رو مي توان بسته به محل قرار گيريشان در حافظه به سه دسته تقسيم كرد:
  1. Values Types
  2. Reference Types
  3. Pointer Types
اگرحافظه رو به دو قسمت Stack و Heap تقسيم كنيم. مقادير تمامي متغيير هاي نوع اول در حافظه Stack قرار مي گيرد و به همين جهت داراي رفتارهاي خاصي مي شود كه بيشتر توضيح خواهم داد. مقادير متغيير هاي نوع دوم در حافظه Heap قرار مي گيرند. در مورد Poiter Type ها صحبت نخواهيم كرد.

Value Types: همان طور كه گفتيم مهمترين خاصيت اين نوع متغيير ها قرارگيري مقادير آن ها در حافظه Stack مي باشد كه به همين دليل رفتارهاي خاصي خواهند داشت. اين نوع متغيير ها شامل : Primitive Types يا همان نوع هاي بدوي - Enum ها و Struct ها مي باشند.

Numeric Types , Boolean , Char نوع هايي هستند كه به آن ها Primitive Types مي گوييم. نوع هاي عددي شامل : int , double , decimal , long , short , byte و ... كه مقادير مختلفي از اعداد رو داخل خوشان نگه مي دارند.
Boolean ها متغيير هايي هستند كه فقط مقدار True و False به معني مثبت يا منفي رو داخل خوشان نگه مي دارند. و در نهايت Char ها همان كاراكتر ها هستند.
کد:
bool married = false;
int myNumber = 1000;
char c = 'c';
! دقت داشته باشين كه براي مقدار دهي char از ' يا همان Single Quotation استفاده كرديم. و براي bool فقط مقدار true يا false امكان پذير است.
;)ادامه دارد...
 

psychic

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

تاپیک مهم شد
 
  • Like
واکنش ها: mtr

mtr

عضو جدید
آموزشC#.Net - قسمت ششم

آموزشC#.Net - قسمت ششم

گفتيم كه ValueType ها داراي رفتار خاصي هستند. اما چه رفتاري؟
وقتی یک متغییر از یکی از نوع های Value Type مثل int ایجاد می کنیم مقدار آن داخل حافظه Stack قرار می گیرد و وقتی از آن متغییر یک کپی میگیریم مقدار متغییر قبلی داخل متغییر جدید کپی می شود.
یعنی اگر مقدار متغییر دوم رو عوض کنیم تاثیری روی مقدار متغییر اول نخواهد گذاشت. این رفتار در مورد تمامی ValueType ها صدق می نماید:


وقتي مقدار متغيير دوم رو تغيير دهيم مقدار متغيير اول دست نخورده باقي ماند.



Enumerations
فرض بفرمائيد كه شما مي خواهيد يك كلاس تعريف كنيد به نام انسان. وقتي خواص انسان رو تحت بررسي دارين به جنسيت مي رسيد. حالا مي خواهيم روي كلاس انسان يك متغيير براي نشان دادن جنسيت تعريف كنيم. به نظر شما جنسيت رو از چه نوعي بايد در نظر گرفت؟ bool يا int؟
اگر bool در نظر گرفتيم false به معني مرد خواهد بود يا true؟
اگر int در نظر گرفتيم چه عددي بيانگر مرد و چه عددي بيانگر زن مي باشد؟ و اگر كاربر شما عددي به غير اعداد انتخابي شما وارد كرد, چه طور؟

گاهي اوقات در توسعه نرم افزار ها ما به جنس (Type)هايي نياز داريم كه بتوانيم مقدار شان را محدود كنيم. مثلا همين جنسيت. با استفاده از Enumeration ها مي توانيم مقدار متغيير جنسيت رو به مرد يا زن محدود كنيم.
براي ايجاد يك Enumeration بايد در يك فايل با پسوند cs كه بيانگر سي شارپ است از Syntax زير استفاده كنيم:


کد:
public enum eS.e.x
{
Male,
Femal
e e
{



دقت كنين كه وقتي متغييري از اين جنس بسازيم به هيجوجه مقداري به غير از مرد يا زن نمي توانيم اختصاص دهيم:

کد:

enum ايجاد متغيير از جنس يك// ;eS.e.x S.e.x
مقدار دهي متغير// ;S.e.x = es.e.x.male


حالا مي بينيم كه چطور با استفاده از enum مي توانيم مقدار دهي يك متغيير را به مقادير محدودي نسبت دهيم. در دات هم مثال هاي متعددي از استفاده از enum ها وجود دارد. مثلا يك enum به نام Keys تمامي كليد هاي صفحه كليد رو در خود جاي داده است. يا enumي با نام ConnectionState وضعيت هاي امكان پذير يك Connection رو نشان مي دهد.

;)ادامه دارد...
 
آخرین ویرایش:

mtr

عضو جدید
آموزشC#.Net - قسمت هفتم

آموزشC#.Net - قسمت هفتم

جازه بدين تا مقداري موضوع بحث رو از Value Type ها به يك Reference تايپ تغيير بديم.

كلاس ها - Classes
قبل از اين تعريف كلاس رو با هم بررسي كرديم. اما حالا چطور مي توان يك كلاس توليد كرد. فرض بفرمائيد مفهومي مثل انسان رو مي خواهيم در غالب يك كلاس تعريف كنيم.

ابتدا يك پروژه جديد از نوع Console Application با يك نام دلخواه در مسير دلخواه تان ايجاد كنين. سپس يك فايل با نام Prgoramm.cs خواهيد داشت كه در مثال قبلي ديده بوديم. حالا بايد يك كلاس جديد به پروژه اضافه كنيم. براي اين كار بايد از منوي View گزينه Solution Explorer رو انتخاب كنيم يا مي توانيم از كليد هاي Alt + Ctrl + L استفاده نمائيم.


Solution Explorer در واقع يك نمايش مبنتي بر فايل از پروژه يا Solution شماست كه به صورت يك درخت واره (TreeView) مي باشد. راس آن Solution شماست و سپس پروژه و Properties و Reference و در نهايت كلاس ها و آيتم هاي ديگر پروژه شماست. روي Project يعني دومين آيتم از اين درخت واره راست كليك كرده و گزينه Add و بعد New Item رو كليك مي نمائيم. در پنجره اي كه باز مي شود يك Class را انتخاب و در قسمت پايين اسم فايل رو مشخص مي نمائيم. دقت كنين كه پسوند فايل هاي سي شارپ cs مي باشد. (براي اين مثال نام Person رو تايپ نمائيد.)
! نكته اي كه لازمه در نامگذاري فايل ها متدها و ... رعايت كنين اين است كه نام گذاري كلاس ها بهتر است به ترتيبي باشد كه حرف اول هر كلمه با حروف بزرگ (Upper Case) و ما بقي با حروف كوچك باشد. به عنوان مثال كلاس Person كه P با حروف بزرگ و ما بقي كوچك مي باشد. يا كلاس SqlConnection حروف اول هر كلمه يعني S و C با Upper case نوشته مي شوند.

وقتي اسم رو تايپ كردين و گزينه Add رو زديد. سپس يك فايل به Solution Explorer اضافه خواهد شد و همزمان براي شما نمايش داده مي شود. متن داخل فايل به اين ترتيب است:


کد:
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpTuning.Samples
{
class Person
{

}
}
قبل از اين در مورد كلمه using و namespace صحبت كرده ايم. همانطور كه مي دانيد يك namespace يك دسته بندي براي كلاس هاست. حالا ما داريم يك namespace به نام CSharpTuning.Samples براي مثال هاي اين وبلاگ توليد مي كنيم و كلاس Person را داخل اين namespace قرار مي دهيم. دقت كنين كه هر namespace داراي يك block از كد مي باشد كه با استفاده از علامت } شروع و بعد با { پايان مي يابد و هر آنچه كه داخل اين علامت باشد داخل آن namespace قرار خواهد گرفت.

ايجاد كلاس در سي شارپ:cool:
براي ايجاد يك كلاس در سي شارپ شما بايد داخل يك namespace از كلمه كليدي class و سپس نام كلاس استفاده كنين. مثال با براي ايجاد كلاس Person داخل namespaceي به نام CSharptuning.Samples جمله فوق يعني class Person‍ رو به همراه يك block از كد براي اين كلاس ايجاد مي كنيم. دقت كنين كه شما تا به اينجا دو علامت } و دو علامت ‍{ ديده ايد يعني شما دو block از كد داريد كه يكي براي namespace و ديگري براي كلاس Person مي باشد. هر آنچه كه داخل {} علامت مربوط به كلاس Person قرار گيرد متعلق به كلاس Person است.

فيلد ها - Fileds در سي شارپ:cool:
تا ايجاي كار كلاس ما هنوز هيچ عضوي ندارد اما ما مي توانيم از اين كلاس استفاده كنيم. حالا بايد داخل اين كلاس اطلاعات مورد نظرمان را تعريف كنيم. من مي خواهم Field هاي Name و Age رو براي اين كلاس تعريف كنم. به اين معنا كه هر انسان (Person) داراي نام و سن مي باشد.

براي تعريف يك Field با داخل block كلاس مورد نظر ابتدا كلمه public و سپس نوع داده اي و سپس نام متغيير را وارد نمائيم. پس من داخل block كلاس Person اين دو جمله را تايپ مي نمايم.


کد:
public string Name;
public int Age;

! توجه داشته باشين كه فعلا فقط از كلمه public استفاده مي نمائيم. در آينده در مورد ما بقي Access Modifier ها صحبت مي كنيم.

پس تا اينجا كلاس ما بايد به اين شكل باشد:

حالا مي توانيم از اين كلاس شي ء بسازيم و به اشيايي كه ايجاد كرديم مقادير Name و Age رو ست كنيم.

ادامه دارد...;)
 

R-Quantum

عضو جدید
کاربر ممتاز
سلام دوستان عزیز . امیدوارم تاحدود تونسته باشید با این زبان شیرین آشنا شده باشید. کمی که جلوتر بریم خواهید دید که ما دکمه های کنترلی خود را با یک سری پیشوندهایی مقداردهی میکنیم . خوب حالا سوالی که پیش میاد اینه که این پیشوندها به چه درد برنامه ما میخورند. برای جواب این سوال بحث نشانه گذاری مجارستانی تغییر یافته باز میشه . خوب حالا این نشانه گذاری چی هستش ؟ اگه ما دکمه های کنترلی خود را بدون استفاده از این پیشوندها و با 1 2 3 .... مقداردهی کنیم مثلا نام 1 ، نام 2 و.... در آینده که ما میخواهیم دوباره این پروژمون رو بررسی کنیم و حال در این بررسی بخواهیم که کدها را تغییر دهیم دچار مشکل خواهیم شد چون نمیتونیم تشخیص دهیم که اون نام برای کدوم کلید کنترلی هستش . برای حل این مشکل ما از پیشوندها استفاده میکنیم .​


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

Btn​
(دکمه فرمان)Button
Cbo


(جعبه ترکیبی)Combo Box​
Chk
(جعبه انتخاب)CheckBox


Lbl​
(برچسب)Label
Lst


(جعبه لیست)ListBox​
Mnu
(منوی اصلی )Menu


Rbd​
(دکمه رادیویی) RadioButton
Pic


(جعبه تصویر) PictureBox​
Txt
(جعبه متنی )TextBox



موفق باشید.​
 
آخرین ویرایش توسط مدیر:

کربلایی

مدیر بازنشسته
سلام دوست عزیز . اشکال نداره ، تکنولوژی دیگه کاریش نمیشه کرد . امیدوارم مشکلت سریع حل شه . راستی دوستان من یه سوال داشتم : توی کد نویسی توابعی که اسم اولشون رو مینویسی بعد یه کشویی باز میشه و میتونی از بین اونا تابع مورد نظرت رو انتخاب کنی مثل MassageBox که هر وقت m رو تایپ کنی اون کشو باز میشه . خوب سوالم اینه که آیا این توابع هم بگونه ای متد به حساب میایند یا نه؟

سلام
MassageBox تابع نیست! بلکه یه کلاس هست؛
این کلاس دارای متدهایی هست که بصورت استاتیک و عمومی تعریف و پیاده سازی شده اند! به این صورت برای استفاده از متدهای این کلاس، لازم نیست تا از این کلاس نمونه سازی کنیم بشه!
برای مثال براحتی و بدون ایجاد شیی از کلاس MassageBox ، میتونیم متد show رو با دستور زیر فراخوانی کنیم:

کد:
[SIZE=2][COLOR=#2b91af][SIZE=2][COLOR=#2b91af]MessageBox[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].Show();[/SIZE]
 

کربلایی

مدیر بازنشسته
جهت حفظ نظم و انسجام مطالب تالار، پست های نامربوط حذف شدند!

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

با تشکر
 

zeost

عضو جدید
سلام.
خسته نباشید و ممنون به خاطر آموزش سی شارپ.
data grid view رو چه طور درست کنم که بعضی از ستون های sql ام رو نشون بده ؟؟؟:question:
 

zeost

عضو جدید
آقای کربلایی ازتون تشکر می کنم.
منو ببخشید دوباره مزاحم شدم. بذارید به حساب نگرانی تحویل پروژه اون هم تو تابستون.
برای update من تمام ستون های 4 تا table ای رو که داشتم می ذارم و برای این که بتونم چیزی رو update کنم باید یک کلید اصلی مشترک تو تمام tableهام داشته باشم. مثلا اون کلید اصلی شماره پرسنلی است . برای اینکه اطلاعات یه شخص رو update کنم باید اول شماره پرسنلی اون شخص رو وارد کنم و serarch رو بزنم تا اطلاعات روی فرم update بیاد . برای این که اطلاعات روی فرم بیاد باید در دستور این فرم وقتی که search رو می زنیم چه query بنویسیم؟؟؟
 

کربلایی

مدیر بازنشسته
آقای کربلایی ازتون تشکر می کنم.
منو ببخشید دوباره مزاحم شدم. بذارید به حساب نگرانی تحویل پروژه اون هم تو تابستون.
برای update من تمام ستون های 4 تا table ای رو که داشتم می ذارم و برای این که بتونم چیزی رو update کنم باید یک کلید اصلی مشترک تو تمام tableهام داشته باشم. مثلا اون کلید اصلی شماره پرسنلی است . برای اینکه اطلاعات یه شخص رو update کنم باید اول شماره پرسنلی اون شخص رو وارد کنم و serarch رو بزنم تا اطلاعات روی فرم update بیاد . برای این که اطلاعات روی فرم بیاد باید در دستور این فرم وقتی که search رو می زنیم چه query بنویسیم؟؟؟

سلام دوست عزیز!
من خوب متوجه سوال شما نشدم!
منظورتون از آپدیت چیه؟ می خواهید اطلاعات دیتاست رو در بانک اطلاعاتی ذخیره کنید؟
یا میخواهید اطلاعات تغییر یافته رو در فرم برنامه نشون بدید؟

ساختار دیتابیستون چطوره؟(تعداد جدولها و ساختار اونها)
آیا از رابطه هم استفاده کرده اید؟

در حالت کلی میشه گفت که برای ذخیره تغییرات دیتاست در دیتابیس، میتونید از متد Update شی tableAdapter استفاده کنید...

اما برای نمایش تغییرات در فرم برنامه بهتره از یک dataGridView استفاده کنید و اونو به دیتابیستون بیند(Bind) کنید.(با استفاده از خاصیت dataSource شیء dataGridView)

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

کربلایی

مدیر بازنشسته
در مثال زیر، از یک dataGridView برای نمایش اطلاعات دیتابیس Northwind استفاده میکنیم:

برای ساخت رابط کاربری، یک جعبه متن در فرم قرار دهید و خاصیت Multiline آن را به true ست کنید.
دو عدد دکمه دستور به فرم اضافه کنید و خاصیت Text آنها را به Query و Update ست کنید.
و در نهایت یک کنترل dataGridView در فرم قرار دهید! فرم شما باید مانند شکل بالا باشد.
با توجه به اینکه ما میخواهیم به یک Microsoft Access database متصل شویم باید فضای نام System.Data.OleDb را با استفاده از دستور using به کلاس برنامه اضافه نماییم:
کد:
using System.Data.OleDb;

رویداد لود فرم باید یک شیء OleDbConnection ، یک شیء OleDbCommand و یک شیء DataSet را ایجاد کند؛ همه این اشیا باید بعنوان اعضای کلاس Form ذخیره گردند؛
بر روی فرم دوبار کلیک کنید و دستورات زیر را در رویداد Loud فرم بنویسید:​
کد:
[COLOR=#0600ff]private[/COLOR] [COLOR=#0600ff]void[/COLOR] Form1_Load[COLOR=#000000]([/COLOR][COLOR=#0600ff]object[/COLOR] sender, [COLOR=#2b91af]EventArgs[/COLOR] e[COLOR=#000000])[/COLOR] [COLOR=#000000]{[/COLOR]
   [COLOR=#008080][I]// connect to the database[/I][/COLOR]
   [COLOR=#0600ff]string[/COLOR] conString =
      [COLOR=#a31515]@"Provider=Microsoft.JET.OLEDB.4.0;"[/COLOR]
      + [COLOR=#a31515]@"data source=c:\data\Northwind.mdb"[/COLOR];
 
   [COLOR=#008080][I]// create an open the connection          [/I][/COLOR]
   conn = [COLOR=#0600ff]new[/COLOR] [COLOR=#2b91af]OleDbConnection[/COLOR][COLOR=#000000]([/COLOR]conString[COLOR=#000000])[/COLOR];
   command = conn.[COLOR=#000000]CreateCommand[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
 
   [COLOR=#008080][I]// create the DataSet[/I][/COLOR]
   [COLOR=#2b91af]DataSet[/COLOR] ds = [COLOR=#0600ff]new[/COLOR] [COLOR=#2b91af]DataSet[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
   [COLOR=#000000]}[/COLOR]
در گام بعدی باید رویداد کلیک دکمه را پیاده سازی کنیم:
این متد ابتدا خاصیت dataSource شیء dataGridView را پاک سازی می کند. و یک دیتاست خالی می سازد.
سپس کانکشن رو را Open می کند و خاصیت CommandText شیء Command را برابر با خاصیت Text حعبه متن ست می کند. در ادامه یک اداپتور با شیء command ایجاد میکند و با استفاده از متد Fill اداپتور(فراهم کننده داده) دیتاست را پر میکند.
سرانجام خاصیت dataSource شیء dataGridView را برابر با Tables شیء دیتاست ست میکند:​
کد:
[COLOR=#0600ff]private[/COLOR] [COLOR=#0600ff]void[/COLOR] button1_Click[COLOR=#000000]([/COLOR][COLOR=#0600ff]object[/COLOR] sender, [COLOR=#2b91af]EventArgs[/COLOR] e[COLOR=#000000])[/COLOR] [COLOR=#000000]{[/COLOR]
   [COLOR=#008080][I]// clear the grids data source[/I][/COLOR]
   dataGridView1.[COLOR=#000000]DataSource[/COLOR] = [COLOR=#0600ff]null[/COLOR];
 
   [COLOR=#008080][I]// create a new DataSet[/I][/COLOR]
   ds = [COLOR=#0600ff]new[/COLOR] [COLOR=#2b91af]DataSet[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
 
   [COLOR=#008080][I]// open the connection[/I][/COLOR]
   conn.[COLOR=#000000]Open[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
 
   [COLOR=#008080][I]// run the query[/I][/COLOR]
   command.[COLOR=#000000]CommandText[/COLOR] = textBox1.[COLOR=#2b91af]Text[/COLOR];
   adapter = [COLOR=#0600ff]new[/COLOR] [COLOR=#2b91af]OleDbDataAdapter[/COLOR][COLOR=#000000]([/COLOR]command[COLOR=#000000])[/COLOR];
   adapter.[COLOR=#000000]Fill[/COLOR][COLOR=#000000]([/COLOR]ds[COLOR=#000000])[/COLOR];
    
   [COLOR=#008080][I]// close the connection[/I][/COLOR]
   conn.[COLOR=#000000]Close[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
 
   [COLOR=#008080][I]// set the grid's data source[/I][/COLOR]
   dataGridView1.[COLOR=#000000]DataSource[/COLOR] = ds.[COLOR=#000000]Tables[/COLOR][COLOR=#000000][[/COLOR][COLOR=#ff0000]0[/COLOR][COLOR=#000000]][/COLOR];
   [COLOR=#000000]}[/COLOR]
قدم بعدی پیاده سازی رویداد کلیک دکمه آپدیت می باشد:​
کد:
[COLOR=#0600ff]private[/COLOR] [COLOR=#0600ff]void[/COLOR] button2_Click[COLOR=#000000]([/COLOR][COLOR=#0600ff]object[/COLOR] sender, [COLOR=#2b91af]EventArgs[/COLOR] e[COLOR=#000000])[/COLOR] [COLOR=#000000]{[/COLOR]
   [COLOR=#008080][I]// clear the grids data source[/I][/COLOR]
   dataGridView1.[COLOR=#000000]DataSource[/COLOR] = [COLOR=#0600ff]null[/COLOR];
 
   [COLOR=#008080][I]// open the connection[/I][/COLOR]
   conn.[COLOR=#000000]Open[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
 
   [COLOR=#008080][I]// run the query[/I][/COLOR]
   command.[COLOR=#000000]CommandText[/COLOR] = textBox1.[COLOR=#2b91af]Text[/COLOR];
 
   [COLOR=#0600ff]int[/COLOR] affected = command.[COLOR=#000000]ExecuteNonQuery[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
   [COLOR=#2b91af]MessageBox[/COLOR].[COLOR=#000000]Show[/COLOR] [COLOR=#000000]([/COLOR][COLOR=#a31515]"There were "[/COLOR] + affected + [COLOR=#a31515]" rows affected"[/COLOR][COLOR=#000000])[/COLOR];
 
   [COLOR=#008080][I]// close the connection[/I][/COLOR]
   conn.[COLOR=#000000]Close[/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000])[/COLOR];
   [COLOR=#000000]}[/COLOR]
تصاویر:​








موفق باشید
 

zeost

عضو جدید
سلام دوست عزیز!
من خوب متوجه سوال شما نشدم!
منظورتون از آپدیت چیه؟ می خواهید اطلاعات دیتاست رو در بانک اطلاعاتی ذخیره کنید؟
یا میخواهید اطلاعات تغییر یافته رو در فرم برنامه نشون بدید؟

ساختار دیتابیستون چطوره؟(تعداد جدولها و ساختار اونها)
آیا از رابطه هم استفاده کرده اید؟

در حالت کلی میشه گفت که برای ذخیره تغییرات دیتاست در دیتابیس، میتونید از متد Update شی tableAdapter استفاده کنید...

اما برای نمایش تغییرات در فرم برنامه بهتره از یک dataGridView استفاده کنید و اونو به دیتابیستون بیند(Bind) کنید.(با استفاده از خاصیت dataSource شیء dataGridView)

لطفا بیشتر توضیح دهید و ساختار بانک اطلاعاتی رو تشریح کنید تا یه مثال برتون بزنم.
موفق باشید
سلام
دیگه خجالت می کشم بیام توی این تاپیک.ولی قول می دم در تاپیکهای دیگه جبران کنم.
پروژه ی ما در رابطه با استخدام کارکنان یک شرکت است. در دیتابیسم 4 تا جدول دارم.
1.اطلاعات شخصی 2.اطلاعات سازمانی 3.وضعیت وام 4.وضعییت حقوق
یک کلید اصلی (منحصر به فرد) مشترک در تمام این جدول ها کد پرسنلی است.
در یک فرم کد پرسنلی را وارد میکنم و با زدن کلید جستجو باید تمام اطلاعات در فرم بعدی که ایجاد کردم نمایش داده شود. سوال من اینه که من باید در فرم جستجو چه کدی(در سی شارپ) بنویسم تا تمام اطلاعات را در فرم بعدی نمایش بده؟؟؟
امیدوارم منو ببخشید به خاطر مزاحمته بیش از حد.
 

R-Quantum

عضو جدید
کاربر ممتاز
سلام بچه ها . خسته نباشید . خوب تا اینجا ما تا حدودی تونستیم با مرحله کدنویسی آشنا بشیم . حالا نوبت هم باشه ، نوبت مرحله طراحی هستش . دوستانی که تا به الان با مرحله کدنویسی کمی مشکل دارند ، اصلا نگران نباشند چون تو مرحله طراحی هم میخواهیم به مرحله کدنویسی هم سر بزنیم برای اینکه دکمه های کنترل ما کار کنند . حال کارمون رو با یک پروژه ی ساده بنام Hello user شروع میکنیم . ابتدا محیط ویژوال را باز کنید و زبان C# را انتخاب کنید . سپس نام windows application را بنام Hello user تغییر دهید . حال با فشار دادن روی دکمه OK یک فرمی براتون با پسوند Form1.cs باز میشه .
خوب حالا با استفاده از جعبه ابزار(Ctrl+Alt+X) یک lable داخل فرم قرار میدیم ( این کار رو میتونید با drag کردن و یا با کلیک کردن روی برچسب از جعبه ابزار داخل فرم قرار بگیره) . حال کارمون رو با برچسب شروع میکنیم . روی برچسب کلیک کنید تا قسمت properties آن فعال شه . حال قسمت text آنرا به enter your name و قسمت Name آنرا به lblName تغییر دهید ( همه ی تغییرات را میتونید هر لحظه بعد از فشار دادن دکمه Enter مشاهده کنید). حال برای نوشتن نام کاربر نیاز به Textbox داریم . برای این کار هم از جعبه ابزار کمک میگیریم . حال Properties آنرا فعال کرده و خاصیت Name آنرا به txtName تغییر میدهیم . تو این محیط میتونید با دستگیره ها اندازهدکمه ها رو کنترل کنید . حال 2 دکمه Button در پایین فرم یکی در سمت راست و دیگری در سمت چپ قرار دهید . حال properties دکمه سمت چپ رو فعال کنید و خاصیت Name آنرا به btnOk و خاصیت Text آنرا به &Ok تغییر دهید. حال properties کنترل سمت راست را فعال کرده و خاصیت Name آنرا به btnExit و خاصیت Text آنرا به &Exit تغییر دهید (درهر بار تغییرEnter یادتون نره ). حال شما یک فرمی با یک lable و یک textbox و دو button دارید . در جلسه بعد ما روی مرحله کدنویسی این فرم صحبت میکنیم چون الان دکمه های ما هیچ کاری انجام نمیدهند (میتونید با فشار دادن روی دکمه ها متوجه شید) . مطلب این بحث رو با توضیح کوچولویی روی کاراکتر & به پایان میرسونم . علت استفاده از این کاراکتر در text چی بود ؟؟؟ ما وقتی از این کاراکتر استفاده میکنیم برخی از حروف زیرشون یه خط کوچیکی کشیده میشه . حال این حروف خط دار چی هستند؟؟ وقتی دکمه ای که از این کاراکتر استفاده شده ، بجای فشار دادن روی اون دکمه میتونیم با پایین نگه داشتن دکمه Alt و سپس اون حروف خط دار کار اون دکمه رو انجام دهیم . مثلا ما در این پروژه در دکمه ok از این کاراکتر استفاده کردیم . خوب ما زمانی میخواهیم روی این دکمه فشار دهیم ، ما بجای فشار دادن روی دکمه میتونیم این کار را با پایین نگه داشتن Alt و سپس حرف خط دار ، که در okکلمه o خط دار است ، کار همون دکمه رو انجام بدیم.Alt +O همانند کلیک کردن روی دکمه ok است . موفق باشید
 
آخرین ویرایش:

کربلایی

مدیر بازنشسته
سلام
دیگه خجالت می کشم بیام توی این تاپیک.ولی قول می دم در تاپیکهای دیگه جبران کنم.
پروژه ی ما در رابطه با استخدام کارکنان یک شرکت است. در دیتابیسم 4 تا جدول دارم.
1.اطلاعات شخصی 2.اطلاعات سازمانی 3.وضعیت وام 4.وضعییت حقوق
یک کلید اصلی (منحصر به فرد) مشترک در تمام این جدول ها کد پرسنلی است.
در یک فرم کد پرسنلی را وارد میکنم و با زدن کلید جستجو باید تمام اطلاعات در فرم بعدی که ایجاد کردم نمایش داده شود. سوال من اینه که من باید در فرم جستجو چه کدی(در سی شارپ) بنویسم تا تمام اطلاعات را در فرم بعدی نمایش بده؟؟؟
امیدوارم منو ببخشید به خاطر مزاحمته بیش از حد.

سلام
برای این کار شما باید در همه جدول ها یک فیلد بنام -مثلا- id تعریف کنید، فیلد id در جدول اطلاعات شخصی بعنوان فیلد کلیدی محسوب میشه اما در سایر جدولها تنها بعنوان فیلد رابط استفاده میشه!
برای مثال جدول وام یه فیلد دیگه بنام vam_id داره که فیلد کلیدی هست؛ یه فیلد به نام id هم داره که کلیدی نیست، چون ممکنه یه فرد با یک کد پرسلنی -id- دو بار وام بگیره، که در این صورت اگر کد پرسلنی فرد مثلا 1 باشه جدول وام به این شکل مقدار دهی میشه:
vam_id = 0 , id = 1
vam_id = 1 , id= 1
من یه جدول نمونه رو طبق چیزی که گفتم ساختم و ضمیمه کرده ام.


شما میخواهید در Form1 کد پرسلنی را وارد کنید و پس از جستجو، اطلاعات در Form2 نمایش داده بشه؟
در فرم 2 از چه کنترل هایی برای نمایش داده ها استفاده میکنید؟ دیتاگردویو؟
در این صورت باید چهار تا دیتاگرد ویو مجزا رو در فرم 2 قرار بدید و هر کدوم رو به یکی از جداول متصل کنید.
البته این بار بهتره برای اتصال از اشیاء CurrencyManager و DataViewاستفاده کنید؛ کدهای زیر سعی میکنند چیزی رو که میگم رو توضیح بدند:

کد:
[/LEFT]
[COLOR=blue][FONT=Courier New]namespace[/FONT][/COLOR][FONT=Courier New] Mersad[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New]    [COLOR=blue]public[/COLOR] [COLOR=blue]partial[/COLOR] [COLOR=blue]class[/COLOR] [COLOR=#2b91af]GeneralForm[/COLOR] : [COLOR=#2b91af]Form[/COLOR][/FONT]
[FONT=Courier New]    {[/FONT]
[FONT=Courier New]        [COLOR=#2b91af]CurrencyManager[/COLOR] tbl_man_curMgr;;[/FONT]
[FONT=Courier New]        [COLOR=#2b91af]DataView[/COLOR] tbl_man_dataView;[/FONT]
[FONT=Courier New] [/FONT]
[FONT=Courier New]        [COLOR=blue]public[/COLOR] GeneralForm()[/FONT]
[FONT=Courier New]        {[/FONT]
[FONT=Courier New]            InitializeComponent();[/FONT]
[FONT=Courier New]        }[/FONT]
[FONT=Courier New]        [/FONT]
[FONT=Courier New]        [COLOR=blue]private[/COLOR] [COLOR=blue]void[/COLOR] GeneralForm_Load([COLOR=blue]object[/COLOR] sender, [COLOR=#2b91af]EventArgs[/COLOR] e)[/FONT]
[FONT=Courier New]        {[/FONT]
[COLOR=green][FONT=Courier New]// TODO: This line of code loads data into the 'mersadDataSet.tbt_man_Mersad' table. You can move, or remove it, as needed.[/FONT][/COLOR]
[FONT=Courier New]            [COLOR=blue]this[/COLOR].tbt_man_MersadTableAdapter.Fill([COLOR=blue]this[/COLOR].mersadDataSet.tbt_man_Mersad);[/FONT]
[FONT=Courier New]            dateTimer.Start();[/FONT]
[FONT=Courier New] [/FONT]
[FONT=Courier New]            tbl_man_dataView = [COLOR=blue]new[/COLOR] [COLOR=#2b91af]DataView[/COLOR](mersadDataSet.tbt_man_Mersad);[/FONT]
[FONT=Courier New]            tbl_man_curMgr = ([COLOR=#2b91af]CurrencyManager[/COLOR])(BindingContext[tbl_man_dataView]);[/FONT]
[FONT=Courier New] [/FONT]
[FONT=Courier New]            dgv_man.DataSource = tbl_man_dataView;[/FONT]
[FONT=Courier New]  }[/FONT]
[FONT=Courier New]     }[/FONT]
[FONT=Courier New]}[/FONT]
[LEFT]
اگر بتونید بیشتر درباره پروژه تون توضیح بدید منم بهتر کمکتون میکنم!
سعی کنید سوالتون رو دقیق و باجزئیات بپرسید تا پاسخی سریع و کامل بگیرید...


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

zeost

عضو جدید
سلام.
ممنون.من سایت های خوب زیادی رو می شناسم ولی واقعا این بهترین وآموزنده ترین و... سایتی هست که دیدم:thumbsup:.بهتون قول میدم که تا آخر ماه رمضان فعالیت های زیادی داشته باشم با اینکه در زمینه ی کامپیوتر مثل شما خبره نیستم.:w11:
فکر میکنم مشکلم حل شد .اجازه دارم در رابطه با error های برنامه سوال کنم.؟
این عکس از error هست.http://www.www.www.iran-eng.ir/%5Bimg%5Dhttp://www.Free-Picture-Host.com/images/EVtvaG1250440545.gif%5B/img%5D

اگه عکس درست فرستاده نشد دلگیر نشید.دفعه ی اول هست.:huh:
 
آخرین ویرایش:

کربلایی

مدیر بازنشسته
سلام.
ممنون.من سایت های خوب زیادی رو می شناسم ولی واقعا این بهترین وآموزنده ترین و... سایتی هست که دیدم:thumbsup:.بهتون قول میدم که تا آخر ماه رمضان فعالیت های زیادی داشته باشم با اینکه در زمینه ی کامپیوتر مثل شما خبره نیستم.:w11:
فکر میکنم مشکلم حل شد .اجازه دارم در رابطه با error های برنامه سوال کنم.؟
این عکس از error هست.http://www.www.www.iran-eng.ir/%5Bimg%5Dhttp://www.Free-Picture-Host.com/images/EVtvaG1250440545.gif%5B/img%5D

اگه عکس درست فرستاده نشد دلگیر نشید.دفعه ی اول هست.:huh:

این ارور میگه که ستون(فیلد) pcode وجود نداره!
دقت کن اسمی که در کدهای برنامه برای فیلد کد پرسنلی تایپ کردی با اسم این فیلد در دیتابیست مطابق باشه...
 

KHF*

عضو جدید
سلام.
من یه سری اطلاعات از چند تا کارمند دارم و می خوام توی یه صفحه نمایش بدمشون، از چه کنترلی برای نمایش اطلاعات توی یه جدول باید استفاده کنم؟ در ضمن اطلاعات من توی دیتابیس نیست، یعنی با بستن برنامه پاک میشه، قرار هم نیست اون جوری باشه.
اگه کمکم کنید ممنون میشم.
 
  • Like
واکنش ها: mtr

R-Quantum

عضو جدید
کاربر ممتاز
سلام بچه ها امیدوارم که رسایی کلامم تو مرحله design خوب بوده و یه عذرخواهی که هیچ شکلی نداشتم ولی سعی کردم که کامل مراحل رو توضیح بدم تا هیچ مشکلی نداشته باشید البته امیدوارم که به مشکلی برخورد نکرده باشید . حال دوباره پروژه Hello user را باز کنید و روی دکمه OK دوبار کلیک کنید. یه سری کد بصورت اتوماتیک نوشته شده که بنام پوسته یا قالب رویدادClick برای Button میباشد. در این قسمت میتونید یه سری کدهایی را وارد کنیدکه با هر بار کلیک روی کنترل ها اجرا شود.این کد ها بعنوان کنترل کننده ی رویداد(Event Handler) یا زیربرنامه رویداد(Event Procedure)نامیده میشوند.

حال کد زیر را بین دو آکولاد وارد کنید:(کدهایی که باید وارد کنید رو من با کشیدن خط زیر آنها مشخص کردم)

private void btnOK_Click(object sender, EventArgs e)
{
//Display a message box greeting the user
MessageBox.Show("Hello " + txtName.Text +
"! Welcome to Visual C# 2005.",
"Hello User Message");

}


(توجه کنید که در C# دستورات با (;) جدا میشود و همچنین توضیحات بعداز // قرار میگیرند . توضیحاتی که بعد از // قرار میگیرند فقط شامل توضیحات یک خطی میباشد و اگه توضیحات شما شامل چند خط میباشد همانند C++ با */ شروع میشه و تا به /* دومی نرسیدیم هنوز توضیحات ما ادامه دارد.)


حال دوباره به مرحله طراحی وارد شید و این بار روی دکمه Exit دوبار کلیک کنید . کد زیر را بین دو آکولاد وارد کنید:

private void btnExit_Click(object sender, EventArgs e)
{
//End the program and close the form
this.Close();

}


کلمه thisیک کلمه کلیدی است که به شی فعال یعنی در حال برنامه نویسی اشاره دارد.


حال مرحله کدنویسی به پایان رسیده ، خوب دوستان تمامی مراحل خودتون رو،از نوار ابزار save کنید. حال بروی دکمه مثلث سبز رنگ (از نوار ابزار)یا بکمک دکمه F5 برنامه خودتون رو اجرا کنید . (ابتدا یه نامی وارد کنید سپس روی دکمه ok کلیک کنید تا نتیجه رو مشاهده کنید و در اخر هم روی دکمه exit فشار دهید تا کلا برنامه شما خاتمه یابد . اگه احیانا برنامه شما دارای خطا بود میتونید براحتی به مرحله کدنویسی برید ، جاهایی که خطا داره با یک خط چینی مشخص شده ، روی خط چین ها کمی با موس مکث کنید . براحتی میتونید متوجه خطا بشید و debug کنید . موفق باشید
 

zeost

عضو جدید
سلام.
فردا دیگه تحویل پروژه است .لطفا به آخرین سوالم هم جواب بدین.
پروژه در سی شارپ اجرا می شه.یعنی ارور نمیده.ولی وقتی توی فرمم چیزی می نویسم(هر سه قسمت insert وselect وupdate) کار نمی کنه.مثلا قسمت insert را که پر می کنم و باید اطلاعات جدید توی دیتابیس نشون داده بشه نشون نمیده.:(:w19:

javabi ke be soal ghabli dadin ro chek kardam vali dorost neveshtam. hala chi kar konam:crying:...
 
آخرین ویرایش:
  • Like
واکنش ها: mtr

R-Quantum

عضو جدید
کاربر ممتاز
با سلام و خسته نباشید خدمت دوستان عزیزم . امیدوارم که تا بحال با انجام پروژه ی 1 تا حدودی تونسته باشید که با دنیای زیبای سی شارپ انس گرفته باشید . خوب حالا میخوام سرفصل جدیدی بنام کار با متغییر ها رو شروع کنم و از دوستان گلمم میخوام که اینجانب رو تنها نذارند و با اطلاعاتشون مرا یاری کنند . قبل شروع کار همه ی ما با مفهوم الگوریتم و متغییر آشنا هستیم . میدونیم که الگوریتم یه سری دستورات پی در پی هستش که چیدمانشان طبق یکسری اصول خاصی هستش و فراموش نکردیم که الگوریتم ما باید حتما پایان پذیر باشد و متغییر مکانی هستش که یک مقدار رو در طول برنامه یا الگوریتم در خود نگهداری میکند . حال کارمون رو با یه پروژه بنام متغییرشروع میکنیم . ما میخواهیم که الگوریتم زیر را در این پروژه پیاده سازی کنیم :
1.یک متغییر بنام n ایجاد میکنه و مقدار 27 رو تو اون قرار میده .
2.متغییر n رو با 1 جمع میکنه و حاصل رو دوباره تو n می ریزه .
3.در نهایت مقدار متغییر n رو به کاربر نشون میده .
محیط ویژوال رو باز کنید . از طریق File/New/Project یک پروزه ی جدید رو باز کنید .در پنجره new project از قسمت سمت راست Windows Application را انتخاب کنید و در قسمت نام پروژه Variables را وارد کنید و سپس دکمه ok رو بزنید . حال به فرم خود یک کنترل button قرار بدیدوخاصیت text آنرا Add 1 to int Number و خاصیت name آنرو btnAdd تغییر بدهید. حال روی دکمه کنترل دوبار کلیک کنید تا وارد مرحله کدنویسی شوید . حال این کد رو بین دو آکولاد اضافه کنید:
private void btnAdd_Click(object sender, EventArgs e)
{
int intNumber;
intNumber = 27;
intNumber = intNumber + 1;
MessageBox.Show(
"Value of intNumber + 1 = " + intNumber,
"Variables");{
حال برنامه رو اجرا کنید . خروجی برنامه شما پیغام زیر خواهد بود:
Value of intNumber+1=28.
یه توضیح کوتاهی در مورد Variablesخط آخر کدنویسی براتون بدم که با سبز یشمی نمایش دادم . شما انتظار نداشته باشید که این هم در آخر چاپ بشه . علت این که ما این کلمه رو در آخر کدنویسی خود ذکر کردیم فقط برای هماهنگی با عنوان پنجره که در شروع کار تغییر دادیم ، میباشد والا هیچ کارکردی ندارد.
دوستان عزیز یه نکته رو در آخر متذکر شم که فکر نکنید من پروژه های آسون براتون میذارم و پروژه ها رو سرسری بگیرید . ما کارمون رو از پروژه های به اصطلاح آسون شروع کردیم تا اولا با محیط سی شارپ آشنا بشیم و ثانیا تو همین پروژه های آسون نکته هایی نهفته شده که برای شروع کار ما ضروری میباشند و ثالثا ما رو با محیط کدنویسی بیشتر آشنا میکنند و ذهنمون رو برای پروژه های بزرگتر فعال تر میکنند . موفق باشید.
 
  • Like
واکنش ها: mtr

R-Quantum

عضو جدید
کاربر ممتاز
سلام دوستان عزیز. شروع سال تحصیلی جدید رو به همه شما مهندسین عزیز تبریک میگم . به امید شاهد موفقیت شما بروی پله های ترقی .
( یه چیزی هم بدوستان بگم : ما تو تاپیک هایی که در آینده نه چندان دور میخوایم بذاریم ، توبین اونا، مطالب جامع تری در مورد این مطالب گفته شده ، خواهد بود . پس اصلا جای هیچ نگرانی نیستش) خوب بحث این جلسه در مورد رشته هاست . برای تنوع بیشتر مباحث این جلسه رو فهرست بندی کردم :
1. اتصال رشته ها
2. بدست آوردن طول یک رشته
3. کار با زیر رشته ها
4. جایگزینی زیر رشته ها

1. اتصال رشته ها:

خوب برای شروع کار یک پروژه جدید درست کنید و نام اون رو strings بذارید. حال به فرمتون یک button قرار بدید . خاصیت Name و Text اون رو بترتیب btnConcatenation و Concatenation تغییر بدید. خوب حالا روی دکمه کنترل دوبار کلیک کنید تا وارد محیص کدنویسی شید و کد زیر را بین دو {} قرار بدید:
// Declare variables
string strOne;
string strTwo;
string strResults;
// Set the string values
strOne = "Hello, ";
strTwo = "Friends!";
// Concatenate the strings
strResults = strOne + strTwo;
// Display the results

MessageBox.Show(strResults, "Strings");

حالا با F5 برنامه رو اجرا کنید.

2.بدست آوردن طول یک رشته:

خوب به همون فرم قبلیتون یک کنترل TextBox اضافه کنید و خاصیت Name اون رو به txtString تغییر بدید. (همون طور که دیده میشه ما با خاصیت text این کنترل کاری نداریم چرا چون خودمون میخوایم یک متنی رو وارد کنیم . بخاطر همین خاصیت text رو سفید میزاریم) خوب یه کنترل button دیگه هم به فرمتون کنار کنترل textbox قرار بدیدو خاصیت Name و Text اون رو بترتیب btnLength وLength تغییر بدید.
خوب روی کنترل Length دوبار کلیک کنید و کد زیر را وارد کنید:
// Declare variable
string strData;
// Get the text from the TextBox
strData = txtString.Text;
// Display the length of the string
MessageBox.Show(strData.Length + " Character(s)",

"Strings");

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

R-Quantum

عضو جدید
کاربر ممتاز
3.کار با زیر رشته ها:

(ما همه ی کارمون رو برای راحتی تو این جلسه روی یک فرم انجام میدیم ، اگه شما دوست ندارید ، میتونید برای هر سر فصل یه فرم مجزا درست کنید.) خوب به فرم قبلی یک کنترل button دیگه اضافه کنید (دوستان این نکته رو هم یادآوری شم که هر سری که سرفصل جدید شروع میشه ، شما باید برای طراحی برنامه جدید ، برنامه ی اجرا شده قبلی را ببندید) خاصیت Name و Text اون رو بترتیب btnSplit و Splitتغییر بدید . با دوبار کلیک روی همین کنترل ، کد زیر را وارد کنید:
// Declare variable

string strData;

// Get the text from thew TextBox
strData = txtString.Text;
// Display the first three characters
MessageBox.Show(strData.Substring(0, 3), "Strings");
// Display the middle three characters
MessageBox.Show(strData.Substring(3, 3), "Strings");
// Display the last three characters
MessageBox.Show(

strData.Substring(strData.Length - 3), "Strings");

خوب حالا توی textbox که در سرفصل قبلی ایجاد کردیم ، یک متنی رو وارد کنید و نتیجه رو مشاهده کنید.
فکر کنم تو این کد یه توضیح کوچولویی در مورد اعداد داخل پرانتز لازم باشه. خوب اگه برنامه رو اجرا کنید براتون سه کادر ظاهر خواهد شد . کادر اول شامل سه کاراکتر اول از متن تایپ شده است (0,3) کادر دوم نیز شامل سه کاراکترمیباشد ولی شروع اون از سومین کاراکتر متن وارده هست(3,3) کادر اخر هم شامل سه کاراکتر انتهایی متن وارده است (strData.Length-3)

4.جایگزینی زیر رشته ها:

به همون فرممون یک کنترل button اضافه کنید. خاصیت Name و Text اون رو بترتیب btnReplace وReplace تغییر دهید. با دو بار کلیک روی کنترل Replace کد زیربین دو{} وارد کنید:
// Declare variables
string strData;
string strNewData;
// Get the text from the TextBox
strData = txtString.Text;
// Replace the string occurance
strNewData = strData.Replace("Hello", "Goodbye");
// Display the new string

MessageBox.Show(strNewData, "Strings");

خوب حالا برنامه رو اجرا کنید و در textbox موجود در فرم عبارت Hello friends را تایپ کنید . حال رو دکمه Replace کلیک کنید ، حتما متوجه تغییر شدید. خسته نباشید . موفق باشید
 

darkwish

عضو جدید
one question

one question

سالم من یک سوال داشتم من می خام روی یک فیلد از data base که با sql server 2000 ساختم در یک متغیر قرار بدم و عملیت ریاضی انجام بدم plz help
 
بالا