امکانات جدید Visual Basic 2010

نویسنده mohammad a, قبل از ظهر 01:09:41 - 11/09/11

« اموزش طراحی یک وب سایت ساده از ابتدا | اموزش پرل از ابتدا تا انتها »

0 اعضا و 1 مهمان درحال دیدن موضوع.

mohammad a

در این فصل سعی بر آن داریم تا ویژگیهای جدیدی که در زبان Visual Basic 2010 ارائه شده است را مورد بررسی قرار دهیم. تغییرات ایجاد شده را میتوان به دو دسته تقسیمبندی نمود:
1- تغییرات ایجاد شده در زبان و کامپایلر Visual Basic
خصوصیات پیادهسازی شده به صورت اتوماتیک (Auto-Implemented Properties)
این ویژگی راه سریعی برای نوشتن خصوصیات کلاسهاست. دیگر لازم نیست برای هر یک از خصوصیتهایی که میخواهید بنویسید، ابتدا یک فیلد private تعریف کنید و سپس قسمتهای get و set مربوط به آن را بنویسید، با استفاده از این ویژگی، کامپایلر Visual Basic به صورت اتوماتیک فیلد خصوصی را به صورت مخفی ایجاد میکند.
مقدار دهنده اولیه مجموعهها (Collection Initializers)
این ویژگی نحو (Syntax) کوتاهتری برای ایجاد یک مجموعه و پر کردن آن با مقادیر اولیه فراهم میکند. این ویژگی برای مواقعی مناسب است که میخواهید یک مجموعه از مقادیر شناخته شده را ایجاد کنید.
ادامه دهنده خط ضمنی (Implicit Line Continuation)
در بسیاری از موارد این ویژگی به شما اجازه میدهد تا ادامه یک عبارت را در خط بعدی بدون استفاده از خط زیر (_) بنویسید. البته برای انجام این کار شرایطی لازم است که در ادامه توضیح داده شده است.
سابروتینها و عبارات لامبدای چند خطی (Multiline Lambda Expression and Subroutines)
در ویرایش جدید اجازه نوشتن عبارات لامبدای چند خطی فراهم شده است.
پارامتر جدید خط فرمان برای تعیین نسخه زبان(New Command-Line Option for Specifying a Language Version) : با استفاده از گزینه /langversion میتوانید کامپایلر را وادار نماید که فقط نحو (Syntax) یک ورژن خاص از Visual Basic را انتخاب کند.
پشتیبانی از انقیاد پویا (Dynamic Support)
Visual Basic از انقیاد پویای اشیاء زبانهای دیگر همانند IronPython و IronRuby پشتیبانی میکند.
2- تغییرات ایجاد شده در محیط توسعه یکپارچه
ویژگی رفتن به (Navigate to)
شما با استفاده از این ویژگی میتوانید یک نشانه یا فایل را داخل کدهای برنامه جستجو کنید. همچنین شما میتوانید یک کلمه کلیدی را داخل یک نشانه با استفاده از Camel casing و کاراکتر خط زیر برای تقسیم نشانه به کلمات کلیدی، جستجو کنید.
برجسته کردن ارجاعات (Highlighting References)
با استفاده از این ویژگی شما میتوانید با کلیک کردن روی یک شناسه، تمام خطوطی را که این شناسه در آن ها بکار رفته است را برجسته کنید. سپس با کلیدهای ترکیبی Ctrl+Shift+Down و Ctrl+Shift+Up در میان آن ها حرکت کنید.
ایجاد از روی استفاده (Generate From Usage)
در این نسخه از Visual Basic شما میتوانید قبل از اینکه کلاس یا عضوی را تعریف کرده باشید، از آن استفاده کنید. سپس پیغام خطای کوچکی روی هر کدام مشاهده خواهید کرد که با کلیک کردن روی آن پیغام، ویژوال استودیو به طور خودکار stub یا پیش تعریف کلاس، متد، خصوصیت، فیلد یا هر چیز دیگری که قبل از تعریف از آن استفاده کرده اید را ایجاد میکند.
مد پیشنهاد هوشمند (IntelliSense Suggestion Mode)
ویرایشگر ویژوال استودیو اکنون به شکل تکمیل و پیشنهاد به صورت هوشمند عمل مینمایید. مد پیشنهاد برای زمانی کاربرد دارد که از کلاسی یا عضوی قبل از تعریف، استفاده شده است.

