|
بازنویسی کنترلهای ویندوزی:
در سی شارپ می تونید به سادگی کنترلهای ویندوزی جدیدی رو بر اساس کنترلهای ویندوزی ایجاد نمایید. برای مثال ما یک جعبه متن با قابلیت جدیدی ایجاد می کنیم. قصد داریم برای مثال، زمانی که کنترل جدید دارای فوکوس شود متن داخل آن بطور کامل به حالت انتخاب درآید. در سی شارپ کنترل جدید از روی کنترل ویندوزی موجود مشتق می شود. برای شروع یک کلاس جدید به پروژه اضافه کنید و تعریف کلاس رو به شکل زیر تغییر بدید: public class HighlighterTextBox:
System.Windows.Forms.TextBox ما نام کنترل جدید را HighlighterTextBox
گذاشتیم و اون رو از کلاس TextBox مشتق کردیم یا به اصطلاح کنترل ما از کنترل
TextBox اینهریت (Inherit) شده است. برنامه رو کامپایل کنید (F6) بعد از کامپایل
برنامه یک کنترل جدید در لیست کنترلهای ویندوزی به نام HighlighterTextBox اضافه
خواهد شد. ![]() public class HighlighterTextBox :
System.Windows.Forms.TextBox { public HighlighterTextBox() { init(); } private void init() { //add event handler to Enter event this.Enter += new System.EventHandler(highlight); } //event handler for highlight event private void highlight(object obj, System.EventArgs e) { this.SelectionStart = 0; this.SelectionLength = this.Text.Length; } } برای تست برنامه یک نمونه از جعبه متن ساخته شده رو از جعبه ابزار ویژوال استدیو بروی فرم قرار بدید و یک جعبه متن معمولی هم برای مقایسه روی فرم قرار بدید. حالا اگر برنامه رو اجرا کنید و متنی رو داخل هر دو تایپ کنید، با حرکت بین کنترلها می بینید که متن داخل هر دو جعبه متن انتخاب می شود. این همان حالت AutoHighlight در سی شارپ است که برای کنترل جعبه متن وجود دارد. برای اینکه بتونید تفاوت بین دو کنترل رو ببینید بین متن داخل هر دو کنترل کلیک کنید و سپس با استفاده از کلید TAB بین آن دو حرکت کنید، حالا خواهید دید که فقط متن داخل کنترل ما به حالت انتخاب در می آید و نه کنترل ویندوزی. در مثال دوم قصد داریم یک خصوصیت نمایش تاریخ به این کنترل اضافه کنیم. این خصوصیت باعث خواهد شد که جعبه متن ما بتوانید تاریخ را نمایش دهد. برای این منظور یک خصوصیت برای نمایش تاریخ به نام ShowDateTime از جنس bool تعریف می کنیم و در زمانی که خصوصیت دارای مقدار true است تاریخ را نمایش می دهد. کد زیر خصوصیت مورد نظر را نمایش می دهد. (برای اینکه این خصوصیت را در پنجره خصوصیات کنترل ببینید باید یکبار برنامه را کامپایل کنید). // add new property to control تمرین: کنترل جدیدی بر اساس
کنترل جعبه متن بسازید که دارای قابلیت نمایش تاریخ به دو شکل میلادی و شمسی رو
داشته باشه. و بتونید همیشه تاریخ داخل کنترل رو به جهت مخالف تبدیل کنید. می تونید
این کنترل رو توسعه بدید و از اون برای ورود اعداد و متن هم استفاده کنید.private bool showDateTime; public bool ShowDateTime { get {return showDateTime;} set { showDateTime = value; if (showDateTime) this.Text = DateTime.Now.ToString(); } } از اینجا می تونید کد نمونه رو دانلود کنید. تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ،
جعبه متن، پروژه، کد نمونه، کنترل ویندوزی، ساخت کنترل، انتخاب متن، ارث بری کنترل،
ویژوال استدیو، ساخت خصوصیت
English Tags:
Mehdi Rizvandi, Csharp, C sharp, C#, Textbox, Button, Project, Sample
Code,Windows Control, User Control, Create Control, SelectionStart,
SelectionLenght, Inheritance, Inherited control, Drived Control, Visual Studio,
VS, Property, Create Property
+
نوشته شده در سه شنبه بیست و هشتم خرداد 1387ساعت 20:55 توسط کنستانتین
|
گروه اعتبار سنجی - ValidationGroup:
یکی از مشکلات استفاده از کنترلهای سنجش اعتبار یا Validation Controls اینه که اگر در یک صفحه چند گروه مختلف کنترل داشته باشیم و بخواهیم هر دسته از کنترلها رو با در شرایط خاصی چک کنیم به مشکل برخواهیم خورد. 1- بطور مثال اگر در یک صفحه دو دسته اطلاعات مختلف به همراه دو دکمه برای ثبت هر کدام از گروه های اطلاعاتی داشته باشیم نمی توان از کنترلهای اعتبار سنجی به روش پیش فرض استفاده کرد. 2- شاید صفحاتی رو که دارای دکمه ثبت و دکمه پاک کردن اطلاعات هستند رو دید، در این صفحات نیز مشکل اعتبار سنجی وجود داره! چرا؟ چون اگر کاربر بخواهد اطلاعات صفحه رو پاک کنه به مشکل اعتبار برخواهد خورد و کد مربوط به پاک کردن محتویات کنترلها اجرا نخواهد شد. 3- مثال آخر اینکه در صفحه ای که کنترلهای اعتبار سنجی وجود دارند و شما بخواهید از یک دکمه دیگر مثل نمایش اطلاعات اضافی استفاده کنید در کل در تمام صفحاتی که به غیر از دکمه اصلی که معمولا ثبت هست یک کنترل دارای خاصیت PostBack استفاده کنید، کنترلهای اعتبار سنجی شما به خطا خواهند رفت، زیرا جلوی هر PostBack صفحه را خواهند گرفت. پیشنهاد می کنم اگر با این مشکل قبلا روبرو نشدید حتما یک پروژه تمرینی بسازید تا بهتر مطالب رو درک کنید. برای این منظور یک پروژه وب جدید ایجاد کرده و دو textbox و دو button به اون اضافه کنید. می تونید از کنترلهای اعتبار سنجی Requierd Field Validator استفاده کنید و تنظیمات اون رو انجام بدید. یک کد برای دکمه ثبت و کدی جهت پاک کردن خصوصیات Text دو textbox بنویسید. اگر همه چی رو درست تنظیم کرده باشید، خواهید دید که تا زمانی که هر دو جعبه متن پر نشده باشند نمی توان از دکمه پاک کردن استفاده کرد. خوب حالا می ریم سراغ تمرین خودمون یعنی بکارگیری Validation Group: برای این منظور یک پروژه وب ایجاد کنید. دو asp:textbox به عنوان گروه اول اضافه کنید و برای این دو کنترل، دو کنترل asp:RequiredFieldValidator اضافه کنید و خصوصیت ControlToValidate آن دو را به دو کنترل TextBox مرحله قبل تنظیم کنید. دو کنترل asp:button به صفحه اضافه کنید، یکی با عنوان Submit و دیگری با عنوان Reset برای دکمه Reset کدی جهت پاک کردن دو کنترل جعبه متن مرحله قبل بنویسید. دو یا سه asp:textbox دیگر به صفحه اضافه کنید و مانند مراحل قبل برای آنها از asp:RequiredFieldValidator استفاده کنید. دو کنترل asp:button مانند مراحل قبلی اضافه کنید با همان نام. پروژه را اجرا نموده و از دکمه های Submit و Reset استفاده کنید. نتیجه را مشاهده کنید. این همان مشکل استفاده پیش فرض از کنترلهای اعتبارسنجی است. کد زیر لیست کنترلها و تنظیم خصوصیات اصلی آنها رو مشخص می کنه: 1. asp:TextBox ID="txtName" 2. asp:RequiredFieldValidator ID="rfvName" ControlToValidate="txtName" ErrorMessage="*" 3. asp:TextBox ID="txtFamily" 4. asp:RequiredFieldValidator ID="rfvFamily" ControlToValidate="txtFamily" ErrorMessage="*" 5. asp:Button ID="btnSubmit" Text="Submit" 6. asp:Button ID="btnReset" Text="Reset" 7. asp:TextBox ID="txtIDNo" 8. asp:RequiredFieldValidator ID="rfvIDNo" ControlToValidate="txtIDNo" ErrorMessage="*" 9. asp:TextBox ID="txtUserName" 10. asp:RequiredFieldValidator ID="rfvUserName" ControlToValidate="txtUserName" ErrorMessage="*" 11. asp:TextBox ID="txtPassword" 12. asp:RequiredFieldValidator ID="rfvPassword" ControlToValidate="txtPassword" ErrorMessage="*" 13. asp:Button ID="lblSubmitExtraInfo" Text="Submit Extra Info" 14. asp:Button ID="lblResetExtraInfo" Text="Reset Extra Info" کدهای مربوط به دو دکمه Reset: protected void btnReset_Click(object sender, EventArgs e) خوب حالا که مشکل کنترلهای اعتبارسنجی رو به روش پیش فرض استفاده شون دیدیم، میخواهیم اون مشکل رو با استفاده از خصوصیت ValidationGroup حل کنیم. بسیار روش ساده ای رو در پیش رو داریم. برای این منظور باید خصوصیت ValidationGroup هر گروه از کنترلها رو با یک مقدار مشخص مقداردهی کنیم. دو کنترل اعتبارسنجی گروه اول رو با دکمه Submit در یک گروه قرار میدیم (کنترلهای 2،4 و 5). سه کنترل اعتبارسنجی و دکمه Submit دوم را نیز در یک گروه دیگر قرار می دیم. (8،10،12 و 13){ txtName.Text = ""; txtFamily.Text = ""; } protected void btnResetExtraInfo_Click(object sender, EventArgs e) { txtIDNo.Text = ""; txtUserName.Text = ""; txtPassword.Text = ""; } پروژه رو اجرا کنید و نتیجه رو ببینید. کنترلهایی که باید تغییر پیدا کنند در زیر لیست شده اند: (به خاصیت ValidationGroup دقت کنید) 1. asp:RequiredFieldValidator ID="rfvName" ControlToValidate="txtName" ErrorMessage="*" ValidationGroup="groupName" برای راحتی و حصول نتیجه کامل یک برنامه نمونه آماده شده که می تونید اون رو از اینجا دانلود کنید.2. asp:RequiredFieldValidator ID="rfvFamily" ControlToValidate="txtFamily" ErrorMessage="*" ValidationGroup="groupName" 3. asp:Button ID="btnSubmit" Text="Submit" ValidationGroup="groupName" 4. asp:RequiredFieldValidator ID="rfvIDNo" ControlToValidate="txtIDNo" ErrorMessage="*" ValidationGroup="groupExtraInfo" 5. asp:RequiredFieldValidator ID="rfvUserName" ControlToValidate="txtUserName" ErrorMessage="*" ValidationGroup="groupExtraInfo" 6. asp:RequiredFieldValidator ID="rfvPassword" ControlToValidate="txtPassword" ErrorMessage="*" ValidationGroup="groupExtraInfo" 7. asp:Button ID="lblSubmitExtraInfo" Text="Submit Extra Info" ValidationGroup="groupExtraInfo" تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، ای اس پی دات نت، وب، اعتبارسنجی، جعبه متن، دکمه، پروژه، کد نمونه
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, ASP.Net, Web, Web Development, Solution, Validation Group, Textbox, Button, Project, Sample Code
+
نوشته شده در شنبه چهاردهم اردیبهشت 1387ساعت 15:1 توسط کنستانتین
|
در ابتدا به نمایندگی از کلیه نویسندگان وبلاگ جادوی سی شارپ سال نو رو به شما تبریک می گم.
فضای نام : Namespace ویژوال استدیو برای هر پروژه ای که شروع می کنید یک فضای نام با نام پروژه ایجاد می کند، البته شما می تونید با استفاده از پنجره خصوصیات ابن نام را تغییر دهید یا اینکه اون رو خالی کنید که به معنای اینه که پروژه شما در فضای نام قرار ندارد. همچنین شما این اجازه رو دارید که فضای نام خود را تعریف کنید. با استفاده از فضای نام می تونید کلاسهایی با نامه های مشابه در یک پروژه ایجاد نمایید، برای این منظور کافیست هر کلاس را در یک فضای نام مجزا قرار دهید. در زمان استفاده از کلاس مورد نظر نیز باید فضای نام آن را مشخص نمایید. در لیست کد 1 یک کلاس تعریف شده با نام Rectangle دیده می شود که همنام با کلاس Rectangle از فضای نام Drawing است: /// Sample Code 1 CsharpPats.Rectangle cpRect; System.Drawing.Rectangle sdRect; private void init() { rect1 = new CsharpPats.Rectangle (10, 20, 70, 100); rect2 = new System.Drawing.Rectangle (20, 30, 80, 200); } تعاریف Public, Private و Protected: در سی شارپ می توان متدهای کلاس و متغیرها را به شکل Public, Private یا Protected تعریف نمود. متد یا خصوصیت Public یا عمومی در کلاسهای دیگر قابل دسترس است. متد یا خصوصیت Private یا خصوصی فقط در همان کلاس قابل دسترس است. معمولا تمامی متغیرهای کلاس را به شکل Private خصوصی تعریف می کنیم و برای دسترسی به آنها از توابع دسترسی Get و Set استفاده می کنیم. اینکه متغیرهای در خارج از کلاس در دسترس باشند، ایده بسیار بدی خواهد بود. زیرا این امر تخلف از قانون کپسوله نمودن (Encapsulation) در شی گرایی است. یا به عبارت دیگر تمامی متغیرهای کلاس فقط باید در محدوده کلاس قابل دسترس باشند. در سی شارپ می توان متدها و متغیرها را به شکل Protected یا محافظ شده نیز تعریف نمود. متد یا متغیر محافظت شده در تمامی کلاس و زیرکلاسهای تعریف شده قابل دسترس است. یا بطور ساده متد یا متغیر محافظت شده فقط در همان کلاس یا کلاسهایی که از آن مشتق می شوند قابل دسترس است و خارج ار کلاس نمی توان به آن دسترسی داشت. Overloading: در سی شارپ نیز همانند دیگر زبانهای برنامه نویسی شی گرا می توان یک متد با نام یکسان و آرگومانها یا امضای مختلف تعریف نمود. برای مثال ما می خواهیم یک متد برای رسم مستطیل تعریف نماییم که از آن برای رسم مستطیل و مربع استفاده نماییم. در این حالت یک متد رسم دارای چهار آرگومان و دیگری دارای سه آرگومان خواهد بود. به لیست کد 2 توجه کنید: /// Sample Code 2 در مثال فوق یک فضای نام
به اسم Draw تعریف شده که دارای دو متد یکسان با آرگومانهای مختلف است (متد Draw
اصطلاحا Overload شده است) تصویر زیر استفاده از کلاس Rectangle را در زمان کد
نویسی نمایش می دهد.namespace Draw { class Rectangle { public void DrawRect(long x,long y,long w,long h) { // Write Your Code Here [Draw Rectangle] } public void DrawRect(int x,int y,int w) { // Write Your Code Here [Draw Square] } } }
Draw.Rectangle drawingRect=new
Draw.Rectangle(); drawingRect.DrawRect(15,25,200,40); drawingRect.DrawRect(30,20,50); کلمات کلیدی Virtual و Override: اگر متدی رو می خواهید در اختیار کلاسهای مشتق شده از کلاس برای بازنویسی قرار بدید، باید اون رو از نوع Virtual تعریف کرده باشید. این به معنی اینه که کلاس مشتق شده از کلاس پایه می تواند دارای یک متد با نام، آرگومان و امضای یکسان با متدی از کلاس پایه باشد. در این حالت شما باید متد خود را با کلمه کلیدی Override در کلاس مشتق شده تعریف نمایید. - دقت کنید که اگر در کلاس مشتق شده یک متد را Override کنید بدون اینکه همان متد در کلاس پایه Virtual تعریف شده باشد، کامپایلر یک خطا از شما خواهد گرفت. - اگر یک متد را بدون استفاده از کلمه کلیدی Override مجددا بازنویسی نمایید نیز کامپایلر یک خطا از شما خواهد گرفت. - اگر متدی رو در کلاس پایه Virtual تعریف نکرده باشید و در در کلاس مشتق شده متدی با همان نام بدون کلمه کلیدی Override تعریف کنید، خطایی رخ نخواهد داد و کامپایلر فقط یک اخطار تولید خواهد کرد و متد تعریف شده نیز قابل استفاده است. در لیست کد 3 مثالی از تعریف متدهای Override دیده می شود (برای تست کد زیر یک کلاس به پروژه اضافه نمایید و کدهای آن را با کد زیر جایگزین کنید): /// Sample Code 3 namespace Draw { class Rectangle { public void DrawRect(long x, long y, long w, long h) { // Write Your Code Here [Draw Rectangle] } public void DrawRect(int x, int y, int w) { // Write Your Code Here [Draw Square] } virtual public void DrawSquare(int x, int y, int w) { // Write Your Code Here [Draw Square] System.Windows.Forms.MessageBox.Show("DrawSquare From Base Class Called"); } } class Square : Rectangle { public void DrawCircle(int x, int y, int r) { // Write Your Code Here [Draw Circle] } override public void DrawSquare(int x, int y, int w) { System.Windows.Forms.MessageBox.Show("DrawSquare From Derived Class Called"); // Write Your Code Here [Draw Double Square] } } } جایگزینی یک متد با استفاده از کلمه کلیدی یک راه دیگر برای بازنویسی متدی که در کلاس پایه به صورت Virtual تعریف نشده است، استفاده از کلمه کلیدی new در کلاس مشتق شده است. اگر از این روش استفاده کنید، متد کلاس پایه در کلاس و در زمان استفاده مخفی خواهد بود. دقت کنید که در این حالت امکان دسترسی به متد پایه نخواهد بود و شما باید کدهای مورد نظر خود را در کلاس مشتق شده بطور کامل بنویسید. public new void DrawLine(int x,int y,int w,int
h) { // Write Your New Code Here [Draw Line] } تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ،
سی شارپ مقدماتی، آموزش ربان سی شارپ، شی گرایی در سی شارپ، فضای نام، عمومی،
خصوصی، محافظت شده، بازنویسی، متد، کپسوله کردن، کلاس، کد نمونه
English Tags:
Mehdi Rizvandi, Csharp, C sharp, C#, Introduction to C#, CSharp Guide, Object
Oriented In C#, Namespace, Public, Private, Protedted, Override, Overload,
Virtual, new, Encapsulation, Class, Method, Sample Code
+
نوشته شده در شنبه سوم فروردین 1387ساعت 23:56 توسط کنستانتین
|
هدیه کریسمس امسال مایکروسافت برای برنامه نویسا نسخه جدید Visual Studio با نام مستعار Orcas بود که در زمان عرضه به VS2008 نامگذاری شد.طبق گفته مایکروسافت 250 امکان جدید به VS2008 اضافه شده و قطعا در این مقاله نمی تونم همه تغییرات و اضافات این محصولو ذکرکنم و فقط به درشتاش بسنده می کنیم.
اول به این نکته اشاره کنم که VS2008 در حقیقت فقط IDE هست که به همراه اون نسخه جدید .NET و همچنین نسخه جدید C# و VB.NET هم عرضه شدن. بعضی از این تغییرات مربوط به .NET، بعضی دیگه مربوط به زبانهای برنامه نویسی و بعضیاش هم به خود IDE مربوط میشه ولی چون همه اینا رو در یک مجموعه عرضه کردن به همش تغییرات VS2008 گفته میشه. یه نکته دیگه هم بگم و اون اینه که شما می تونید VS2008 را در کنار VS2005 نصب کنید بدون هیچ مشکلی. تغییرات عمده و پر سر و صدا از VS2005 به VS2008 عبارتند از: 1- نسخه جدید .NET: این مایکروسافت هم شورشو درآورده. هنوز به .NET 2.0 مسلط نشدیم که یهو سروکله .NET 3.0 و بعدش هم .NET 3.5 پیدا شد. نسخه .NET که به همراه VS2008 عرضه شده همین .NET 3.5 است. در وصف این زیبارو همین بس که علاوه بر همه .NET 2.0 (تاکید می کنم همه .NET 2.0) شش Library اضافه شده بهش که عبارتند از :
2- خلق زبان XAML: اینم یکی دیگه از تحولات جدید VS2008 است. یه زبان جدید برای طراحی! اونایی که سراغ WPF و SilverLight میرن بیشتر در مورد این زبان مطلب میشنون. به واسطه همین زبان مایکروسافت یه Designer جدید به VS2008 اضافه کرده که شما در آن واحد هم می تونید Interface رو بصورت سنتی و با استفاده از ToolBox و پنجره Properties طراحی کنید و هم می تونید از XAML در پنل مخصوص به خودش استفاده کنید. 3- قابلیت MultiTargeting: شما در VS2008 می تونید پروژه هایی از نوع .NET 2.0 یا .NET 3.0 یا 3.5 بسازید. 4- طراح MasterPage های تو در تو (Nested MasterPage): قابلیت Nested MasterPage در VS2005 هم وجود داشت و در حقیقت با .NET 2.0 عرضه شد اما مشکلی که وجود داشت این بود که VS2005 توانایی ویرایش و نمایش صفحات وب مبتنی بر Nested MasterPage رو نداشت که این امکان به VS2008 اضافه شده. 5- در .NET 3.0 سه کنترل جدید به ASP.NET اضافه شده. این سه کنترل عبارتند از: ListView، DataPager، LinqDataSource. 6- پشتیبانی از Expression Blend: حتما با Expression Blend آشنا هستید. Expression Blend ابزاری بصری برای تولید کدهای XAML در برنامه های مبتنی بر WPF است. در VS2008 شما Expression Blend رو به عنوان یه Add in در اختیار دارید. 7- مدیریت Using: برنامه نویسایی که از Java به .NET رو آوردن مدتها منتظر بودن تا چنین امکانی به VS اضافه بشه. با استفاده از این امکان شما می تونید بخش Using هر ماژولو مدیریت کنید. با انتخاب همه Using ها و کلیک راست روی اونا منوی مدیریت Using ها نمایش داده میشه که شامل گزینه هایی مثل: حذف Using های استفاده نشده، مرتب کردن Using ها، حذف و مرتب کردن و امکانات دیگه ای است. 8- نمایش منوی Intellisense: در نسخه های قبلی VS وقتی که اسم یه شی و علامت . رو تایپ می کردید منوی Intellisense در محل تایپ نمایش داده میشد و این باعث میشد که قسمتهایی از کد که زیر منو قرار می گرفت از دید شما خارج بشه. در VS2008 در زمان نمایش منوی Intellisense اگه شما کلید Ctrl رو نگهدارید این منو بصورت نیمه شفاف نمایش داده میشه و در نتیجه کدهای زیر اون هم قابل مشاهده هستن. 9- فیلتر کردن منوی Intellisense: در نسخه های قبلی VS وقتی شما چیزی تایپ می کردید همه گزینه های مربوطه در منوی Intellisense نمایش داده می شد اما در VS2008 فقط آیتمهایی نمایش داده میشن که با کارکترهای تایپ شده توسط شما منطبق باشه. به عنوان مثال اکه شما اسم یه شی رو تایپ کنید و بعد علامت . بزنید و بعدش حرف m رو تایپ کنید فقط اعضایی که با حرف m شروع میشن تو لیست نمایش داده میشه. 10- JavaScript Intellisense and Debugging: بعضی از چیزا هست که واقعا نمیشه فهمید که چرا Microsoft اینقدر در برابرشون ایستادگی می کنه. یکیش همینه. بالاخره Microsoft بعد از مدتها امکان Debug و Intellisense برای JavaScript هایی که توی صفحات ASPX می نویسید را توی VS2008 قرار داد. 11- اخطار برای خطاهای Html و JavaScript: در VS2005 خطاهای مربوط به Html و خطاهای زبان C# بطور ترکیبی توی یه پنجره نمایش داده میشد. در VS2008 این خطاها جدا شدن و به همراه خطاهای مربوط به JavaScript به عنوان اخطار (Warning) نمایش داده میشن. 12- یکی دیگه از تغییرات پر سر و صدا عرضه LINQ (Language Integrated Query) بود. LINQ یک روش کاملا جدید و نوآورانه برای کار با منابع داده با استفاده از Query بدون توجه به نوع منبع داده است صرف نظر از اینکه منبع داده موجود در حافظه اشیا، XML، SQL و یا DataSet و یا هر چیز دیگه ای باشه. 13- طراح LINQ: در VS2005 امکاناتی برای کار با SQL Server به نام Server Explorer در اختیار برنامه نویس بود. در VS2008 این امکانات کماکان وجود دارن با این تفاوت که اماناتی هم برای طراحی LINQ-to-SQL اضافه شده. 14- معماری رابط کاربر چند زبانه (MUI): معماری MUI این اجازه رو به کاربر میده تا زبان متن نمایش داده شده رو به زبان دلخواه تغییر بده. این معماری بخشی از محصولات MS Office و MS Windows محسوب میشه. VS2008 در حال حاضر زبانهای انگلیسی، اسپانیایی، فرانسوی، آلمانی، ایتالیایی، چینی، ژاپنی، کره ای را فراهم کرده. (همین جا وبلاگ CsharpBlog مایکروسافت رو به دلیل نادیده گرفتن حقوق برنامه نویسای ایرانی و نبودن زبان فارسی تو این لیست شدیدا محکوم می کنه و تحریم می کنه تا بدینوسیله این شرکت ورشکست بشه الهی!) 15- امکانات بسیار زیادی به زبانهای برنامه نویسی C# و VB.NET اضافه شده که فقط از شنیدن اسم اونا مو به تنتون سیخ میشه. بعضی از این تغییرات مهم عبارتند از:
در مورد این امکانات کسی سوال نکنه که خودمم تازه دارم مطالعشون می کنم! نکته مهم و جالب دیگه اینه که شما می تونید از امکانات جدید زبانهای #C و VB.NET توی پروژه های .NET 2.0 که قبلا نوشتید استفاده کنید. بزودی تو همین وبلاگ در مورد این امکانات بیشتر صحبت می کنیم. منبع: وبلاگهای MSDN English Tags:Mohammad Safdel, Orcas, Visual Studio 2008, VS2008, C# 3.0, WPF, WF, WCF, XAML, CardSpace,ASP.NET AJAX,SilverLight,MultiTargeting,Nested MasterPage, Using Managment, Intellisense, 10- JavaScript Intellisense and Debugging, LINQ,MUI, Automatic Properties,Relaxed Delegates,Object Initialisers,Type Inference,Anonymous Types,Extension Methods,Lambdas,Partial Methods,Popfly
+
نوشته شده در شنبه ششم بهمن 1386ساعت 19:12 توسط ققنوس
|
سلام خدمت کلیه دوستان همیشگی جادوی سی شارپ
با توجه به رشد روزافزون وب تصمیم گرفتم که مقاله ای در خصوص وب تهیه کنم و با توجه به اینکه MasterPage یکی از قابلیتهای بسیار عالی در 2005 هست تصمیم گرفتم مقاله ای رو در همین راستا آماده و به دوستانم ارائه کنم. یکی از مشکلات من در طراحی وب سایت در زمان ASP.NET 1.x این بود که بخوام قالب وب سایت رو عوض کنم، این به معنی تغییر کلیه صفحه های وب سایت و آپلود همه اونها بود که مشکلات این تغییر هم بسیار واضح هست، مثل اشتباهات کاربری، حجم زیاد دوباره کاری، آپلود صفحات زیاد و .... خوشبختانه در ASP.NET 2.0 با ظهور MasterPage این مشکل به راحتی مرتفع گردید. در خصوص صفحه اصلی یا همورن MasterPage دو مقاله تهیه شده، اولین مقاله شامل آشنایی، مفاهیم و امکانات این قابلیت هست و دومین مقاله به زبان بسیار ساده و به صورت قدم به قدم روش پیاده سازی و بهره مندی از این قابلیت رو شرح میده: مقله اول: صفحه اصلی در ASP.NET (در یک نگاه) فهرست:
مقاله دوم: مثال عملی استفاده از صفحه اصلی در ASP.NET (قدم به قدم) شامل دو مثال پیاده سازی صفحه اصلی دریافت مقاله مثال عملی استفاده از صفحه اصلی در ASP.NET (قدم به قدم) دریافت کدهای مقاله مثال عملی استفاده از صفحه اصلی در ASP.NET (قدم به قدم) پاسخ به سوالات عمار دوست عزیز: در خصوص بدست آوردن شماره سطر و ستون اشاره گر در یک کنترل RichText می تونید از متدها و خصوصیات زیر استفاده کنید: SelectionStart: این خصوصیت، مکان اشاره گر را به شما برمیگرداند (در کل متن) GetLineFromCharIndex: این متد شماره خطی مورد نظر شما را برمی گرداند (کافیست به اون شماره اندیس اشاره گر رو بدید) GetFirstCharIndexFromLine: شماره اندیس اولین کاراکتر یک خط رو برمی گردونه یک مثال هم نوشته شده که می تونید کد اون رو از اینجا دریافت کنید int startSelection = 0; در خصوص گرفتن تصویر از صفحه دسکتاپ می تونید از سایتهای زیر استفاده کنید. در دات نت به صورت مستقیم روشی برای این کار وجود ندارد و شما باید به صورت UnManaged این عمل رو انجام بدید. c-sharpcorner codeguru تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، صفحه اصلی، مستر پیج، ام اس دی ان،نگهدارنده محتوا،ارجاع دادن به منابع خارجی،کنترلهای سرور، تم، مقاله، وب، دات نت 2، 2005، طراحی وب سایت، پیاده سازی، مثال، کد، برنامه، ریچ تکیت، سطر، ستون
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#,MasterPage, MSDN, ContentPlaceHolder, Refrence to external resource, Server Controls, Theme, Research, Document, Web, Web 2.0, Dot Net 2.0, VS 2005, Web Site Design, Implementation, Sample, Code, Source Code, Programe, RichText, Row, Col, Managed Code
+
نوشته شده در یکشنبه نهم دی 1386ساعت 8:28 توسط کنستانتین
|
سلام به همه دوستان
هفته پیش توی یکی از پروژه ها مجبور شدیم از Crystal Report استفاده کنیم. توی استفاده از Crystal Report به یه مشکل خاصی برخوردیم که با راهنمایی دو تا از دوستان عزیزم یعنی محمد امین تقدسی و MSDN ، این مشکلو برطرف کردیم. مشکل مربوط می شد به نحوه تبدیل تاریخ میلادی به شمسی در Crystal Report که برای این کار از CRUFL استفاده کردیم. برای آشنایی با CRUFL می تونید مقاله این پست رو دانلود کنید و بخونید. تا یادم نرفته منبع این مقاله MSDN بود که متاسفانه یادم رفت تو خود PDF اینو بگم. در این مقاله فرض شده که برنامه نویس با Crystal Report آشنایی کافی داره. این مقاله رو می تونید از آدرس زیر دانلود کنید: استفاده از امکانات .NET در Crystal Report پاسخ به سوالات تگهای فارسی: محمد صافدل، سی شارپ، سي شارپ، وبلاگ سی شارپ، کریستال ریپورت، دات نت، سی شارپ دات نت، تبدیل تاریخ، شمسی به میلادی، میلادی به شمسی
English Tags: Csharp, C sharp, C#, C#.NET, CrystalReport, Crystal Report, PersianCalendar, Persian Date, Shamsi Date, Miladi to Shamsi, CRUFL, Crystal Report User Function Library, System.Globalization, System.Runtime.InteropServices, gacutil, Formula Fields
+
نوشته شده در جمعه شانزدهم آذر 1386ساعت 18:49 توسط ققنوس
|
وراثت :: Inheritance
یکی از مهمترین مباحثی که در برنامه نویسی زبانهای شی گرا (مانند سي شارپ و وي بی دات نت) وجود دارد، وراثت یا Inheritance است. وقتی که ما یک پروژه ویندوزی مانند برنامه Hello World رو شروع می کنیم، محیط برنامه نویسی ویژوال استدیو (Visual Studio .NET Integrated Development Environment) یک تعریف به شکل زیر رو ایجاد می کند: public class Form1 : System.Windows.Forms.Form این تعریف به معنای این است که فرم ایجاد شده فرزند کلاسی به نام Form است. که دارای مفاهیم بسیار قوی است. ما می توانیم اشیایی رو بسازیم و خصوصیات آنها رو تغییر بدهیم. در این صورت رفتار هر شی بصورت خاص همان شی ولی در کل مشابه کلاس اصلی خواهد بود. در زیر مثالهایی برای این موضوع رو می بینید:سازنده ها: (Constructors) همه کلاسها دارای یک سازنده یا Constructor هستند که در زمان ایجاد یک نمونه از کلاس فراخوانی می شوند. سازنده همیشه همنام با نام کلاس است. اگر به کد تولید شده در برنامه Hello world نگاهی بیندازید، کدی مشابه کد زیر را خواهید دید: /// Sample Code 1 زمانی که یک کلاس را تعریف می کنید، باید یک سازنده برای مقداردهی اولیه آن ایجاد نمایید. البته می توانید پارامترهایی رو به اون ارجاع بدید تا مقداردهی آرگومانهای کلاس مطابق آنچه شما مد نظر دارید مقداردهی شوند. اگر شما برای کلاسی که می نویسید سازنده قرار ندهید، یک سازنده بدون آرگومان در حالت مخفی ساخته می شود.public class Form1 { public Form1() //constructor { InitializeComponent(); } } متد InitializeComponent توسط IDE ساخته شده که حاوی دستورات ساخت و جانمایی کنترلها روی صفحه است. اگر احتیاج به مقداردهی و یا اجرای دستورات خاص دیگری باشد، من یک متد دیگر معمولا به نام Init ایجاد می کنم و دستورات مورد نظر را در آن قرار می دهم. این متد پس از فراخوانی InitializeComponent فراخوانی می شود: /// Sample Code 2 public Form1() //constructor { InitializeComponent(); Init(); } private void Init() { pi=3.141259f; //set initial value of pi } رسم و گرافیک در سی شارپ [این مطلب در خصوص وراثت آمده و در بخش های بعدی مطلب گرافیک بصورت مجزا مورد بحث قرار خواهد گرفت] در اولین مثال ما یک برنامه گرافیکی داریم که دارای یک PictureBox است و می خواهیم که یک خط در آن رسم کنیم، در سی شارپ، رسم محتویات پنجره به عهده سیستم ویندوز خواهد بود در زمان این اتفاق رویداد Paint مورد استفاده قرار می گیرد. پس می توانیم کد مورد نظر خود را در این رویداد بنویسیم تا در زمان فراخونی رویداد Paint شکل مورد نظر ما نیز رسم شود. (رویداد paint در زمانهایی مثل تغییر سایز، رسم مجدد، مخفی شدن قسمتی از پنجره اتقاق می افتد) برای این منظور یک کنترل PictureBox روی فرم قرار داده شده. یک رویداد Paint به کنترل تصویر اضافه کرده، کدی مانند کد زیر ایجاد می شود: private void pic_Paint(object sender, PaintEventArgs e) همچنین کد زیر در متد InitializeComponents قرار می گیرد:{ } this.pic.Paint += new PaintEventHandler(this.pic_Paint); شی PaintEventArgs توسط روتینهای سیستمی سطح پایین پاس داده می شود. برای رسم یک شی ابتدا باید یک شی Pen ایجاد نمایید، رنگ آن را مشخص نموده و در صورتی که مایل بودید می توانید پهنای آن را مشخص نمایید. در مثال زیر شی Pen با رنگ مشکی و پهنای پیش فرض 1 استفاده شده است:/// Sample Code 3 در این مثال، نشان داده شده که یک قلم در هر بار فراخوانی رویداد Paint ساخته شده. ما می توانیم یک قلم را در سازنده کلاس پنجره Window's Constructor یا در متد Init قرار دهیم و هر بار فقط از آن استفاده نماییم.private void pic_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; //get Graphics surface Pen rpen = new Pen(Color.Black); //create a Pen g.drawLine(rpen, 10,20,70,80); //draw the line } استفاده از وراثت وراثت در سی شارپ این قابلیت را به ما می دهد که یک کلاس از کلاس آماده دیگر مشتق بگیریم. در کلاس جدید مشتق شده ما فقط می توانیم متدهای جدید را اضافه نماییم یا متدهای قبلی را تغییر دهیم. بقیه موارد دیگر بصورت خودکار از کلاس پایه به کلاس جدید به ارث خواهد رسید. برای دیدن این موضوع من یک کلاس Rectangle ساده می نویسم که یک مستطیل در پنجره رسم خواهد کرد. این کلاس دارای دو متد و یک سازنده است: /// Sample Code 4
namespace CsharpMagic { public class Rectangle { private int x, y, w, h; protected Pen rpen; public Rectangle(int x_, int y_, int w_, int h_) { x = x_; //save coordinates y = y_; w = w_; h = h_; //create a pen rpen = new Pen(Color.Black); } //-------------------------- public void draw(Graphics g) { //draw the rectangle g.DrawRectangle (rpen, x, y, w, h); } } } تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، برنامه نویسی، وراثت، شی گرا، کلاس، شی، سازنده، کد نمونه، مقداردهی اولیه، رسم و گزافیک، رویداد، شی قلم
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Programming, Inheritance, Object Oriented (OO), Class, Object, Instance, Sample Code, Initialize, Darwing and Graphics, Event, Pen Object, PaintEventArgs, Underlying System
+
نوشته شده در پنجشنبه بیست و چهارم آبان 1386ساعت 20:25 توسط کنستانتین
|
تولد سی شارپ بلاگ
سلام آبان ماه، ماه تولد وبلاگ جادوی سی شارپ هست. به همین مناسبت یک سری کتاب الکترونیکی بسیار جذاب و مفید براتون انتخاب کردیم و در سایت قرار دادیم که بتونید از اونها استفاده ببرید. این کتابها در دو قالب تک فایلی و یک مجموعه تکه تکه شده (15 قسمتی از نوع rar) ارائه شده تا هر کسی با هر روشی که می تونه آنها رو دانلود کنه. Welcome to csharpblog. دریافت کتابهای الکترونیکی به صورت فایلی
This month (persian calendar) is a birth month of our weblog (CSharpMagic) and we have a gifts for you ;-). You can download many ebook from here. two collection is collected for two type user: 1- You can download the first collection by selecting a book that you need. 2- Or you can download all ebooks from one package in 15 piece of [.rar] files.
دریافت کتابهای الکترونیکی به صورت یک فایل چند قسمتی حجم هر فایل 7mb است تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، برنامه نویسی، کتاب الکترونیکی، بانک اطلاعاتی، طراحی وب سایت، آژاکس، وب سرویس، دات نت نوک، کتابهای رایگان در زمینه کامپیوتر
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Programming, ADO.NET, XML,XML Poster, ASP.NET, Security, Distributed .NET, SQL Server 2005, Ajax, Web 2.0, Web Services, Dot Net Nuke,.Net Nuke, C# ebook, C shap ebook, book, rapidshare, Computer EBook, Wrox, OReilly, Secure Web, APress, Database programming, McGraw-Hill, Atlas, ASP.NET Ajax, Design Pattern, Sybex, Portal, rapidshare.com, Free Ebook
+
نوشته شده در چهارشنبه شانزدهم آبان 1386ساعت 16:25 توسط کنستانتین
|
سلام
اول این خبرو به همه دوستان بدم که این ماه، ماه تولد CsharpBlog است. هدیه هاتونو بفرستید بیاد. تو این یه سال من و دوستان خوبم سعی داشتیم که یاد بدیم تا یاد بگیریم چون معتقدیم که تا کسی یاد نده یاد نمی گیره. به مناسبت هدیه تولد CsharpBlog یه مقاله نسبتا جامع در زمینه برنامه نویسی GDI+ در C# تهیه کردم که امیدوارم خوشتون بیاد. در مورد سوالات مطرح شده در بخش نظرات هم چشم سعی می کنم بزودی جواب اونا رو بدم. هرچند که می دونم تا حالا کسایی که سوال پرسیدن همه جوابشو پیدا کردن ولی جوابا رو می نویسم شاید به درد بقیه دوستان بخوره. مشخصات مقاله اینه: عنوان مقاله: آشنایی با گرافیک در .NET(GDI+) سرفصلها: ترسیمات گرافیکی در .NET : آشنایی با کلاس Graphics رنگها در .NET : آشنایی با ساختمان داده Color و SystemColors برسها و قلم ها: آشنایی با کلاسهای Brush و Pen سرپوش خطوط: ساخت خطوطی با سرپوشهای خاص (Line Caps) قلم مرکب: ساخت قلمی که از ترکیب قلم های دیگر بدست می آید (Compound Pen) فونت و رسم متن در .NET : آشنایی با کلاسهای Font و FontFamily ، اندازه گیری متون ، نوشتن متن بصورت عمودی، نمایش متن با استفاده از Brush، تنظیم موقعیت متن تصاویر: آشنایی با کلاسهای Bitmap و Image و MetaFile، فرمتهای تصویری پشتیبانی شده در GDI+، نمایش تصویر، تغییر در تصاویر شامل برش زدن (Cropping) و رسم اریب تصاویر (Skewing) و بازتاب تصویر (Image Reflection) و چرخش تصویر (Rotating) و ساخت Thumbnail ترسیم درون تصویر نمایش انیمیشن این مقاله برای آشنایی با گرافیک در .NET نوشته شده. زبان مورد استفاده با توجه به عنوان وبلاگ C# در نظر گرفته شده ولی قاعدتا با کمی حوصله می تونید کدهای نوشته شده رو به VB.NET تبدیل کنید. می خواستم خودم این کارو بکنم ولی متاسفانه وقت نشد. این مقاله رو می تونید از آدرس زیر دانلود کنید: تگهای فارسی:محمد صافدل - ققنوس - سی شارپ - گرافیک - دات نت – برنامه نویسی گرافیک English Tags: Mohammad Safdel, Csharp, C sharp, C#, Graphics , .NET , Graphic Programming , GDI+ , DrawRectangle, DrawPie, SystemColors , FromArgb , solidBrush , FillPie , PathGradientBrush , LinearGradientBrush , HatchBrush , FillRectangle , Pens , Brushes , LineCap , Compound Pen , CompoundArray , FontFamily , FontStyle , Font , DrawString , MeasureString , DirectionVertical , StringFormatFlags , Bitmap , Image , Metafile , Scaling , Cropping , Skewing , Reflection , Rotating , Thumbnail , GetThumbnailImage , GetThumbnailImageAbort , ImageAnimator
+
نوشته شده در شنبه دوازدهم آبان 1386ساعت 19:6 توسط ققنوس
|
سلام
ادامه مطلب استفاده از کلاسها و اشیا در سی شارپ لازم به ذکر هست که این قسمتها، مربوط به مطالب پایه ای کلاسها و اشیا هستند و بعدا در قسمتهایی بصورت مفصل راجع به کلاسها و اشیا صحبت خواهد شد. استفاده از کلاس برای قالب دهی و تبدیل خیلی وقتها از متدها برای تبدیل نوعهای مختلف داده و قالب دهی آنها استفاده می شود. البته از کلاسها برای مخفی سازی جزییات تبدیل نیز استفاده می شود. برای مثال، ممکنه شما برنامه ای طراحی کرده باشید که یک مقدار ساعت رو به شکل عدد از ورودی بگیرد. 0321.53 03:21:53 به عنوان تمرین پیاده سازی این کلاس ساده به عهده شما است. استفاده از کلاس به جای شی تفاوت عمده بین زبانهای روالی و زبانهای شی گرا، حضور کلاس است. در مثال قبل (اینجا) نمونه ای از یک کلاس رو دیدید که دارای دو نوع متد خصوصی و عمومی بود که هر کدام می تونستند دارای داده هم باشند. کلاسها به شکل منحصربفرد ولی با نمونه های بیشماری به عنوان اشیا در برنامه می تواند حضور داشته باشد که هر نمونه دارای یک مجموعه مستقل از داده است. کلاسها و خصوصیات (Class and Properties) کلاسها در سی شارپ می توانند حاوی خصوصیات باشند که هر خصوصیت می تواند از هر نوع داده ای که در سی شارپ موجود است تعریف شده باشد. در مثال زیر ما یک کلاس داریم که دارای دو متد (برای تعیین کردن و گرفتن مقدار) و یک خصوصیت است: /// LIST 1 دقت کنید که در تعریف خصوصیات از پرانتز استفاده نمی شود و از کلمه value برای داده ذخیره شده استفاده می شود.private int mAge; //age property public int age { get { return mAge; } set { mAge = value; }} استفاده از شرط در تعیین داده های کلاس یک کلاس محل مناسبی برای کپسوله سازی خطاها است. برای مثال ممکن است کاربر برای یک داده از نوع عدد صحیح که در کلاس تعریف شده قرار است ساعت را نکهداری کند، شرط تعیین زمانهای مجاز مطرح می شود: ساعت 0 تا ساعت 23. در صورتی که عددی بزرگتر یا کوچکتر از محدوده مورد نظر به کلاس داده شود، می توان رفتارهای مختلفی را براساس تعاریف برنامه انجام داد. در مثال زیر در صورتی که عدد ورودی برای ساعت نامتعبر باشد، مقدار 0 به عنوان عدد معتبر پذیرفته می شود. /// LIST 2 public int setHour(int hour) { if (hour > 23 || hour < 0) mHour = 0; else mHour = hour; } مقداردهی اولیه به متغیرها و پارمترهای مورد نیاز در کلاس برای تعیین مقادیر پیش فرض برای پارامترهای موجود در یک کلاس و مقداردهی اولیه به آنها از سازنده کلاس استفاده می شود. همانطور که قبلا اشاره شد، سازنده کلاس یک متد بدون خروجی است. /// LIST 3 public FormatTime(string entry) { errflag = false; } تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، کلاس، شی، عمومی، خصوصی، متد، برنامه نویسی، کد نمونه، سازنده، نمونه شی
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Class, Object, Public, Private, Method, Programming, Sample Code, Source Code, Constructor, Instance
+
نوشته شده در یکشنبه بیست و نهم مهر 1386ساعت 19:17 توسط کنستانتین
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


