تبليغاتX
جادوي سي شارپ
اگه تا حالا حرفه ای ها رو تو کا ر با نرم افزارهای مختلف دیده باشید متوجه شدید که همشون موقع کار با نرم افزار مورد نظرشون از صفحه کلید زیاد استفاده می کنن مثل همین دوست عزیزم مهدی وقتی که داره با Photoshop کار می کنه و یا احمدرضا وقتی داره با Visual Studio کار می کنه (احتمال میدم کامپیوتر شخصی خودش ماوس نداشته باشه چون نیازی بهش نداره). تو این پست تصمیم گرفتم در راستای هرچه حرفه ای تر شدن لیستی از کلیدهای میانبری که توی VS2008 زیاد مورد استفاده قرار می گیرن معرفی کنم.

توضیح کلیدهای میانبر
تبدیل متن انتخاب شده به Comment Ctrl+K,Ctrl+C
خارج کردن متن انتخاب شده از حالت Comment Crtl+K, Crtl+U
انتقال اشاره گر به خط مورد نظر با استفاده از شماره خط Ctrl+G
نمایش پنجره Properties F4
جابجایی در پنجره کد و پنجره طراحی F7
حرکت در بین Tab ها Ctrl+Tab
حذف خط جاری Ctrl+L
اضافه کردن یک آیتم جدید به پروژه Ctrl+Shift+A
بستن Tab جاری Ctrl+F4
ایجاد و یا حذف Breakpoint F9
نمایش Tab جاری بصورت تمام صفحه و بالعکس Shift+Alt+Enter
تنظیم فرمت متن انتخاب شده Ctrl+K, Ctrl+D
کمپایل همه Solution Ctrl+Shift+B


+ نوشته شده در  چهارشنبه هشتم آبان 1387ساعت 20:54  توسط ققنوس  | 
فرض کنید که تو برنامتون یه enum دارید که شامل برندهای موبایله و کابر باید نام برند مورد نظرشو وارد کنه و شما بر اساس اون واکنش نشون بدید.

enum MobileBrands : short
{
Nokia,
SonyEricson,
HTC
};


در این صورت برای تبدیل رشته ورودی به enum از چه روشی استفاده می کنید؟ اگه رشته ورودی را مستقیما بخواهید توی متغیری از جنس enum بریزید (مثل کد زیر)

static void Main(string[] args)
{
MobileBrands brands;
string brandName = Console.ReadLine();
brands=brandName;
}


خطای زیر اتفاق میفته:

Cannot implicitly convert type 'string' to 'EnumConvert.MobileBrands'

راه دوم اینه که با استفاده از switch متغیر مورد نظر را مقداردهی کنیم:

static void Main(string[] args)
{
MobileBrands brands;
string brandName = Console.ReadLine();
switch(brandName)
{
case "HTC":
brands=MobileBrands.HTC;
break;
case "Nokia":
brands=MobileBrands.Nokia;
break;
case "SonyErricson":
brands=MobileBrands.SonyErricson;
break;
}
}


اما راه سوم و ساده ترین راه استفاده از متد Enum.Parse است. به مثال زیر توجه کنید:

static void Main(string[] args)
{
MobileBrands brands;
string brandName = Console.ReadLine();
brands = (MobileBrands)Enum.Parse(typeof(MobileBrands), brandName);
}


اگه روش سوم را با Generic ادغام کنیم می تونیم متدی بنویسیم که هر رشته ای را به enum مورد نظر تبدیل کنه:

public static T StringToEnum(string paranName)
{
return (T)Enum.Parse(typeof(T), paranName);
}


به نحوه استفاده از این متد توجه کنید:

static void Main(string[] args)
{
MobileBrands brands;
string brandName = Console.ReadLine();
brands=StringToEnum(brandName);
}


+ نوشته شده در  شنبه نهم شهریور 1387ساعت 0:15  توسط ققنوس  | 
پاسخ به نظرات
یاسمن عزیز در مورد یه قطعه کد C# توضیح خواستن که توضیحش اینه:
خط 1: آرایه ای از نوع Point گرفته به تعداد 10 تا
خط 2: یک شی از نوع Point گرفته
خط 3: CopyTo محتوای شی Tn2 را در Tn1 کپی می کند. توجه کنید به این نکته که اگه دوشی را با استفاده از علامت = برابر همدیگه قرار بدید آدرس اون اشیا باهم یکی میشه یعنی واقعا اون دو شی باهم یکی میشن نه اینکه باهم برابر می شن!
خط 4و5و6: از Convert.Toint32 برای تبدیل به اعداد int 32 بیتی استفاده میشه و از Convert.ToSingle برای تبدیل به اعداد اعشاری استفاده میشه.
پیشنهاد می کنم مقاله گرافیک در .NET را مطالعه کنید.