خصوصیات پیادهسازی شده به صورت اتوماتیک (Auto-Implemented Properties)

این ویژگی شما را قادر میسازد تا به سادگی خصوصیتی را بدون نوشتن کد برای قسمتهای get و set، برای یک کلاس معرفی کنید. زمانی که شما کد مربوط به یک خصوصیت اتوماتیک را مینویسید، کامپایلر Visual Basic به صورت خودکار یک فیلد private برای نگهداری مقدار آن خصوصیت ایجاد کرده و آن را در قسمت get و set خصوصیت استفاده میکند.
به کمک خصوصیات اتوماتیک شما میتوانید یک خصوصیت با مقدار اولیه را در یک خط تعریف کنید. مثال زیر معرفی چهار خصوصیت از این نوع را نشان میدهد.
Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

معرفی یک خصوصیت پیادهسازی شده به صورت اتوماتیک معادل خصوصیتی است که مقدار آنرا در یک فیلد خصوصی ذخیره مینمایید. مثلا کد زیر یک خصوصیت اتوماتیک میباشد:
Property Prop2 As String = "Empty"
این خط کد معادل نوشتن کدهای زیر است:
Private _Prop2 As String = "Empty" Property Prop2 As String Get Return _Prop2 End Get Set(ByVal value As String) _Prop2 = value End Set End Property
برای ایجاد یک خصوصیت با پیادهسازی خودکار تنها کافیست خط عنوان خصوصیت را بنویسید. کامپایلر یک فیلد مخفی با اضافه کردن یک _ به نام خصوصیت که نوشتهاید، ایجاد میکند. به این فیلد Backing Field گفته میشود. به طور مثال اگر خصوصیتی با نام Name را به این صورت نوشتهاید، کامپایلر Visual Basic فیلدی به نام _Name برای آن در نظر میگیرد. در این حالت باید توجه داشته باشید که دیگر نمیتوانید شناسه _Name را در این کلاس به کار ببرید. در صورت به کار بردن چنین شناسهای با خطای کامپایلر مواجه خواهید شد.
خصوصیات دیگر Backing Field عبارتند از:
ü نحوه دسترسی به backing field همواره به صورت private خواهد بود، حتی اگر خصوصیت به صورت public تعریف شده باشد.
ü اگر خصوصیت به صورت shared معرفی شده باشد، آنگاه backing field نیز به صورت shared خواهد بود.
ü Attribute های معرفی شده برای خصوصیت بر روی backing field اعمال نمیشوند.
ü Backing Field داخل کد کلاس و پنجره watch در زمان کامپایل دیده میشود، اما توسط ویرایشگر محیط در لیست پیشنهادی تکمیلی نمایش داده نمیشود.
مقداردهی اولیه یک خصوصیت اتوماتیک