پیشنهاد تبدیل مطالب به PDF هم پیشنهاد خوبیه که از طرف آقای مجید مهرتاش ارائه شده. البته ما قبلا هم این کار را انجام دادیم و تعدادی از مقالات را بصورت PDF برای دانلود گذاشتیم. مطالب جدیدی هم که مهدی جان دارن می نویسن به محض تمام شدن به صورت یکجا بصورت PDF تبدیل می کنیم.

مجیدجان برای این کار باید از Hook یا Subclass استفاده کنی. اون سایتها و وبلاگها هم حق داشتن چون این مبحث گسترده و پیچیده است. تازه اگه بخوای از این دو روش استفاده کنی کد شما Unmanaged میشه. ولی اگه بازم می خوای پیگیری کنی یه پروژه توی Codeproject هست که یه Library برای استفاده از Hook و Subclass در .NET ارائه داده. زحمت جستجوش با خودت!



DebuggerStepThrough
نکته جالبی که به تازگی بهش برخوردم یه Attribute به نام DebuggerStepThrough است. حتما تا حالا با این مشکل مواجه شدید که در حال Debug بصورت خط به خط (با استفاده از کلید F11) کنترل اجرای برنامه برای مقداردهی Property ها و یا خواندن مقدار اونا دائما وارد کد اونها یا همون Property Accessor ها میشه که این مسئله باعث میشه تا زمان زیادی برای Debug کدتون هدر بره. در وهله اول به راحتی می تونید با استفاده از کلید F10 این مشکلو برطرف کنید! اما در بیشتر مواقع نوع کد باعث میشه که نتونید این کار را انجام بدید! به مثال زیر توجه کنید:
کلاس Person دارای سه Property به نامهای PersonName و Grade و Salary است. متد CalculateSalary برای محاسبه حقوق بر اساس درجه کارمند و حقوق پایه استفاده می شود. اگر کد فراخوانی متد CalculateSalary شما به شکل زیر باشه:

calcSalary=CalculateSalary(p.Grade, p.Salary);

در اینجا اگه با کلید F10 بخواید تو کدتون حرکت کنید نمی تونید کد متد CalculateSalary را قدم به قدم مشاهده کنید اگه با کلید F11 حرکت کنید کد مربوط به Proprty های Grade و Salary را هم باید قدم به قدم مشاهده کنید. برای جلوگیری از این حالت DebuggerStepThrough را باید برای Property های مورد نظر استفاده کنید. به عنوان مثال تعریف Grade و Salary به شکل زیر نوشته خواهد شد:
public int Grade
{
[DebuggerStepThrough]
get { return _grade; }
[DebuggerStepThrough]
set { _grade = value; }
}

public int Salary
{
[DebuggerStepThrough]
get { return _salary; }
[DebuggerStepThrough]
set { _salary = value; }
}



از این Attribute می تونید برای متدها، Property Accessor ها، کلاسها و structها استفاده کنید.

 



تگهای فارسی: محمد صافدل، سی شارپ، سي شارپ، دیباگ
English Tags: Mohammad Safdel,Csharp, C sharp, C#, Debug, DebuggerStepThrough, Attribute
+ نوشته شده در  یکشنبه بیست و هفتم مرداد 1387ساعت 13:18  توسط ققنوس  | 
هدیه کریسمس امسال مایکروسافت برای برنامه نویسا نسخه جدید 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 اضافه شده بهش که عبارتند از :
  • WWF یا به اختصار WF Windows Workflow Foundation: در مورد WF قبلا در همین وبلاگ یه مقاله نوشتم که برای آشنایی با WF می تونید به اون مراجعه کنید.
  • WPF (Windows Presentation Foundation): WPF امکانات گرافیکی برای طراحی UI در اختیار شما قرار میده. WPF در زمینه طراحی UI برنامه های ویندوز یه ایده کاملا جدیده و قبل از این چنین ابزاری وجود نداشته. با استفاده از WPF شما می تونید برنامه هایی با ظاهر کاملا متفاوت و بصورت دو بعدی و سه بعدی طراحی کنید. طراحی فرمها در WPF مبتنی بر زبان جدیدی به نام XAML است.
  • (WCF (Windows Communication Foundation:
  • CardSpace
  • ASP.NET AJAX: یه Library برای استفاده بهتر و ساده تر Ajax در ASP.NET که حالا با خود .NET یکپارچه شده. مایکروسافت نسخه بتای اونو Atlas نامگذاری کرده بود.
  • SilverLight: یه Library کاملا جدید و جذاب برای طراحان وب. به زبون ساده SilverLight یعنی استفاده از امکانات WPF در طراحی صفحات وب. اگه بخواید دقیقتر بشید میشه گفت همون کاریه که Flash می کنه ولی با این تفاوت که طراحی UI با استفاده از WPF انجام میشه و کدنویسی با استفاده از VB.NET یا C# و این برای برنامه نویسای وب یعنی هلو!

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 اضافه شده که فقط از شنیدن اسم اونا مو به تنتون سیخ میشه. بعضی از این تغییرات مهم عبارتند از:

  • Automatic Properties
  • Relaxed Delegates
  • Object Initialisers
  • Type Inference
  • Anonymous Types
  • Extension Methods
  • Lambdas
  • Partial Methods

در مورد این امکانات کسی سوال نکنه که خودمم تازه دارم مطالعشون می کنم! نکته مهم و جالب دیگه اینه که شما می تونید از امکانات جدید زبانهای #C و VB.NET توی پروژه های .NET 2.0 که قبلا نوشتید استفاده کنید. بزودی تو همین وبلاگ در مورد این امکانات بیشتر صحبت می کنیم.

16- پشتیبانی کامل و امکانات جدید برای برنامه نویسایی که با Office 2007 سرو کار دارن مثل طراحی فرم برای Outlook، کنترل محتوای Word و بسیاری چیزهای دیگه.

17- یکی از امکانات ویژه ای که توی VS2008 اضافه شده امکان استفاده Debug در داخل متدهای .NET Framework است. یعنی با این امکان جدید .NET به یک پلتفرم نیمه Open Source برنامه نویسی تبدیل شده (مایکروسافت برای این منظور یه Licence جدید ثبت کرده و دسترسی به سورسهای .NET از این طریق تحت این Licence انجام میشه).

18- امکانات برنامه نوسی و تولید کد بهتر برای اجرا در ویندوز ویستا

19- استفاده تجاری: تا قبل از این نمی تونستید از نسخه های Trial و یا Express Edition برای مقاصد تجاری استفاده کنید. اما شما می تونید از VS2008 Trial برای مقاصد تجاری هم استفاده کنید. این کار از طریق Popfly امکان پذیره. Popfly یه میزبان برای پروژه های VS2008 روی وبه که توانایی Build و توزیع اونا رو با مجوز استفاده تجاری داره. شما می تونید پروژه های تحت وب و یا پروژه هایی که با استفاده از VS2008 Express Edition و یا VS2008 Trail نوشتید توی Popfly کمپایل و توزیع کنید.

20- استفاده از Unit Testing برای توسعه دهندگان موبایل: با این امکان در پروژه های معمولی در VS2005 آشنا هستید. حالا امکان استفاده از Unit Testing رو توی برنامه های موبایل هم دارید.

21- مدیریت امنیتی موبایل: در VS2008 مدیریت امنیت موبایل بسیار ساده تر و خوش دست تر از قبل شده و شما می تونید تنظیمات امنیتی برای ابزار نهایی رو با کلیک کردن یه کلید عوض کنید و به این ترتیب به سرعت برنامتونو در حالات مختلف امنیتی تست کنید.

22- مدیریت شبیه ساز (Emulator): مدیریت شبیه ساز برای اولین بار تو VS2005 عرضه شده. استفاده از این ابزار مشاهده و اجرای Image های موجود تو شبیه سازها در ماشین شما رو آسونتر می کنه. در مدیر شبیه ساز موجود تو VS2008 می تونید از راههای کاملا اتوماتیک استفاده کنید به این معنی که شما می تونید با نوشتن یه کد یا اسکریپت ساده و اجرای اون با استفاده از Unit Test ها یکی پس از دیگری به همه شبیه سازهای موجود در دستگاهتون متصل بشید و بعد از انجام کار مورد نظرتون اتصال رو قطع کنید. یکی دیگه از امکانات توسعه یافته در مدیر شبیه ساز اینه که اتصال به Image های شبیه ساز رو آسون می کنه. با استفاده از این امکان جدید شما می تونید تنظیمات هر شبیه ساز رو توی یه فایل XML ساده که توی فولدر My Device Emulator قرار می گیره ذخیره کنید.

23- توسعه شبیه ساز ابزار: ضمن رفع نواقص و بهینه سازی نسخه 1.0 حالا شبیه ساز موجود در VS2008 که با Windows Mobile 6.0 SDK عرضه شده تواناییهای بیشتری داره که از مهمتریناش میشه به این موارد اشاره کرد: باطری، بلندگوها، هدست، کیت اتوموبیل.

24- بسترهای پشتیبانی شده برای موبایل: در VS2008 برای برنامه نویسی موبایل انتخابهای مختلفی برای پلتفرم و نوع Windows Mobile و زبان و نوع برنامه نویسی دارید. Pocket PC 2003، Smart Phone 2003، Windows Mobile 5.0 SDK، Windows Mobile 6.0 SDK(آخرین نسخه اونو باید خودتون از سایت مایکروسافت دانلود و نصب کنید) پلتفرهایی هستن که VS2008 پشتیبانی می کنه. در VS2008 برای پلتفرم Smart Phone 2003 فقط می تونید بصورت Native برنامه نویسی کنید و .NET CF 1.0 هم پشتیبانی نمیشه. اگه شما پروژه ای از این نوع دارید باید با استفاده از VS2008 اونو به پلتفرم Windows Mobile 5.0 SDK و .NET CF 2.0 ارتقا بدید.

منبع: وبلاگهای MSDN

تگهای فارسی:محمد صافدل، سی شارپ، سي شارپ، وبلاگ سی شارپ، دات نت، سی شارپ دات نت، امکانات جدید دات نت 2008، امکانات جدید سی شارپ 3، امکانات جدید برنامه نویسی، سی شارپ 3.0، سی شارپ 2008، ویژوال استدیو 2008

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  توسط ققنوس  | 
سلام به همه دوستان
هفته پیش توی یکی از پروژه ها مجبور شدیم از Crystal Report استفاده کنیم. توی استفاده از Crystal Report به یه مشکل خاصی برخوردیم که با راهنمایی دو تا از دوستان عزیزم یعنی محمد امین تقدسی و MSDN ، این مشکلو برطرف کردیم. مشکل مربوط می شد به نحوه تبدیل تاریخ میلادی به شمسی در Crystal Report که برای این کار از CRUFL استفاده کردیم. برای آشنایی با CRUFL می تونید مقاله این پست رو دانلود کنید و بخونید. تا یادم نرفته منبع این مقاله MSDN بود که متاسفانه یادم رفت تو خود PDF اینو بگم. در این مقاله فرض شده که برنامه نویس با Crystal Report آشنایی کافی داره. این مقاله رو می تونید از آدرس زیر دانلود کنید:
استفاده از امکانات .NET در Crystal Report

پاسخ به سوالات
شیطونک عزیز در مورد نحوه برنامه نویسی KeyLogger سوال پرسیده بودن که باید بگم به دلیل ذیق وقت! فقط توضیحاتی در مورد اون میگم. KeyLogger ها جزو برنامه های LowLevel در سیستم عامل ویندوز هستن. در این برنامه ها کلیه کلیدهایی که کاربر در هر پنجره ای تایپ می کنه ثبت می شه. برای این کار نمی تونید از ابزارها و رویدادهای عادی در سطح زبانهای برنامه نویسی استفاده کنید. شما باید یه پروسس سفارشی رو به داخل سلسله پروسسهای مربوط به رویدادهای صفحه کلید در ویندوز تزریق کنید. در این حالت کلیدهای فشار داده شده ابتدا به پروسس شما فرستاده میشن و شما می تونید اونا رو ثبت کنید و بعد این شما هستید که باید کلید فشار داده شده را به پروسسهای بعدی بفرستید. به این سلسله اعمال Hook می گن. یادمه یه Library فوق العاده در زمینه Hook در C# تو سایت CodeProject بود که اگه کمی جستجو کنی حتما پیداش می کنی. مهدی عزیز هم از ما معرفی Component می خواستن که چشم بزودی یه سری از Component های مشهور و رایجو معرفی می کنیم.

تگهای فارسی: محمد صافدل، سی شارپ، سي شارپ، وبلاگ سی شارپ، کریستال ریپورت، دات نت، سی شارپ دات نت، تبدیل تاریخ، شمسی به میلادی، میلادی به شمسی
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  توسط ققنوس  | 
سلام
اول این خبرو به همه دوستان بدم که این ماه، ماه تولد 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 تبدیل کنید. می خواستم خودم این کارو بکنم ولی متاسفانه وقت نشد.
این مقاله رو می تونید از آدرس زیر دانلود کنید:

راهنمای گرافیک در .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  توسط ققنوس  | 

پاسخ به سوالات:


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

System.Diagnostics.Process.Start("Calc.exe");

  • برای دسترسی به یک شی توی یه Form دیگه می تونی خاصیت Modifiers اونو به Public مقداردهی کنید.
  • متاسفانه وجود نداشتن فایل راهنما هیچ Exceptionی تولید نمی کنه. برای اطمینان از وجود فایل Help در مسیر مربوطه می تونید از کد زیر استفاده کنید:

try
{
     if (System.IO.File.Exists(strPath))
          Help.ShowHelp(this, strPath);
     else
          throw new System.IO.FileNotFoundException();
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
}


آقای محمدی عزیز لطفا در مورد سوالتون بیشتر توضیح بدید. در حالت عادی یا با استفاده از Reflection؟

گرافیک در .NET – رنگها
خیلی سریع میریم سر اصل موضوع.
رنگها در .NET از ساختمان داده Color استفاده می کنن. در سیستم RGB هر رنگ با 4 مولفه شناخته می شود که عبارتند از: A و R و G و B
A:میزان شفافیت رنگ را مشخصص می کند
R:مولفه رنگ قرمز
G:مولفه رنگ سبز
B:مولفه رنگ آبی

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

btnColorTest.BackColor = Color.Aqua;

لیست این رنگها و نامهای اونا رو در شکل زیر می بینید: (این شکلها رو از سایت BobPowel.Net کش رفتم)


یه سری دیگه از رنگها هستن که به رنگهای سیستمی معروفند. اینها رنگهایی هستن که در سیستم عامل استفاده شدن مثل رنگ کلیدها، رنگ Border ها و .... برای استفاده از این رنگها باید از کلاس SystemColors استفاده کنیم. این رنگها هم با استفاده از نام آنها قابل دسترسی هستن. به مثال زیر توجه کنید:

btnColorTest.ForeColor = SystemColors.InactiveBorder;

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


ساختمان داده Color یه متد خیلی مهم داره به نام FromArgb که با استفاده از اون می تونید رنگ دلخواهتونو بسازید. این متد حالتهای مختلفی داره. پارامترهای مهم اون عبارتند از : میزان Alpha و مولفه های RGB.

مثال: در مثال زیر 100 شکل که مشخصات هر کدام بصورت تصادفی انتخاب میشن رسم میشه:

private void frmMain_Paint(object sender, PaintEventArgs e)
{
     Random rnd = new Random();
     Graphics gr=e.Graphics;
     Point[] points=new Point[5];
     points[0].X = rnd.Next(this.ClientRectangle.Width);
     points[0].Y = rnd.Next(this.ClientRectangle.Height);
     points[1].X = rnd.Next(this.ClientRectangle.Width);
     points[1].Y = rnd.Next(this.ClientRectangle.Height); 
     points[2].X = rnd.Next(this.ClientRectangle.Width);
     points[2].Y = rnd.Next(this.ClientRectangle.Height); 
     points[3].X = rnd.Next(this.ClientRectangle.Width);
     points[3].Y = rnd.Next(this.ClientRectangle.Height); 
     points[4].X = rnd.Next(this.ClientRectangle.Width);
     points[4].Y = rnd.Next(this.ClientRectangle.Height); 

     for (int i = 0; i < 100;i++) 
     { 
          SolidBrush solidBrush=new SolidBrush(Color.FromArgb(rnd.Next(255),
               rnd.Next(255),
               rnd.Next(255),
               rnd.Next(255)));
          int shapeCode=rnd.Next(3); 
          switch(shapeCode) 
          { 
               case 0: //Draw Rectangle 
                    gr.FillRectangle(solidBrush,
                         rnd.Next(this.ClientRectangle.Width), 
                         rnd.Next(this.ClientRectangle.Height), 
                         rnd.Next(this.ClientRectangle.Width),
                         rnd.Next(this.ClientRectangle.Height)); 
                    break; 
               case 1: 
                    gr.FillEllipse(solidBrush,
                         rnd.Next(this.ClientRectangle.Width), 
                         rnd.Next(this.ClientRectangle.Height), 
                         rnd.Next(this.ClientRectangle.Width),
                         rnd.Next(this.ClientRectangle.Height)); 
                    break; 
               case 2: 
                    gr.FillPie(solidBrush, 
                         rnd.Next(this.ClientRectangle.Width),
                         rnd.Next(this.ClientRectangle.Height), 
                         rnd.Next(this.ClientRectangle.Width), 
                         rnd.Next(this.ClientRectangle.Height),
                         rnd.Next(180),rnd.Next(180)); 
                    break; 
               case 3: 
                    gr.FillPolygon(solidBrush,points);
                    break; 
          } 
          solidBrush.Dispose(); 
     }
}


البته ما در مورد Brush هنوز هیچ صحبتی نکردیم و بحث در مورد اونو به آینده موکول می کنیم. در مورد رنگها در .NET تنها نکته ای که میمونه اینه که بعضی از متدهای مورد استفاده در GDI+ رنگ یک نقطه را بصورت GBR یا GRB (دقیقا یادم نیست) به شما می دهند که بعضی وقتا این ممکنه کمی حالتونو بگیره. موقعش که شد در مورد این متدها صحبت خواهیم کرد.

منابع:
  • http://www.BobPowel.net
  • Pro .NET 2.0 Graphics Programming - by Eric White
  • + نوشته شده در  سه شنبه بیستم شهریور 1386ساعت 19:57  توسط ققنوس  | 
    پاسخ به سولات
    عمار عزیز از لطف شما ممنونیم. ما همه سعی خودمونو می کنیم که سر وقت Update کنیم ولی گرفتاریها اجازه نمیده.
    به همه دوستان علاقمند به پردازش تصاویر (Image Proccessing) پیشنهاد می کنم حتما این مقاله و سورس مربوط به اونو مطالعه کنن:

    http://www.codeproject.com/cs/media/Image_Processing_Lab.asp



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

    * Color filters (grayscale, sepia, invert, rotate, channel extraction, channel replacing, channel filtering, color filtering, Euclidean color filtering)
    * HSL filters (linear correction, brightness, contrast, saturation, hue modifier, HSL filtering)
    * YCbCr filters (linear correction, YCbCr filtering, channel extraction/replacement)
    * Binarization filters (threshold, threshold with carry, ordered dithering, Bayer dithering, Floyd-Steinberg, Burkes, Jarvis-Judice-Ninke, Sierra, Stevenson-Arce, Stucki dithering methods)
    * Automatic binarization (simple image statistics)
    * Mathematical morphology filters (erosion, dilatation, opening, closing, hit & miss, thinning, thickening)
    * Convolution filters (mean, blur, sharpen, edges, Gaussian)
    * 2 Source filters (merge, intersect, add, subtract, difference, move towards, morph)
    * Edge detectors (homogeneity, difference, sobel, canny)
    * Blob counter, Connected components labeling
    * Pixellate, Simple skeletonization, Jitter, Shrink, Oil painting
    * Levels linear filter, gamma correction
    * Median filter, Adaptive smoothing, Conservative smoothing
    * Resize and Rotate
    * Texture generators based on Perlin noise
    * Texture filters (texturer, textured filtering, textured merging)
    * Fourier transformation (lowpass and hipass filters).


    احتمالا این بخش اول از سری مقالات گرافیک در .NET خواهد بود.

    GDI+
    GDI+ در اصل به کتابخانه کلاسهایی میگن که در ویندوز XP و بعد از اون برای گرافیک عرضه شد. این کتابخانه بصورت Unmanaged نوشته شده. در .NET برای ترسیمات گرافیکی، یک لایه بالاتر (Wrapper) برای اون ساختن (همون System.Drawing).

    ترسیمات گرافیکی در .NET
    در .NET برای همه ترسیمات گرافیکی باید از کلاس Graphics استفاده کنید. این کلاس مثل بوم نقاشی شماست (قابل توجه اونایی که اهل هنر نیستن: بوم نقاشی همون تخته ایه که سه پایه داره و تو فیلما می بینید که با قلم مو روش نقاشی می کنن).
    مراحل قدم به قدم یک پروژه گرافیکی ساده:
    1- یک پروژه از نوع Windows Application بسازید.
    2- در بخش نمایش کد به گرداننده رویداد (Event Handler) مربوط به Form_Load برید. در واقع این یه نکته انحرافیه و ما اینجا هیچ کاری نداریم چون کدی که در این قسمت نوشته میشه قبل از نمایش فرم اجرا میشه و اگه در این بخش کد مربوط به ترسیمات رو بنویسیم بعد از نمایش فرم پاک میشه مگر اینکه ....
    3- گرداننده رویداد Form_Paint را بیارید و کد زیر رو توش بنویسید:

    private void frmMain_Paint(object sender, PaintEventArgs e)
    {
         Graphics gr = e.Graphics;
         gr.DrawRectangle(Pens.Azure, new Rectangle(5, 5, 100, 100));
    }

    این کد یک چهارضلعی روی فرم رسم می کند. ابتدا شی ای از کلاس Graphics تعریف کردیم. هر رویداد Paint متعلق به هر کلاسی که باشه یک پارامتر از نوع PaintEventArgs برمی گردونه که یکی از خواص اون یک کپی از Graphics همون شی ایه که می خواهیم ترسیماتو روی اون انجام بدیم. بنابراین شی Graphics خودمونو برابر با شی Graphics پارامتر e قرار میدیم.
    شی Graphics متدهای زیادی برای ترسیمات مختلف داره که در اینجا برای رسم یک چهارضلعی از متد DrawRectangle استفاده کردیم. معمولا متدهای شی Graphics هر کدوم چندین حالت دارند که با توجه به نیاز، حالت مورد نظرتونو انتخاب می کنید. فقط یه نکته بگم اونم اینه که اگه می خواید بعدا برنامتونو روی پلتفرم Windows Mobile منتقل کنید حالتهایی از متدها رو انتخاب کنید که در هر دو پشتیبانی میشه.
    در اینجا ما از یک قلم با تنظیمات پیش فرض و رنگ Azure استفاده کردیم. برای اینکه بتونیم شکلمونو با قلم دلخواه رسم کنیم می تونیم مثل مثال زیر عمل کنیم (این کدها رو در ادامه کد قبلی بنویسید) :

         Pen myPen = new Pen(Color.Red, 5);
         gr.DrawPie(myPen, new Rectangle(150, 100, 70, 50), 30, 135);

    در این مثال یه قلم با رنگ قرمز و صخامت 5 تعریف کردیم و بعد با استفاده از این قلم و فراخوانی متد DrawPie بخشی از یک دایره رو رسم کردیم. متد DrawPie برای ترسیم تمام و یا بخشی از یک دایره استفاده میشه.
    + نوشته شده در  شنبه دهم شهریور 1386ساعت 18:45  توسط ققنوس  | 
    تا حالا در مورد استفاده از بانکهای اطلاعاتی در برنامه های ویندوز صحبت کردیم. مبحث رو با استفاده از بانکهای اطلاعاتی در صفحات وب ادامه میدیم. در این مقاله از بانک اطلاعاتی Northwind استفاده می کنیم که بطور پیش فرض در SQL Server وجود داره. اگرم که Northwind نصب نشده و به هر دلیلی اونو تو سیستم ندارید بگید تا SQL اونو براتون تو وبلاگ بذارم تا دانلود کنید. 
    قبل از اینکه ادامه بدم فقط اینو به دوستان بگم که بزودوی ادامه مطالب مربوط به .NET 3 رو ادامه میدم. بعد از دو قسمت که در مورد WF صحبت خواهم کرد سراغ WPF میرم. 


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

    1.  VS2005 را اجرا کنید و از منوی فایل گزینه New\Web Site را انتخاب نمایید تا پنجره New Web Site نمایش داده شود.
    2. در این پنجره ASP.NET Web Site را انتخاب نمایید. Location را روی FileSystem و Language را روی C# تنظیم کنید و سپس کلید OK را کلیک نمایید.
    3. در این مثال برای نمایش اطلاعات از DataGrid استفاده می کنیم. به همین منظور از Toolbox بخش Data گزینه GridView را انتخاب نمایید (در حالت Design) و آن را روی صفحه وب درگ کنید.
    4. روی GridView کلیک راست نموده و گزینه Show Smart Tag را انتخاب نمایید. از منوی نمایش داده شده گزینه Choose Data Source را باز نموده و را انتخاب نمایید. پنجره Data Source Configuration wizard باز می شود.
    5. در پنجره باز شده گزینه Database را انتخاب نمایید. برای DataSource انتخاب شده می توانید ID تعیین کنید. این ID بطور پیش فرض مقدار SqlDataSource1 را دارد. کلید Ok را انتخاب نمایید.
    6. در پنجره بعد کلید New Connection را کلیک کنید. پنجره Add Connection باز می شود.
    7. در این پنجره گزینه Server Name را باز نموده و نام Server مورد نظرتان را انتخاب نمایید. قسمت Select or Enter Database Name را باز نموده و Northwind را انتخاب نمایید. با انتخاب کلید Test Connection می توانید صحت عملیات انجام شده را بررسی کنید. کلید Ok را کلیک نمایید.
    8. در پنجره Configure Data Source کلید Next را کلیک کنید. در صفحه جدید در صورتی که گزینه Yes, Save this connection as انتخاب نشده باشد، آن را انتخاب نمایید. نام پیش فرض برای ConnectionString را قبول نموده و کلید Next را کلیک کنید. با این کار مقدار ConnectionString در فایل Web.Config ذخیره می شود. ذخیره آن در فایل تنظیمات دو مزیت دارد: یکی اینکه امنیت بیشتری دارد. دوم اینکه استفاده از آن در صفحات دیگر به راحتی امکان پذیر است. کلید Next را انتخاب نمایید.
    9. در صفحه بعد گزینه Specify Column from table or view را به حالت انتخاب درآورده و گزینه Name (نام جدول مورد نظر) را روی Customers تنظیم کنید. با این کار فیلدهای جدول انتخاب شده (در اینجا جدول Cusomers) در لیست Columns نمایش داده می شود. از این لیست فیلدهای CusomerID و CompanyName و City را انتخاب کنید. کلید Next را کلیک نمایید.
    10. در صفحه جدید با انتخاب کلید Test Query می توانید از صحت عملیات تا اینجا اطمینان حاصل نمایید. پس از آن کلید Finish را انتخاب نمایید.
    11. در اینجا مرحله اول صفحه وب ما آماده شده است. شما می توانید با اجرای این برنامه صفحه وب و اطلاعات مورد نظرتان را در آن ببینید.
    پس از اجرا خواهید دید که همه اطلاعات از جدول مورد نظر به یکباره در صفحه نمایش داده می شود و این چندان برای یک صفحه وب مناسب نیست. برای این کار می توان از امکانات صفحه بندی موجود در GridView استفاده نمود. برای این کار از منوی Show Smart Tag گزینه Enable Paging را انتخاب نمایید. اجازه دهید تا اینجا هستیم گزینه Enable Sorting را نیز انتخاب کنیم. با انتخاب این گزینه محتویات Gridview بصورت مرتب شده نمایش داده می شود.
    حالا با اجرای برنامه، اطلاعات شما بصورت صفحه بندی شده و مرتب نمایش داده می شود.

    فیلتر کردن اطلاعات
    هدف از این مرحله امکان فیلتر کردن اطلاعات با توجه به شهر مورد نظر کاربر می باشد. بدین منظور باید مراحل زیر را قدم به قدم انجام دهید:

    1. از Toolbox بخش Standard یک عدد TextBox و یک Button روی صفحه قرار دهید. ID مربوط به TextBox را به txtCity و Button را به btnSubmit تغییر دهید. خاصیت Text مربوط به Button را به Submit تغییر دهید.
    2. کنترل SqlDataSource موجود در صفحه را به حالت انتخاب درآورده و از منوی Smart Tag آن گزینه Configure Data Source را انتخاب نمایید.
    3. در پنجره جدید با توجه به انتخاب بودن گزینه NorthwindConnectionString کلید Next را کلیک کنید.
    4. در پنجره جدید کلید WHERE… را انتخاب نمایید. پنجره Add Where Clause نمایش داده می شود. در این پنجره گزینه Column را روی City و Operator را روی = و Source را روی Control قرار دهید. اکنون گزینه ControlID را روی txtCity تنظیم کنید. با این کار در حقیقت تعیین می کنیم که از مقدار کدام کنترل برای شرط WHERE استفاده نماید.
    5. در همان پنجره کلید Add را انتخاب نمایید. تا شرط مورد نظر به لیست شروط اضافه شود. با انتخاب کلید Ok به پنجره Configure Data Source برمی گردیم. در این پنجره کلید Next را کلیک نمایید.
    6. در پنجره Test Query با استفاده از کلید Test Query می توان نتیجه عملیات تا اینجا را مشاهده نمود. با این تفاوت که در اینجا مقدار فیلد مشخص شده در WHERE از شما پرسیده می شود. برای تست می توانید مقدار London را وارد نمایید. پس از انجام تست، کلید Finish را کلیک کنید.
    پس از اجرای برنامه، فقط TextBox و کلید نمایش داده می شوند. نام شهر London را وارد نموده و کلید Submit را کلیک نمایید. خواهید دید که Gridview نمایش داده شده و محتویات آن همه دارای مقدار London در فیلد City خود هستند. همه این کارها بدون نوشتن حتی یک خط کد انجام شد!

    منبع: MSDN
    + نوشته شده در  دوشنبه هجدهم تیر 1386ساعت 22:48  توسط ققنوس  | 
    پیش پست (بجای پیش گفتار):

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

    قسمت اول در مورد معماری و ماهیت و اجزای تشکیل دهنده WF نوشته شده و فقط جنبه تئوری داره ولی از بخشهای بعدی مثالهای عملی با WF رو باهم بررسی می کنیم. برای بخشهای بعد بهتره از الان .NET Framework 3.0 و همینطور Extension های مربوط به WF و WPF رو از سایت مایکروسافت دانلود کنید.

    عمار عزیز احتمالا بعضی از اجزای پروژه بعد از نصب ویندوز در دسترس نیست و بنابراین نمی تونه کمپایلش کنه به هرحال نمیشه ندیده نظر داد. ضمنا پیشنهاد خوبی دادی و اون مثال داره آماده میشه. به محض اینکه آماده شد برای دانلود میذارم. زهرای عزیز ممنونم که به ما سر زدی.

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

    مقدمه:

    همانطور که در مقاله مربوط به .NET Framework 3.0 قبلا گفته شد، یکی از بخشهای تشکیل دهنده .NET 3.0 به WF یا Windows Workflow Foundation نامگذاری شده است. در این مقاله و احتمالا چند مقاله بعد در مورد ماهیت WF و چگونگی استفاده از آن در برنامه نویسی صحبت خواهیم کرد.

    ماهیت WF (Windows Workflow Foundation)

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

    WF به عنوان بخشی از ویندوز Longhorn Server 2007 (بنا به گفته مایکروسافت) عرضه خواهد شد البته در حال حاضر WF به عنوان یکی از چهار بخش کتابخانه WinFX عرضه شده است که برای آشنایی بیشتر می توانید به Windows SDK مربوط به ویندوز Vista مراجعه کنید.

    مقدمات WF (Windows Workflow Foundation)

    دو نوع workflow در WF داریم:

    • Workflow ترتیبی (Sequential Workflow): در این نوع workflow پردازش بصورت بالا به پایین انجام می شود به این معنی که فعالیت از نقطه شروع آغاز و پس از طی مراحل به نقطه پایانی می رسد. این نوع پردازش را می توان به برنامه نویسی Procedural تشبیه کرد.
    • Workflow وضعیتی (State Machine Workflow): این نوع workflow یک مسیر مشخص ندارد بلکه از تعدادی حالت و انتقال بین این حالات تشکیل شده است. Workflow وضعیتی مبتنی بر رویداد (رویدادگرا) می باشد بدین معنی که هر وضعیت با یک رویداد تعیین شده فعال می شود و عملیات از پیش تعیین شده ای را انجام می دهد.


    تعریف Activity

    یک Activity یک عمل در workflow را نشان می دهد. در حقیقت workflow ها از Activity ها تشکیل شده اند. دو نوع Activity داریم:

    • Activity مرکب: این Activity ها برای بیان جریان عملیات و کنترل آن استفاده می شوند (مانند While، For، If-Then-Else، Case)
    • Activity منحصربه فرد: این Activity ها مکانیزمی می باشند برای بیان یک کار تکی که نیاز به اجرا شدن در همان مرحله از workflow را دارد.

    معماری WF

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

    • لایه مدل (Model): جایی است که توسعه دهندگان کدهای مورد نظر برای اجرای یک workflow را می نویسند.
    • لایه زمان اجرا (Runtime): در حقیقت ظاهر اجرایی workflow می باشد و حاوی سرویسهای حیاتی و مورد نیاز آن است.
    • لایه میزبان (Hosting): ارتباطی بین WF و دنیای خارج از آن می باشد و مجموعه ای از سرویسهای مورد نیاز برای پشتیبانی و مدیریت workflow مهیا می کند.
    + نوشته شده در  چهارشنبه شانزدهم خرداد 1386ساعت 11:34  توسط ققنوس  |