هر عبارتی که برای مقداردهی یک فیلد کاربرد دارد، میتواند برای مقداردهی اولیه به خصوصیت اتوماتیک مورد استفاده قرار گیرد. زمانی که شما یک خصوصیت اتوماتیک را مقداردهی اولیه میکنید، آن عبارت از طریق قسمت set ارزیابی شده و به backing field نسبت داده میشود. مثالهای زیر نحوه مقداردهی کردن اولیه خصوصیات اتوماتیک را نشان میدهند.
Property FirstName As String = "James" Property PartNo As Integer = 44302 Property Orders As New List(Of Order)(500)
شما نمیتوانید به یک خصوصیت اتوماتیک که داخل یک رابط یا به صورت MustOverride معرفی شده است، مقدار اولیه بدهید.
همچنین زمانی که یک خصوصیت اتوماتیک داخل یک ساختار معرفی میشود، تنها در حالتی که به صورت shared معرفی شده باشد، امکان مقداردهی اولیه را خواهد داشت.
همچنین اگر یک خصوصیت اتوماتیک از نوع آرایهای تعریف کنید، نباید تعداد عناصر آنرا مشخص نمایید، بلکه میتوانید مقادیر آرایه را به وی نسبت دهید، همانند زیر:
Property Grades As Integer() = {90, 73} Property Temperatures As Integer() = New Integer() {68, 54, 71} توصیه میشود که در موارد زیر از خصوصیات اتوماتیک استفاده نکنید، بلکه آنها را به صورت صریح معرفی نمایید:
ü زمانی که میخواهید کدی را به قسمت get یا set خصوصیت اضافه کنید، همانند زمانی که کدی را در قسمت set برای ارزیابی مقادیر نسبت داده شده اضافه میکنید.
ü زمانی که نحوه دسترسی به قسمتهای set و get متفاوتند، مثلا شما قسمت set را به صورت private و قسمت get را به صورت public تعریف میکنید.
ü زمان ساختن خصوصیات WriteOnly یا ReadOnly
ü اگر میخواهید Attribute را بر روی backing field اعمال نمایید.
ü اگر میخواهید توضیحات XML را برای backing field بنویسید.

مقدار دهنده اولیه مجموعهها (Collection Initializers)

با استفاده از این ویژگی شما میتوانید مجموعهای را معرفی کرده و آنرا با مجموعهای از مقادیر، مقداردهی نمایید. مقداردهی اولیه مجموعهها زمان معرفی مجموعههایی که مقادیر آنها از همان ابتدا مشخص هستند مفید است، همانند مجموعه گزینههای یک منو یا اسامی ماهها یا روزها به عنوان یک لیست رشتهای و غیره.
شما مقادیر را با استفاده از کلمه کلیدی From که توسط {} به همراه مقادیر ادامه داده شده است، مشخص میکنید. مثالهای زیر نحوه انجام این کار را نشان میدهند:
' Create an array of type String(). Dim winterMonths = {"December", "January", "February"} ' Create an array of type Integer() Dim numbers = {1, 2, 3, 4, 5} ' Create a list of menu options. (Requires an extension method ' named Add for List(Of MenuOption) Dim menuOptions = New List(Of MenuOption) From {{1, "Home"}, {2, "Products"}, {3, "News"}, {4, "Contact Us"}}
نحو (Syntax) مقداردهی اولیه به مجموعهها به صورت مقادیر جدا شده توسط کاما، داخل {} میباشد.
Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}
زمان ساختن مجموعههایی همانند List(Of T) یا Dictionary(Of TKey, TValue) ، شما باید گونه مجموعه را قبل از مقداردهی اولیه همانند زیر مشخص کنید:
Public Class AppMenu Public Property Items As List(Of String) = New List(Of String) From {"Home", "About", "Contact"} End Class
زمان ساختن یک مجموعه توسط مقدار دهنده اولیه، هر مقدار فراهم شده در لیست مقادیر به متد Add مجموعه ارسال میشود. بعنوان مثال اگر شما مجموعهای از نوع List(Of T) را توسط مقداردهنده اولیه مجموعه ایجاد کنید، آنگاه هر مقدار رشتهای موجود در لیست مقادیر، به متد Add ارسال میگردد. اگر شما میخواهید مجموعهای را توسط مقداردهنده اولیه ایجاد کنید، گونه مورد نظر باید این قابلیت را داشته باشد، یعنی باید از رابط IEnumerable(Of T) یا کلاس CollectionBase ارث برده باشد. همچنین این گونه باید متد Add با خصوصیات زیر را دارا باشد:
ü متد Add باید از مکانی که مقدار دهنده اولیه مجموعه فراخوانی شده است، قابل دسترس باشد.
ü متد Add باید یک عضو نمونه یا یک عضو shared یا یک متد توسعه داده شده باشد.
مثال زیر نحوه ساختن یک مجموعه از نوع List(Of Customer) توسط مقداردهنده اولیه مجموعهها را نشان میدهد. زمان اجرای کد زیر هر شئ Customer به متد Add(Customer) ارسال میگردد:
Dim customers = New List(Of Customer) From { New Customer("City Power & Light", "http://www.cpandl.com/"), New Customer("Wide World Importers", "http://www.wideworldimporters.com/"), New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/") } این کد معادل کد زیر است که به صورت عادی نوشته شده است:
Dim customers = New List(Of Customer) customers.Add(New Customer("City Power & Light", "http://www.cpandl.com/")) customers.Add(New Customer("Wide World Importers", "http://www.wideworldimporters.com/")) customers.Add(New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/"))
شما میتوانید از این روش به صورت تو در تو نیز استفاده نمایید، مثال زیر را در نظر بگیرید:
Dim days = New Dictionary(Of Integer, String) From {{0, "Sunday"}, {1, "Monday"}} این کد معال کد زیر است:
Dim days = New Dictionary(Of Integer, String) days.Add(0, "Sunday") days.Add(1, "Monday")
عبارات در Visual Basic 2010

عبارات در Visual Basic ساختار کاملی دارند. این عبارات میتوانند شامل کلمات کلیدی، عملگرها، متغییرها، ثابتها و غیره باشند. هر جمله در Visual Basic جزء یکی از دو دسته زیر است:
ü عبارات معرفی، که نام متغییر، ثابت، یا پراسیجر به همراه نوع آنها ذکر شده است
ü عبارات قابل اجراء، که عملیاتی را انجام میدهند. این عبارات میتواند فراخوانی یک متد یا تابع باشد یا یک حلقه یا ساختار انشعابی بر روی بلوکی از کدها باشد. عبارات قابل اجراء شامل عبارات نسبتدهی به متغییرها و ثابتها نیز میباشد.

عبارات معرفی

شما از این عبارا ت برای معرفی پراسیجرها، متغییرها، خصوصیات، آرایهها و ثابتها استفاده میکنید. زمانی که شما یک عنصر برنامه را معرفی میکنید، گونه، سطح دسترسی و میدان دید آنرا نیز تعیین میکنید. کدهای زیر سه عبارت معرفی را نشان میدهد:
Public Sub applyFormat() Const limit As Integer = 33 Dim thisWidget As New widget ' Insert code to implement the procedure. End Sub شما میتوانید زمان معرفی یک عنصر مقدار اولیهای نیز برای آن تعیین کنید:
Dim m As Integer = 45 Dim f As New System.Windows.Forms.Form() عبارات قابل اجرا نیز برای اجرای مجموعهای از عملیاتها استفاده میشوند.
شما میتوانید چندین عبارت را پشت سر هم در یک خط بنویسید، فقط کافیست آنها را با : از هم جدا کنید:
Dim sampleString As String = "Hello World" : MsgBox(sampleString) اغلب اوقات یک عبارت در یک سطر جای میگیرد اما اگر عبارت طولانی باشد، شما باید آنرا در چند سطر جای دهید، در Visual Basic 2010 امکان ادامه یک عبارت در خطوط بعدی نیز بدون استفاده از _ فراهم شده است:
Public Sub demoBox() Dim nameVar As String nameVar = "John" MsgBox("Hello " & nameVar _ & ". How are you?") End Sub در کد بالا از _ برای ادامه دستور MsgBox در سطر بعدی استفاده شده است.
در موارد زیر شما میتوانید بدون نوشتن _ ادامه عبارت را در سطر بعدی بنویسید:
ü بعد از کاما
Public Function GetUsername(ByVal username As String, ByVal delimiter As Char, ByVal position As Integer) As String Return username.Split(delimiter)(position) End Function ü بعد از پرانتز باز یا قبل از پرانتز بسته
Dim username = GetUsername( Security.Principal.WindowsIdentity.GetCurrent().Na me, CChar("\"), 1 ) ü بعد از آکولاد باز { یا قبل از آکولاد بسته }
Dim customer = New Customer With { .Name = "Terry Adams", .Company = "Adventure Works", .Email = "terry@www.adventure-works.com" } ü بعد از عبارت تعبیه شده <%= و قبل از %> داخل عبارات XML
Dim customerXml = <Customer> <Name> <%= customer.Name %> </Name> <Email> <%= customer.Email %> </Email> </Customer> ü بعد از عملگر الحاق &
cmd.CommandText = "SELECT * FROM Titles JOIN Publishers " & "ON Publishers.PubId = Titles.PubID " & "WHERE Publishers.State = 'CA'" ü بعد از عملگرهای نسبت دهی ( = , &= , := , -= , *= , /= , \= , ^= , <<= , >>=)
Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath) ü بعد از عملگرهای باینری (+ , - , / , * , Mod, <>, < , > , <= , >=, ^, >>, << , And, AndAlso, Or, OrElse, Like, Xor)
Dim memoryInUse = My.Computer.Info.TotalPhysicalMemory + My.Computer.Info.TotalVirtualMemory - My.Computer.Info.AvailablePhysicalMemory - My.Computer.Info.AvailableVirtualMemory ü بعد از عملگرهای Is و IsNot
If TypeOf inStream Is IO.FileStream AndAlso inStream IsNot Nothing Then ReadFile(inStream) End If ü بعد از عملگر دسترسی به اعضای کلاس (.) و قبل از نام اعضاء
Dim fileStream = My.Computer.FileSystem. OpenTextFileReader(filePath) ... ' Not allowed: ' Dim aType = New With { . ' PropertyName = "Value" ' Allowed: Dim aType = New With {.PropertyName = "Value"} Dim log As New EventLog() ' Not allowed: ' With log ' . ' Source = "Application" ' End With ' Allowed: With log .Source = "Application" End With
عبارات لامبدا

یک عبارت لامبدا تابع یا سابروتینی بدون نام است که در هر جایی که بتوان از نمایندهها (Delegates) استفاده کرد، قابل استفاده است. یک عبارت لامبدا یک تابع یا سابروتین است که در یک یا چندین خط نوشته میشود. شما میتوانید مقادیری را به این عبارات ارسال کنید.
همانند ساختن یک تابع یا سابروتین با استفاده از کلمات کلیدی Function یا Sub، میتوانید یک عبارت لامبدا را معرفی نمایید. مثال زیر یک عبارت لامبدا را نشان میدهد که به آرگومان خود یک عدد اضافه میکند. در این مثال هم عبارت یک خطی و هم چند خطی نشان داده شده است:
Dim increment1 = Function(x) x + 1 Dim increment2 = Function(x) Return x + 2 End Function ' Write the value 2. Console.WriteLine(increment1(1)) ' Write the value 4. Console.WriteLine(increment2(2))
مثال زیر عبارت لامبدایی را نشان می دهد که مقداری را در کنسول نمایش میدهد:
Dim writeline1 = Sub(x) Console.WriteLine(x) Dim writeline2 = Sub(x) Console.WriteLine(x) End Sub ' Write "Hello". writeline1("Hello") ' Write "World" writeline2("World")
در مثال بالا عبارت لامبدا به نام یک متغییر نسبت داده شده بود. شما میتوانید یک عبارت را در همان زمان معرفی، مورد استفاده قرار دهید:
Console.WriteLine((Function(num As Integer) num + 1)(5))
یک عبارت لامبدا را میتوانید بعنوان مقدار بازگشتی یک تابع نیز برگردانید یا آنرا بعنوان یک آرگومان برای جایی که یک نمایندهای را دریافت میکند، ارسال کنید:
Module Module2 Sub Main() ' The following line will print Success, because 4 is even. testResult(4, Function(num) num Mod 2 = 0) ' The following line will print Failure, because 5 is not > 10. testResult(5, Function(num) num > 10) End Sub ' Sub testResult takes two arguments, an integer value and a ' delegate function that takes an integer as input and returns ' a boolean. ' If the function returns True for the integer argument, Success ' is displayed. ' If the function returns False for the integer argument, Failure ' is displayed. Sub testResult(ByVal value As Integer, ByVal fun As Func(Of Integer, Boolean)) If fun(value) Then Console.WriteLine("Success") Else Console.WriteLine("Failure") End If End Sub End Module نحو یک عبارت لامبدا همانند توابع و سابروتینها می باشد با تفاوتهای زیر:
ü عبارت لامبدا بدون نام است
ü عبارت لامبدا نمیتواند تغییر دهندههایی همانند Overload یا Override را قبول کند
ü عبارت لامبدا از عبارت As برای تعیین گونه بازگشتی خود استفاده نمیکند، بلکه به جای آن با توجه به مقدار بازگشتی عبارت گونه بازگشتیاش را مشخص میکند. مثلا اگر عبارت لامبدا فقط شامل عبارت cust.City="London" باشد، بنابراین گونه بازگشتی از نوع Boolean خواهد بود.
ü پارامترهای اختیاری و موقت در عبارات لامبدا وجود ندارد.
ü اجازه استفاده از پارامترهای ژنریک در عبارات لامبدا وجود ندارد.
مثال زیر به صورت کاملتری این مطلب را نشان میدهد:
Module Module6 Sub Main() ' Variable takeAGuess is a Boolean function. It stores the target ' number that is set in makeTheGame. Dim takeAGuess As gameDelegate = makeTheGame() ' Set up the loop to play the game. Dim guess As Integer Dim gameOver = False While Not gameOver guess = CInt(InputBox("Enter a number between 1 and 10 (0 to quit)", "Guessing Game", "0")) ' A guess of 0 means you want to give up. If guess = 0 Then gameOver = True Else ' Tests your guess and announces whether you are correct. Method takeAGuess ' is called multiple times with different guesses. The target value is not ' accessible from Main and is not passed in. gameOver = takeAGuess(guess) Console.WriteLine("Guess of " & guess & " is " & gameOver) End If End While End Sub Delegate Function gameDelegate(ByVal aGuess As Integer) As Boolean Public Function makeTheGame() As gameDelegate ' Generate the target number, between 1 and 10. Notice that ' target is a local variable. After you return from makeTheGame, ' it is not directly accessible. Randomize() Dim target As Integer = CInt(Int(10 * Rnd() + 1)) ' Print the answer if you want to be sure the game is not cheating ' by changing the target at each guess. Console.WriteLine("(Peeking at the answer) The target is " & target) ' The game is returned as a lambda expression. The lambda expression ' carries with it the environment in which it was created. This ' environment includes the target number. Note that only the current ' guess is a parameter to the returned lambda expression, not the target. ' Does the guess equal the target? Dim playTheGame = Function(guess As Integer) guess = target Return playTheGame End Function End Module
ایجاد از روی استفاده (Generate From Usage)

این ویژگی شما را قادر میسازد که از کلاسها و اعضاء قبل از معرفی آنها استفاده کنید. شما میتوانید یک پیش تعریف برای هر کلاس، سازنده، متد، خصوصیت، فیلد و یا شمارشی قبل از معرفی کامل آنها داشته باشید. این کار باعث میشود که شما بدون نیاز به تغییر مکان به کد نویسی خود ادامه دهید.
سپس یک نشانه خطا بر روی شناسههای تعریف نشده در برنامه نشان داده میشود که با کلیک بر روی آن گزینههای زیر به شما نمایش داده میشود:
ü ایجاد پیش تعریف خصوصیت
ü ایجاد پیش تعریف فیلد
ü ایجاد پیش تعریف متد
ü ایجاد کلاس
ü ایجاد رابط
ü ایجاد گونه جدید (برای کلاسها، ساختارها، رابطها، شمارشها، نمایندهها و یا ماژولها)
در کدهای زیر خصوصیت InstanceProperty در کلاس Customer وجود ندارد:
Dim cust As New Customer() Dim city As String = cust.InstanceProperty زمانی که از این ویژگی استفاده میکنید، پیش تعریفی به صورت زیر در کلاس Customer ایجاد میشود:
Property InstanceProperty() As String یا مثلاً متد InstanceMethod هنوز در این کلاس وجود ندارد اما آن را فراخوانی کردهاید:
Dim cust As New Customer() Dim itemNumber = 3 Dim itemName = "abc" cust.InstanceMethod(itemNumber, itemName, 4) بعد از ساختن پیش تعریف کدهای زیر به کلاس اضافه شده است:
Sub InstanceMethod (ByVal itemNumber As Integer, ByVal itemName As String, ByVal p3 As Integer) Throw New NotImplementedException End Sub

Tags:

Share via facebook Share via linkedin Share via telegram Share via twitter Share via whatsapp

https://www.meta4u.com/forum/Themes/Comet/images/post/xx.png
امکانات جدید گوگل

نویسنده Zohreh Gholami در فناوری اطلاعات و ارتباطات (IT)

0 ارسال
1332 مشاهده
آخرین ارسال: بعد از ظهر 14:35:46 - 09/25/11
توسط
Zohreh Gholami
https://www.meta4u.com/forum/Themes/Comet/images/post/clip.png
كتاب پابليشر(ناشر) 2010 بخش اول, Publisher 2010 Part I

نویسنده Hooman Ghayouri در كامپيوتر، برنامه نويسي، آفيس, IT, Programming, Office Programs

0 ارسال
2198 مشاهده
آخرین ارسال: بعد از ظهر 13:28:59 - 10/18/11
توسط
Hooman Ghayouri
https://www.meta4u.com/forum/Themes/Comet/images/post/clip.png
كتاب پابليشر(ناشر) 2010 بخش دوم, Publisher 2010 Part II

نویسنده Hooman Ghayouri در كامپيوتر، برنامه نويسي، آفيس, IT, Programming, Office Programs

0 ارسال
1517 مشاهده
آخرین ارسال: بعد از ظهر 22:47:51 - 10/19/11
توسط
Hooman Ghayouri
https://www.meta4u.com/forum/Themes/Comet/images/post/clip.png
كتاب اكسس 2010 بخش سوم, Access 2010 Part III

نویسنده Hooman Ghayouri در كامپيوتر، برنامه نويسي، آفيس, IT, Programming, Office Programs

1 ارسال
2048 مشاهده
آخرین ارسال: بعد از ظهر 14:29:21 - 10/04/16
توسط
moshaveranenovin
https://www.meta4u.com/forum/Themes/Comet/images/post/clip.png
كتاب اوتلوك 2010 بخش سوم, Outlook 2010 Part III

نویسنده Hooman Ghayouri در كامپيوتر، برنامه نويسي، آفيس, IT, Programming, Office Programs

0 ارسال
1593 مشاهده
آخرین ارسال: بعد از ظهر 22:41:49 - 10/19/11
توسط
Hooman Ghayouri
https://www.meta4u.com/forum/Themes/Comet/images/post/clip.png
كتاب اوتلوك 2010 بخش اول - Outlook 2010 Part I

نویسنده Hooman Ghayouri در كامپيوتر، برنامه نويسي، آفيس, IT, Programming, Office Programs

0 ارسال
1854 مشاهده
آخرین ارسال: بعد از ظهر 15:18:35 - 10/17/11
توسط
Hooman Ghayouri
https://www.meta4u.com/forum/Themes/Comet/images/post/clip.png
كتاب اكسس 2010 بخش اول, Access 2010 Part I

نویسنده Hooman Ghayouri در كامپيوتر، برنامه نويسي، آفيس, IT, Programming, Office Programs

0 ارسال
1593 مشاهده
آخرین ارسال: بعد از ظهر 13:34:18 - 10/18/11
توسط
Hooman Ghayouri