<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Iran Developers Network &#187; ویژوال بیسیک</title>
	<atom:link href="http://www.irandevelopers.com/category/programming/visualbasic/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.irandevelopers.com</link>
	<description>IDN بزرگترین مرجع توسعه دهندگان ایران - آموزش زبانهای برنامه نويسی</description>
	<lastBuildDate>Mon, 23 Aug 2010 08:51:43 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>کار با رجیستری در ویژوال بیسیک ۶٫۰</title>
		<link>http://www.irandevelopers.com/programming/workwithregistryvb688061-1899/</link>
		<comments>http://www.irandevelopers.com/programming/workwithregistryvb688061-1899/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 10:53:19 +0000</pubDate>
		<dc:creator>biranvand2009</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>
		<category><![CDATA[کار با رجیستری در ویژوال بیسیک 6.0]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1899</guid>
		<description><![CDATA[رجیستری چیست ؟ سیستم عامل ویندوز تنظیمات سخت افزاری و نرم افزاری خود را بطور مرکزی در یک بانک اطلاعاتی با ساختار سلسله مراتبی ذخیره می کند که رجیستری نام دارد . رجیستری جایگزینی برای بسیاری از فایلهای پیکربندی INI ، SYS و COM است که در نسخه های اولیه ویندوز موجود بود . رجیستری [...]]]></description>
			<content:encoded><![CDATA[<p>رجیستری چیست ؟</p>
<p>سیستم عامل ویندوز تنظیمات سخت افزاری و نرم افزاری خود را بطور مرکزی در یک بانک اطلاعاتی با ساختار سلسله مراتبی ذخیره می کند که رجیستری نام دارد . رجیستری جایگزینی برای بسیاری از فایلهای پیکربندی INI ، SYS و COM است که در نسخه های اولیه ویندوز موجود بود . رجیستری ، سیستم عامل را با مهیا کردن اطلاعات موردنیز برای اجرای برنامه ها و load شدن component ها ، کنترل می کند .</p>
<p>رجیستری شامل انواع مختلفی از اطلاعات می باشد مثل :</p>
<p>- اطلاعات سخت افزارهای نصب شده روی سیستم<br />
- اطلاعات درایورهای نصب شده روی سیستم<br />
- اطلاعات برنامه های نصب شده روی سیستم<br />
- اطلاعات پروتکلهای شبکه ای مورد استفاده در سیستم</p>
<p>ساختار رجیستری شامل چندین مجموعه رکورد است که داده های این رکوردها توسط بسیاری از برنامه ها و اجزای سیستم عامل خوانده و یا نوشته می شود .</p>
<p>اجزای رجیستری</p>
<p>اجزای تشکیل دهنده رجیستری عبارتند از :</p>
<p>۱ – subtree : Subtree ها همانند folder های موجود در ریشه یک درایو هارد هستند . رجستری ویندوز دارای پنج subtree می باشد :<br />
- HKEY_LOCAL_MACHINE : شامل تمام داده های پیکربندی برای کامپیوتر می باشد و شامل ۵ key است :Hardware ، SAM ، Security ، Software و System<br />
- HKEY_USERS : شامل داده های مربوط به تنظیمات سیستم عامل برای هر user است مثل تنظیمات desktop و محیط ویندوز<br />
- HKEY_CURRENT_USER : شامل داده های کاربر فعلی سیستم<br />
- HKEY_CLASSES_ROOT : شامل اطلاعات پیکربندی نرم افزار است مثل داده های OLE و داده های کلاسهای متناظر با فایل<br />
- HKEY_CURRENT_CONFIG : شامل اطلاعات مورد نیاز برای تنظیمات داریورهای سخت افزاری و غیره<br />
۲ – Key : key ها همانند folder ها و subfolder های روی هارد هستند . هر key متناظر با object های نرم افزاری یا سخت افزاری می باشد . subkey ها key هایی هستند که درون یکسری key قراردارند .</p>
<p>۳ – Entry : هر key دارای یک یا چند entry است . هر entry دارای سه بخش می باشد :<br />
- نام Name<br />
- نوع داده ای Data Type : مقدار هر entry یکی از انواع داده های زیر است :</p>
<p>REG_DWORD ، REG_SZ ، REG_EXPAND_SZ ، REG_BINARY ،<br />
REG_MULTI_SZ ، REG_FULL_RESOURCE_DESCRIPTOT<br />
- مقدار Value</p>
<p>نکته ۱ : برای مشاهده رجیستری و اعمال تغییرات در آن ( لطفاً اگر هیچ تجربه ای در تنظیم کردن رجیستری ندارید اطلاعات آنرا تغییر ندهید ) ، می توانید از برنامه regedit.exe و یا regedt32.exe موجود در ویندوز استفاده کنید . برای اینکار کافیست نام برنامه را در کادر Run وارد کنید .</p>
<p>برای کار با رجیستری در ویژوال بیسیک کلاس Registery.bas را مطابق مطالب زیر ایجاد کرده و در پروژه های خود از آن استفاده کنید :</p>
<p>۱ &#8211; تعریف ثابتهای مورد نیاز : برای نوشتن این کلاس نیاز به تعریف چهار دسته ثابت داریم :</p>
<p>- ثابتهای مربوط به تعریف data type های entry های رجیستری :</p>
<p>Global Const REG_SZ As Long = 1<br />
Global Const REG_DWORD As Long = 4</p>
<p>- ثابتهای مربوط به تعریف key های رجیستری</p>
<p>Global Const HKEY_CLASSES_ROOT = &amp;H80000000<br />
Global Const HKEY_CURRENT_USER = &amp;H80000001<br />
Global Const HKEY_LOCAL_MACHINE = &amp;H80000002<br />
Global Const HKEY_USERS = &amp;H80000003</p>
<p>- ثابتهای مربوط به خطاهای کار با رجیستری</p>
<p>Global Const ERROR_NONE = 0</p>
<p>Global Const ERROR_BADDB = 1<br />
Global Const ERROR_BADKEY = 2<br />
Global Const ERROR_CANTOPEN = 3<br />
Global Const ERROR_CANTREAD = 4<br />
Global Const ERROR_CANTWRITE = 5<br />
Global Const ERROR_OUTOFMEMORY = 6<br />
Global Const ERROR_INVALID_PARAMETER = 7<br />
Global Const ERROR_ACCESS_DENIED = 8<br />
Global Const ERROR_INVALID_PARAMETERS = 87<br />
Global Const ERROR_NO_MORE_ITEMS = 259</p>
<p>- ثابتهای متفرقه</p>
<p>Global Const KEY_ALL_ACCESS = &amp;H3F<br />
Global Const REG_OPTION_NON_VOLATILE = 0</p>
<p>2 &#8211; Declare کردن Api های مورد نیاز : برای کار با رجیستری از توابع کتابخانه Advapi32.dll استفاده می کنیم . این توابع عبارتند از :</p>
<p>- تابع RegCloseKey : آزاد کردن handle مربوط به یک key<br />
Declare Function RegCloseKey Lib &#8220;advapi32.dll&#8221; (ByVal hKey As Long) As Long<br />
- تابع RegCreateKeyEx : ساخت یک key در رجیستری ( اگر key قبلاً وجود داشته باشد ، این تابع آنرا باز می کند ) :</p>
<p>Declare Function RegCreateKeyEx Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegCreateKeyExA&#8221; (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long</p>
<p>- تابع RegOpenKeyEx : باز کردن یک key</p>
<p>Declare Function RegOpenKeyEx Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegOpenKeyExA&#8221; (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long</p>
<p>- تابع RegQueryValueExLong : استخراج type و data ی یک نام متناظر با یک key باز شده</p>
<p>Declare Function RegQueryValueExString Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegQueryValueExA&#8221; (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long<br />
Declare Function RegQueryValueExLong Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegQueryValueExA&#8221; (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long<br />
Declare Function RegQueryValueExNULL Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegQueryValueExA&#8221; (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long</p>
<p>- تابع RegSetValueEx : ذخیره یک مقدار در فیلد value یک کلید باز</p>
<p>Declare Function RegSetValueExString Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegSetValueExA&#8221; (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long<br />
Declare Function RegSetValueExLong Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegSetValueExA&#8221; (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long</p>
<p>- تابع RegDeleteKey : پاک کردن یک کلید و کلیه اطلاعات مرتبط با آن</p>
<p>Private Declare Function RegDeleteKey&amp; Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegDeleteKeyA&#8221; (ByVal hKey As Long, ByVal lpSubKey As String)</p>
<p>- تابع RegDeleteValue : حذف مقدار یک key</p>
<p>Private Declare Function RegDeleteValue&amp; Lib &#8220;advapi32.dll&#8221; Alias &#8220;RegDeleteValueA&#8221; (ByVal hKey As Long, ByVal lpValueName As String)</p>
<p>3 &#8211; توابع کمکی : برای نوشتن توابع اصلی کار با رجیستری نیاز به نوشتن توابع کمکی زیر است :<br />
- تابع SetValueEx : با توجه به نوع داده یک کلید ، مقدار موجود در آنرا در یک متغیر ذخیره می کند :</p>
<p>Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long<br />
Dim lValue As Long<br />
Dim sValue As String<br />
Select Case lType<br />
Case REG_SZ &#8216; type of value is string<br />
sValue = vValue<br />
SetValueEx = RegSetValueExString(hKey, sValueName, 0&amp;, lType, sValue, Len(sValue))x<br />
Case REG_DWORD &#8216; type of value is Double word<br />
lValue = vValue<br />
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&amp;, lType, lValue, 4)x<br />
End Select<br />
End Function</p>
<p>- تابع QueryValueEx : سایز و نوع داده ای یک داده را که باید خوانده شود مشخص می کند .</p>
<p>Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long<br />
Dim cch As Long<br />
Dim lrc As Long<br />
Dim lType As Long<br />
Dim lValue As Long<br />
Dim sValue As String<br />
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&amp;, lType, 0&amp;, cch)x<br />
Select Case lType<br />
&#8216; For strings<br />
Case REG_SZ:<br />
sValue = String(cch, 0)x<br />
lrc = RegQueryValueExString(lhKey, szValueName, 0&amp;, lType, sValue, cch)x<br />
If lrc = ERROR_NONE Then<br />
vValue = Left$(sValue, cch)x<br />
Else<br />
vValue = Empty<br />
End If<br />
&#8216; For DWORDS<br />
Case REG_DWORD:<br />
lrc = RegQueryValueExLong(lhKey, szValueName, 0&amp;, lType, lValue, cch)x<br />
If lrc = ERROR_NONE Then vValue = lValue<br />
Case Else<br />
&#8216;all other data types not supported<br />
lrc = -1<br />
End Select<br />
QueryValueExExit:<br />
QueryValueEx = lrc<br />
Exit Function<br />
QueryValueExError:<br />
Resume QueryValueExExit<br />
End Function</p>
<p>4 &#8211; توابع اصلی : توابع مربوط به پاک کردن یک کلید از رجیستری ، ساخت یک کلید جدید در رجیستری و مقداردهی به یک کلید :</p>
<p>- تابع DeleteKey : این تابع یک کلید از رجیستری را حذف می کند . دارای دو پارامتر ورودی است :<br />
Location که یکی از مقادیر HKEY_CLASSES_ROOT ، HKEY_CURRENT_USER<br />
، HKEY_LOCAL_MACHINE و یا HKEY_USERS است .<br />
KeyName که نام کلیدی است که باید از رجیستری حذف شود . این کلید ممکنست شامل subkey هایی نیز باشد مثلاً Key1\SubKey1</p>
<p>Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)x<br />
Dim lRetVal As Long<br />
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)x<br />
DeleteKey = lRetVal &#8216; return function value</p>
<p>End Function</p>
<p>- تابع DeleteValue : این تابع یک entry را از کلید حذف می کند . دارای سه پارامتر ورودی است : Location ، KeyName و ValueName که نام آن value را مشخص می کند .</p>
<p>Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x<br />
Dim lRetVal As Long<br />
Dim hKey As Long<br />
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x<br />
lRetVal = RegDeleteValue(hKey, sValueName)x<br />
RegCloseKey (hKey)x<br />
DeleteValue = lRetVal<br />
End Function</p>
<p>- تابع CreateNewKey : این تابع یک کلید جدید ایجاد می کند . دارای دو پارامتر ورودی است : Location و KeyName</p>
<p>Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)x<br />
Dim hNewKey As Long<br />
Dim lRetVal As Long<br />
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&amp;, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&amp;, hNewKey, lRetVal)x<br />
RegCloseKey (hNewKey)x<br />
CreateNewKey = lRetVal<br />
End Function</p>
<p>- تابع SetKeyValue : این تابع پارامتر data یک entry را تنظیم می کند . دارای ۵ پارامتر ورودی است : Location ، KeyName ، ValueName ، ValueSetting و ValueType</p>
<p>Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)x<br />
Dim lRetVal As Long<br />
Dim hKey As Long<br />
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x<br />
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)x<br />
RegCloseKey (hKey)x<br />
SetKeyValue = lRetVal<br />
End Function</p>
<p>- تابع QueryValue : این تابع فیلد داده یک entry را برمی گرداند . دارای سه پارامتر ورودی است : Location ، KeyName و ValueName</p>
<p>Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x<br />
Dim lRetVal As Long<br />
Dim hKey As Long<br />
Dim vValue As Variant<br />
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x<br />
lRetVal = QueryValueEx(hKey, sValueName, vValue)x<br />
QueryValue = vValue<br />
RegCloseKey (hKey)x<br />
End Function</p>
<p>ساخت یک انتصاب فایل یا File Association به یک برنامه</p>
<p>در این درس می خواهم با استفاده از کلاسی که در درس قبل معرفی شد تابعی بسازیم که توسط آن بتوانیم فایلهای با پسوندی مشخص را به یک برنامه اختصاص دهیم . بعبارت دیگر تابعی بنویسیم که اطلاعات لازم برای باز شدن فایلهایی با پسوند xxx را توسط برنامه MyApp.exe در رجیستری ثبت کند .</p>
<p>Public Sub CreateAssociation(sExtension As String, sApplication As String, sAppPath As String)x<br />
Dim sPath, sAppExe As String<br />
CreateNewKey &#8220;.&#8221; &amp; sExtension, HKEY_CLASSES_ROOT<br />
SetKeyValue HKEY_CLASSES_ROOT, &#8220;.&#8221; &amp; sExtension, &#8220;&#8221;, sApplication &amp; &#8220;.Document&#8221;, REG_SZ<br />
CreateNewKey sApplication &amp; &#8220;.Document\shell\open\command&#8221;, HKEY_CLASSES_ROOT<br />
SetKeyValue HKEY_CLASSES_ROOT, sApplication &amp; &#8220;.Document&#8221;, &#8220;&#8221;, sApplication &amp; &#8221; Document&#8221;, REG_SZ<br />
sPath = sAppPath &amp; &#8221; %1&#8243;x<br />
sAppExe = sApplication &amp; &#8220;.exe&#8221;x<br />
SetKeyValue HKEY_CLASSES_ROOT, sApplication&amp; &#8220;.Document\shell\open\command&#8221;, &#8220;&#8221;, sPath, REG_SZ<br />
CreateNewKey &#8220;Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.&#8221; &amp; sExtension, HKEY_CURRENT_USER<br />
SetKeyValue HKEY_CURRENT_USER, &#8220;Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.&#8221; &amp; sExtension, &#8220;Application&#8221;, sAppExe, REG_SZ<br />
CreateNewKey &#8220;Applications\&#8221; &amp; sAppExe &amp; &#8220;\shell\open\command&#8221;, HKEY_CLASSES_ROOT<br />
SetKeyValue HKEY_CLASSES_ROOT, &#8220;Applications\&#8221; &amp; sAppExe &amp; &#8220;\shell\open\command&#8221;, &#8220;&#8221;, sPath, REG_SZ<br />
End Sub</p>
<p>کاربرد این تابع بصورت زیر است :</p>
<p>CreateAssociation(&#8220;xxx&#8221;,&#8221;MyApp&#8221;,&#8221;c:\MyApp.exe&#8221;)x</p>
<p>اجرا شدن یک برنامه در هنگام راه اندازی سیستم<br />
فرض کنید می خواهیم برنامه ای بنویسیم که هر بار در هنگام راه اندازی سیستم بطور خودکار اجرا شود. البته نمی خواهم در startup ویندوز دیده شود .<br />
برای این کار باید برنامه موردنظر را در StartUp رجیستری قرار دهیم . به این ترتیب که در یکی از کلیدهای زیر یک مقدار رشته ای جدید(String Value) ایجاد کنیم و آدرس برنامه را در آن وارد کنیم :</p>
<p>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run<br />
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</p>
<p>برای مثال اگه اسم برنامه مورد نظر MyApp و مسیرش C:\Windows\MyApp.exe است باید بصورت زیر عمل کرد :</p>
<p>SetKeyValue HKEY_LOCAL_MACHINE, &#8220;SOFTWARE\Microsoft\Windows\CurrentVersion\Run&#8221;, &#8220;MyApp&#8221;, &#8220;C:\MyApp.exe&#8221;, REG_SZ</p>
<p>نکته : البته دو تا راه دیگر برای اینکار وجود دارد که برخی تروجان ها هم از این روشها استفاده می کنند تا روی سیستم باقی بمانند :<br />
یکی استفاده از win.ini و نوشتن نام فایل جلوی = run و دیگری استفاده از system.ini و نوشتن نام برنامه جلوی خط explorer.exe .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/workwithregistryvb688061-1899/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>کار با داده ها با استفاده از DataView</title>
		<link>http://www.irandevelopers.com/programming/workwithdataview880104-1719/</link>
		<comments>http://www.irandevelopers.com/programming/workwithdataview880104-1719/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 15:53:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>
		<category><![CDATA[پایگاه های داده و بانکهای اطلاعاتی]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1719</guid>
		<description><![CDATA[یکی از اعمال مورد نیاز در کار با داده های یک بانک اطلاعاتی جستجو، مرتب سازی و فیلتر کردن داده ها بر حسب نیازمندیهای برنامه کاربردی می باشد. در ADO.NET برای انجام این اعمال روی داده ها در یک DataTable دو روش وجود دارد: یکی استفاده از متد Select از شی DataTable و دیگری استفاده [...]]]></description>
			<content:encoded><![CDATA[<p class="text">یکی از اعمال مورد نیاز در کار با داده های یک بانک اطلاعاتی جستجو،  مرتب سازی و فیلتر کردن داده ها بر حسب نیازمندیهای برنامه کاربردی می  باشد.</p>
<p>در ADO.NET برای انجام این اعمال روی داده ها در یک DataTable دو روش  وجود دارد: یکی استفاده از متد Select از شی DataTable و دیگری استفاده از شئ  DataView.</p>
<p>شئ DataView دارای توانایی بیشتری نسبت به متد Select از شئ  DataTable می باشد و کار با آن نیز ساده تر است.در این مقاله سعی شده به اختصار  درباره خصوصیتها، متدها و کار با شئ DataView اطلاعاتی ارائه شود.</p>
<p>شئ  DataView مانند یک منبع برای اتصال کنترلهای دیگر به آن مورد استفاده قرار می گیرد.  شئ DataView نمایی از یک شئ DataTable می باشد که برای جستجو، فیلتر و مرتب سازی و  حتی دستکاری داده های آن شئ DataTable مورد استفاده قرار می گیرد.</p>
<p>هر شئ  DataView شامل یک مجموعه DataRowView می باشد که مشابه شئ DataRow در DataTable  هستند. این اشیا دارای ویژگیهایی می باشند که در زیر به اختصار توضیح داده شده  اند:</p>
<p>• DataView: شئ DataView که سطر جاری به آن تعلق دارد را برمی  گرداند.<br />
• Item: مقدار یک ستون از سطر فعلی را برمی گرداند.<br />
• Row: شئ  DataRow که در حال حاضر در حال بررسی است را برمی گرداند.</p>
<p>اشیا DataView در  داخل یک شئ دیگر به نام DataViewManager قرار می گیرند. رابطه بین این دو شئ مانند  رابطه بین DataTable و DataSet می باشد، با این تفاوت که امکان دارد یک شئ  DataTable دارای چند شئ DataView باشد که برای انجام جستجو و فیلتر کردن مختلف روی  داده های آن استفاده می شوند. در حقیقت در زمان اتصال یک کنترل به یک شئ DataSet در  پروسه Data-Binding آن کنترل به شئ DataView مربوط به آن DataSet متصل می شود که با  خصوصیت DefaultViewManager شئ DataSet مشخص می شود.</p>
<p>برای ساخت یک شئ  DataView از متد New استفاده می شود در مثال زیر یک شئ DataView می سازیم:</p>
<div class="MultiLineCode">Dim myDataView as New DataView<br />
myDataView.Table =  myDataSet.myTable<br />
myDataGrid.DataSource = myDataView<br />
myDataGrid.DataBind  ()</div>
<p class="text">در مثال بالا ابتدا یک شئ DataView جدید به نام myDataView ایجاد شده  است. سپس خصوصیت Table آن برابر با MyDataTable از myDataSet که در برنامه کاربردی  ما موجود است قرار داده شده است. شئ DataView دارای خصوصیتهایی می باشد که در زیر  به اختصار توضیح داده شده اند:</p>
<p>AllowDelete و AllowEdit و AllowNew: با  تنظیم این مقادیر Boolean می توان با دستکاری و اضافه و حذف مقادیر در DataView  مقادیر متناظر آنها را در شئ DataTable مربوط تغییر داد.</p>
<p>• Count: تعداد  اشیا RowView موجود در DataView جاری را بر می گرداند (مشابه خصوصیت • Count از شئ  DataTable).<br />
• Item: شئ DataRowView که توسط اندیس به وسیله پارامتر به آن ارسال  شده است را بر می گرداند.<br />
• RowFilter: عبارتی که برای فیلتر کردن سطرهای درون  DataView استفاده می شود.<br />
• Sort: عبارتی که برای مرتب کردن سطرهای درون  DataView به کار می رود.<br />
• Table: شئ DataTable متناظر با DataView را مشخص می  کند.</p>
<p>برای استفاده از خصوصیات RowFilter و Sort عبارتهایی هستند که مشابه  عبارتهای محاسباتی برای متد Select از شئ DataTable مورد استفاده قرار می گیرند.  برای تنظیم مقادیر خصوصیت Sort که مربوط به روش مرتب سازی سطرهای DataRow است لازم  است مقادیر ستونهای مورد نظر جهت مرتب سازی را به ترتیب در داخل علامت &#8221; &#8221; قرار  دهیم. برای مثال برای مرتب سازی یک DataView به ترتیب بر حسب ستونهای Date و Author  به روش زیر عمل می کنیم:</p>
<div class="MultiLineCode">myDataView.Sort = &#8220;Date , Author&#8221;</div>
<p class="text">با قرار دادن عبارتهای ASC و DESC بعد از نام ستونها با یک فاصله می  توان سطرها را به ترتیب صعودی یا نزولی مرتب کرد (حالت پیش فرض صعودی ASC است) برای  مثال:</p>
<div class="MultiLineCode">myDataView.Sort = &#8220;Date DESC , Author ASC&#8221;</div>
<p class="text">برای تنظیم مقدار RowFilter می توان از عبارات DataColumn استفاده  کرد. این عبارات شامل یک سری توابع، عملگرها، عبارات و نام ستونها می باشند که جهت  انجام فیلتر کردن مورد استفاده قرار می گیرند در این عبارتها می توان از تمام  عملیات دستکاری روی رشته ها و متغیرهای رشته ای استفاده کرد. به علاوه برای استفاده  از مقادیر تاریخ باید آنها را در بین علامات # # قرار داد.</p>
<p>برای استفاده از  یک ستون خاص در این عبارات تنها کافیست از نام آن ستون استفاده کنید. برای استفاده  از سطرهای فرزند از عبارت Child قبل از آنها و برای استفاده از سطر مادر نیز از  عبارت Parent قبل از آنها استفاده کنید.</p>
<p>بعضی از توابع قابل استفاده در این  عبارات عبارتند از Sum و Avg و Min و Max و Count و بعضی از عملگرهای منطقی مورد  استفاده عبارتند از And و Or و Not و &lt; و &gt; و &lt;= و &gt;= و &lt;&gt; و In  و Like.</p>
<p>عملگر In مشخص می کند که آیا مقدار مورد نظر در محدودیه تعیین شده  است یا نه. مقادیر مربوط به حدود باید توسط علامات &#8216; &#8216; از هم جدا شوند برای  مثال:</p>
<div class="MultiLineCode">Command=&#8221;Author In(&#8216;K&#8217; , &#8216;M&#8217; , &#8216;N&#8217;)&#8221;</div>
<p class="text">برخی عملگرهای محاسباتی مانند + و و * و / و % نیز در عبارات  DataColumn قابل استفاده هستند. تعدادی تابع نیز در این عبارات مورد استفاده قرار  می گیرند که برخی از آنها عبارتند از Convert و Len و ISNull و&#8230;</p>
<p>در پایان  سه متد مهم شئ DataView به اختصار مورد بررسی قرار گرفته اند.</p>
<p>• AddNew:  اضافه کردن یک سطر جدید به DataView<br />
• Delete: پاک کردن یک سطر از DataView<br />
•  Find: سطرهایی که شامل پارامتر ارسالی به این متد هستند پیدا می کند</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/workwithdataview880104-1719/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>فرم Login</title>
		<link>http://www.irandevelopers.com/programming/loginformaspnet880103-1717/</link>
		<comments>http://www.irandevelopers.com/programming/loginformaspnet880103-1717/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 15:52:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>
		<category><![CDATA[پایگاه های داده و بانکهای اطلاعاتی]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1717</guid>
		<description><![CDATA[فرم ورودی شامل کنترلهای زیر است: BtnCancel TxtUserName TxtPassword BtnSubmit زیربرنامه ای بنام check تعریف می کنیم: Public Sub check() Dim strConn As String = &#8220;server=localhost;uid=;pwd=;database=mydb;&#8221; پس از گرفتن Connection به تعریف SqlCommand و DataReader می پردازیم: Dim MyConn As New System.Data.SqlClient.SqlConnection(strConn) Dim objDR As System.Data.SqlClient.SqlDataReader حال متغیری از نوع رشته ای را برای انتخاب [...]]]></description>
			<content:encoded><![CDATA[<p class="text">فرم ورودی شامل کنترلهای زیر است:</p>
<div class="EnglishParag">BtnCancel TxtUserName TxtPassword BtnSubmit</div>
<p class="text">زیربرنامه ای بنام check تعریف می کنیم:</p>
<div class="MultiLineCode">Public Sub check()<br />
Dim strConn As String =  &#8220;server=localhost;uid=;pwd=;database=mydb;&#8221;</div>
<p class="text">پس از گرفتن Connection به تعریف SqlCommand و DataReader می  پردازیم:</p>
<div class="MultiLineCode">Dim MyConn As New  System.Data.SqlClient.SqlConnection(strConn)<br />
Dim objDR As  System.Data.SqlClient.SqlDataReader</div>
<p class="text">حال متغیری از نوع رشته ای را برای انتخاب فیلدهای جدولمان تعریف می  کنیم:</p>
<div class="MultiLineCode">Dim MySQL As String = &#8220;Select username, password from  login Where username = &#8216;&#8221; &amp; TxtUserName.Text &amp; &#8220;&#8216; and password = &#8216;&#8221;  &amp; TxtPassword.Text &amp; &#8220;&#8216;&#8221;<br />
Dim Cmd As New  System.Data.SqlClient.SqlCommand(MySQL, MyConn)<br />
MyConn.Open()<br />
objDR =  Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)</div>
<p class="text">سپس DataReader بر اساس cmd تعریف شده Excute می شود حال باید بررسی  کنیم که همچنین کاربری در جدول login وجود دارد یا نه؟ اگر کاربری با مشخصات ارسالی  وجود نداشته باشد پیغامی به کاربر مبنی بر نادرست بودن اطلاعات ورودی داده می  شود:</p>
<div class="MultiLineCode">If Not objDR.Read() Then<br />
Response.Write(&#8220;&lt;script&gt;alert(&#8216;Username or password is  invalid!&#8217;);location.href=&#8217;loginadmin.aspx&#8217;&lt;/script&gt;&#8221;)<br />
Response.End()<br />
TxtUserName.Text = &#8220;&#8221;<br />
TxtPassword..Text = &#8220;&#8221;<br />
objDR.Close()<br />
MyConn.Close()<br />
Else<br />
Session(&#8220;password&#8221;) =  objDR(&#8220;password&#8221;)<br />
Response.Redirect (&#8220;IndexAdmin.aspx&#8221;)</div>
<p class="text">در غیر این صورت به صفحه مربوطه انتقال داده می شود و در آخر objdr و  MyConn را close می کنیم. لازم به ذکر است که در صفحه ارجاعی در قسمت Page_Load  دستور زیر که نشان دهنده کلمه عبور صحیح است نوشته شود:</p>
<div class="MultiLineCode">If Session(&#8220;password&#8221;) = &#8220;&#8221; Then<br />
Response.Write(&#8220;&lt;script&gt;alert(&#8216;You must be  Login!&#8217;);location.href=&#8217;loginadmin.aspx&#8217;&lt;/script&gt;&#8221;)<br />
Response.End()<br />
Response.Redirect(&#8220;loginadmin.aspx&#8221;)<br />
End If</div>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/loginformaspnet880103-1717/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ایجاد حالت برگشت برای DataReader</title>
		<link>http://www.irandevelopers.com/programming/datarederrollback880103-1715/</link>
		<comments>http://www.irandevelopers.com/programming/datarederrollback880103-1715/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 15:49:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>
		<category><![CDATA[پایگاه های داده و بانکهای اطلاعاتی]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1715</guid>
		<description><![CDATA[برنامه نویسان پایگاه داده به خوبی با DataReader و قابلیتهای بالای آن در کار با بانکهای اطلاعاتی آشنا هستند. کاربرد DataReader برای خواندن سریع تعدادی رکورد از بانک اطلاعاتی و احتمالا نمایش آنها بر روی صفحه است. خواندن رکوردها توسط DataReader همواره حرکتی رو به جلو (Forward-Only) بوده و نمی توان هنگام استفاده از DataReader [...]]]></description>
			<content:encoded><![CDATA[<table class="text" border="0" cellspacing="0" cellpadding="2" width="100%">
<tbody>
<tr>
<td colspan="2"><span id="_ctl0_Body1_lblSummary" class="date" style="font-weight: bold;">برنامه نویسان پایگاه داده به خوبی با DataReader و  قابلیتهای بالای آن در کار با بانکهای اطلاعاتی آشنا هستند. کاربرد DataReader برای  خواندن سریع تعدادی رکورد از بانک اطلاعاتی و احتمالا نمایش آنها بر روی صفحه است.  خواندن رکوردها توسط DataReader همواره حرکتی رو به جلو (Forward-Only) بوده و نمی  توان هنگام استفاده از DataReader به عقب برگشت و به رکوردهای قبلی دسترسی داشت.  این مقاله روشی را ارائه می کند که با استفاده از آن بتوان حرکت رو به عقب هنگام  استفاده از DataReader را نیز به گونه ای فراهم آورد.</span> <!--<A href="#continue">ادامه مقاله&#8230;</A></p>
<p>&#8211;><!-- Ads --><!-- 			<TABLE id=Table1 cellSpacing=0 cellPadding=1 align=center border=0> <TR> <TD align=center><FONT class=smalltext  				color=#666666>آگهی</FONT></TD></TR> <TR> <TD> <a id="_ctl0_Body1_AdRotator1" href="/whatever/ads.aspx" target="_top"><img src="/Images/banner/ads300x250.gif" alt="ads300x250 ايجاد حالت برگشت برای DataReader" border="0" title="ايجاد حالت برگشت برای DataReader" /></a></TD></TR></TABLE> &#8211;><!-- Ads --></td>
</tr>
</tbody>
</table>
<hr />
<table class="text" border="0" cellspacing="0" cellpadding="2" width="100%">
<tbody>
<tr>
<td valign="top"><a name="continue"></a><span id="_ctl0_Body1_lblArticleText"><!--</p>
<div class="EnglishParag">
<div class="MultiLineCode">
<p class="text">&#8211;>در این روش ما موقعیت فعلی DataReader را ذخیره می کنیم و برای برگشت به رکورد  قبلی از ابتدا تا یکی مانده به رکورد فعلی رکوردها را پیمایش می کنیم و در پایان  آخرین رکورد پیمایش را به کاربر نشان می دهیم برای این کار به صورت زیر متغیرهایی  عمومی تعریف می نماییم:</p>
<div class="MultiLineCode">Dim Index as Integer<br />
Dim IndexTemp as Integer<br />
Dim  Dr as OleDb.OleDbDataReader</div>
<p>منظور از متغیر عمومی در عبارت بالا متغیری در محدوده یک فرم یا یک کلاس و&#8230; که  DataReader در آن استفاده می شود می باشد. سپس سه تابع یا سابروتین (بسته به نحوه  استفاده) تعریف می نماییم:</p>
<div class="MultiLineCode">Private Sub GetData()<br />
Dim Cmd as New  OleDb.OleDbCommand(&#8220;Select ID From  TblSample&#8221;)<br />
Dr=Cmd.ExecuteReader<br />
Index=0<br />
End Sub</div>
<p>سابروتین بالا برای خواندن رکورد از یک جدول فرضی می باشد.</p>
<div class="MultiLineCode">Private Sub Next  ()<br />
Dr.Read<br />
Index+=1<br />
IndexTemp=Index<br />
ShowData ()<br />
End Sub</div>
<p>سابروتین بالا برای حرکت به رکورد بعدی می باشد.</p>
<div class="MultiLineCode">Private Sub Back()<br />
Dim I as  Integer<br />
Me.GetData()<br />
For I=0 To  IndexTemp-2<br />
Dr.Read<br />
Next<br />
Index=I<br />
IndexTemp=Index<br />
ShowData  ()<br />
End Sub</div>
<p>سابروتین بالا برای حرکت به رکورد قبلی می باشد. لازم به ذکر است که کدهای بالا  به صورت شبه کد می باشند و هدف فقط نشان دادن نحوه انجام کار می باشد. شاید برخی  دوستان با دیدن این مقاله به این فکر بیفتند که به جای این کار میتوان از  DataSetاستفاده کرد که لزومی به این همه دردسر ندارد ولی بر حسب تجربه اعلام می کنم  که در برخی مواقع مجبور به استفاده از DataReader خواهید شد، برای نمونه در یکی از  برنامه هایی که برای یکی از موسسات نوشته بودم قسمتی وجود داشت که تصاویر مربوط به  قسمتهای مختلف موسسه را در بانک ذخیره می کرد و در موقع لزوم تصاویر مورد نظر با  توجه به نام قسمت مربوطه فرخوانی می شدند برای این کار اگر از DataSet استفاده شود  به دلیل اینکه DataSet رکوردها را در حافظه نگهداری می کند و با توجه به حجم بالای  حافظه مورد نیاز برای نگهداری تصویر با بالا رفتن رکوردها حافظه بلافاصله پر می  شود، ولی DataReader تک رکورد را در حافظه نگهداری می کند و با توجه به مدیریت  حافظه خودکار در .Net با حرکت در بین تصاویر حافظه تخصیص داده شده به تصویر قبلی  بازپس گرفته می شود.</p>
<p></span></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/datarederrollback880103-1715/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>انواع داده ای در Visual Basic.NET</title>
		<link>http://www.irandevelopers.com/programming/datatypevbnet880102-1708/</link>
		<comments>http://www.irandevelopers.com/programming/datatypevbnet880102-1708/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 15:43:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1708</guid>
		<description><![CDATA[برای تعریف یک متغیر در ویژوال بیسیک دات نت از عبارت Dim استفاده می شود. برای مثال چمله زیر یک متغیر جدید به نام myVar تعریف می کند: Dim myVar هنگامی که یک متغیر مانند فوق بدون در نظر گرفتن نوع آن تعریف شود، آن متغیر بعنوان یک شئ (Object) در نظر گرفته می شود. [...]]]></description>
			<content:encoded><![CDATA[<p>برای تعریف یک متغیر در ویژوال بیسیک دات نت از عبارت Dim استفاده می شود. برای مثال چمله زیر یک متغیر جدید به نام myVar تعریف می کند:</p>
<p>Dim myVar</p>
<p>هنگامی که یک متغیر مانند فوق بدون در نظر گرفتن نوع آن تعریف شود، آن متغیر بعنوان یک شئ (Object) در نظر گرفته می شود. یک متغیر از نوع شئ در دات نت می تواند شامل انواع داده از قبیل رشته، عدد یا انواع پیچیده تر مانند کلاس باشد.</p>
<p>اغلب نیازی نیست که از متغیرهای از نوع شئ در برنامه استفاده شود چرا که این متغیرها باعث کاهش کارآیی و سرعت برنامه می شود. هنگامی که از یک متغیر از نوع شئ استفاده شود، نوع مناسب آن متغیر در زمان اجرا تشخیص داده می شود و این باعث کندی می شود. بنابراین بهتر است که نوع داده را از ابتدا مشخص کنیم.</p>
<p>جهت مشخص نمودن نوع داده از کلمه کلیدی As استفاده می کنیم. بعنوان مثال یک متغیر از نوع رشته بصورت زیر تعریف می شود:</p>
<p>Dim myVar As String<br />
مجموعه دات نت انواع داده ای زیر را پشتیبانی می کند:</p>
<p>• Boolean: جهت مقادیر درست یا نادرست<br />
• Byte: جهت مقادیر صحیح صفر تا ۲۵۵ (تنها مقادیر مثبت)<br />
• Char: جهت مقادیر نویسه ها یا حروف یونیکد<br />
• Date: جهت مقادیر تاریخ و زمان بین اول ژانویه ۰۰۰۱ و ۳۱ دسامبر ۹۹۹۹<br />
• Decimal: جهت مقادیر صحیح بین صفر و مثبت و منفی ۷۹,۲۲۸,۱۶۲,۵۱۴,۲۶۴,۳۳۷,۵۹۳,۵۴۳,۹۵۰,۳۳۵ (۱۶ بایت)<br />
• Double: جهت مقادیر اعشاری با دقت مضاعف<br />
• Integre: جهت مقادیر صحیح بین +۲,۱۴۷,۴۸۳,۶۴۷ و -۲,۱۴۷,۴۸۳,۶۴۸ (۴ بایت)<br />
• Long: جهت مقادیر صحیح بین -۹,۲۲۳,۳۷۲,۰۳۶,۸۵۴,۷۷۵,۸۰۸ و +۹,۲۲۳,۳۷۲,۰۳۶,۸۵۴,۷۷۵,۸۰۷ (۸ بایت)<br />
• Short: جهت مقادیر صحیح بین -۳۲,۷۶۸ و +۳۲,۷۶۷ (۲ بایت)<br />
• Single: جهت مقادیر اعشاری با دقت واحد<br />
• String: جهت مقادیر رشته ای با تعداد حروف صفر تا دو میلیارد حرف</p>
<p>پر کاربردترین انواع داده ای عبارتند از Integer، Decimal، Date، Boolean و String.</p>
<p>دقت کنید که نوع داده ای Currency یا Money برای مقادیر پولی در نظر گرفته نشده است و شما می توانید برای مقادیر پولی از نوع Decimal استفاده کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/datatypevbnet880102-1708/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ساختارهای شرطی در Visual Basic.NET</title>
		<link>http://www.irandevelopers.com/programming/ifthenvbnet880102-1706/</link>
		<comments>http://www.irandevelopers.com/programming/ifthenvbnet880102-1706/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 15:41:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1706</guid>
		<description><![CDATA[در این گفتار برآنیم تا ساختارهای شرطی در ویژوال بیسیک دات نت را بررسی کنیم. این ساختارها If..Then و Select..Case می باشند. ساختار If..Then ابتدائی ترین ساختار شرطی در ویژوال بیسیک دات نت ساختار If..Then می باشد. با استفاده از این ساختار هنگامی که شرط مورد نظر برقرار باشد، می توان دستور یا دستورات متعددی [...]]]></description>
			<content:encoded><![CDATA[<p><span id="_ctl0_Body1_lblArticleText"></p>
<p class="text">در این گفتار برآنیم تا ساختارهای شرطی در ویژوال بیسیک دات نت را  بررسی کنیم. این ساختارها If..Then و Select..Case می باشند.</p>
<p class="text"><strong>ساختار If..Then</strong><br />
ابتدائی ترین ساختار شرطی در ویژوال بیسیک  دات نت ساختار If..Then می باشد. با استفاده از این ساختار هنگامی که شرط مورد نظر  برقرار باشد، می توان دستور یا دستورات متعددی را اجرا نمود.</p>
<p class="text">بعنوان مثال در برنامه زیر اگر زمان سیستم بعد از ظهر را نشان دهد،  جمله &#8220;Good Evening IranASP.NET&#8221; بر روی صفحه نمایش داده می شود.</p>
<div class="MultiLineCode">&lt;%<br />
Dim myTime As DateTime<br />
myTime =  Now</p>
<p>if Hour(myTime) &gt;= 12 then<br />
Response.write (&#8220;Good Evening  IranASP.NET !&#8221;)<br />
end if<br />
%&gt;</p></div>
<p class="text">همچنین ساختار If..Then عبارت Else را هم پشتیبانی می کند. اگر شرط  مربوط به If برقرار نباشد، دستورات موجود در قسمت Else اجرا می شوند. به مثال زیر  توجه فرمائید.</p>
<div class="MultiLineCode">&lt;%<br />
Dim myTime As DateTime<br />
myTime =  Now</p>
<p>if Hour(myTime) &gt;= 12 then<br />
Response.write (&#8220;Good Evening  IranASP.NET !&#8221;)<br />
else<br />
Response.write (&#8220;Good Morning IranASP.NET !&#8221;)<br />
end  if</p>
<p>%&gt;</p></div>
<p class="text"><strong>ساختار Select..Case</strong><br />
در ساختار Select..Case می توان  مقداری را با مقادیر مختلفی مقایسه کرده و دستورات مربوط به مقدار یافت شده را اجرا  نمود. بعنوان مثال قطعه برنامه زیر پیامهای مختلفی را برحسب نوع مرورگر نمایش می  دهد.</p>
<div class="MultiLineCode">&lt;%<br />
Dim strBrowser As String</p>
<p>strBrowser =  Request.Browser.Browser<br />
Select Case strBrowser<br />
Case  &#8220;IE&#8221;<br />
Response.Write( &#8220;You are using Internet Explorer!&#8221; )<br />
Case  &#8220;Netscape&#8221;<br />
Response.WRite( &#8220;You are using Netscape!&#8221; )<br />
Case  Else<br />
Response.Write( &#8220;What browser are you using?&#8221; )<br />
End  Select<br />
%&gt;</p></div>
<p class="text">دقت داشته باشید که ساختار Select..Case در برنامه فوق دارای یک قسمت  Case Else می باشد. هرگاه هیچ یک از حالات مقایسه ای برقرار نبود، دستورات موجود در  قسمت Case Else اجرا می گردند. استفاده از Case Else اختیاری است.</p>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/ifthenvbnet880102-1706/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>آشنایی با Visual Basic.NET- متغیرها</title>
		<link>http://www.irandevelopers.com/programming/variablesvbnet880101-1702/</link>
		<comments>http://www.irandevelopers.com/programming/variablesvbnet880101-1702/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 15:38:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1702</guid>
		<description><![CDATA[آشنائی با مفهوم متغیر و انواع آن با در نظر گرفتن لایه های داده ای موجود در VB.NET &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; متغیرها حاملهای دربرگیرنده مقادیری هستند که در جریان یک برنامه کاربردی می توانند تغییر کنند. برنامه نویسی بدون آنها، اگر نگوئیم غیرممکن، اما به سختی امکان پذیر است. در ASP.NET، متغیرها در چند لایه وجود دارند. [...]]]></description>
			<content:encoded><![CDATA[<p>آشنائی با مفهوم متغیر و انواع آن با در نظر گرفتن لایه های داده ای موجود در VB.NET</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
متغیرها حاملهای دربرگیرنده مقادیری هستند که در جریان یک برنامه کاربردی می توانند تغییر کنند. برنامه نویسی بدون آنها، اگر نگوئیم غیرممکن، اما به سختی امکان پذیر است. در ASP.NET، متغیرها در چند لایه وجود دارند.</p>
<p>لایه اول، لایه Application است. در اینجا در هر صفحه برنامه کاربردی، همه متغیرها در دسترس همه کاربران قرار دارد. معمولا یک قطعه داده نسبتا کوچک که در معرض استفاده مکرر است، همانند اطلاعات مربوط به ارتباط با بانک اطلاعاتی، در این لایه ذخیره می شود.</p>
<p>لایه دوم، لایه Session است. در این لایه، همه متغیرها در سرتاسر برنامه کاربردی یا تا برقرار بودن جلسه کاربر، در دسترس یک کاربر بخصوص هستند.</p>
<p>لایه سوم و آخر، لایه Page است. در اینجا همه متغیرهای تعریف شده در صفحه در سرتاسر آن صفحه در دسترس هستند. متغیرهای تعریف شده در یک صفحه ASP.NET از صفحه دیگر قابل دستیابی نیستند.</p>
<p>به علاوه در زمان استفاده از code-behindها در صفحات ASP.NET، در پیمانه های کلاس خود به متغیرهای سطح Procedure ،Private ،Public و Block دسترسی دارید. متغیرهای عمومی در کلاس هایی که در آنها ایجاد شده اند و نیز پیمانه های کلاس دیگر قابل دسترسی هستند. جلوی این متغیرها کلمه کلیدی Public قرار می گیرد. متغیرهای خصوصی تنها در دسترس توابع و روال های کلاس هایی هستند که در آنها تعریف شده اند.</p>
<p>قبل از متغیرهای خصوصی کلمه کلیدی Private قرار می گیرد. متغیرهای سطح Block تنها در بلوک های برنامه ایجاد کننده خود در دسترس می باشند. قبل از متغیرهای سطح Procedure و Block کلمه کلیدی Dim قرار می گیرد.</p>
<p>نکته حائز اهمیت این است که باید به خاطر بسپاریم که همیشه باید نوع داده های متغیر خود را تعریف کنیم. در زیر لیستی از انواع داده های پشتیبانی شده در VB.NET آورده شده است.</p>
<p>Boolean: درست یا نادرست<br />
Byte: برای داده های عددی ۰ تا ۲۵۵<br />
Char: برای یک کاراکتر یونیکد<br />
Date: اطلاعات تاریخ و زمان<br />
Decimal: اطلاعات عددی صحیح<br />
Double: داده های عددی اعشاری<br />
Integer, Long, Short, Single: داده های عددی صحیح<br />
Object: متغیر حامل پیش فرض جهت نگهداری هر نوع شئ<br />
String: رشته های حرفی</p>
<p>در نگارشهای قبلی ویژوال بیسیک و در VBScript همه متغیرها بطور پیش فرض از نوع داده variant بودند. Variant در VB.NET وجود ندارد و با نوع داده Object جایگزین شده است.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/variablesvbnet880101-1702/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>برنامه نویسی شئ گرا در VB.NET (قسمت اول)</title>
		<link>http://www.irandevelopers.com/programming/vbnetprogramming880101-1699/</link>
		<comments>http://www.irandevelopers.com/programming/vbnetprogramming880101-1699/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 15:35:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1699</guid>
		<description><![CDATA[امروزه برنامه‌های کاربردی بر پایه شئ‌گرایی استوارند. تکنولوژی NET. امکانات بسیار جالب و کاملی در این زمینه دارد این مقاله که از کتاب ارزشمند Developing windows-based applications with microsoft VB.net &#38; C#.net برگرفته شده است به شما کمک می‌کند با مفاهیم و چگونگی استفاده از این امکانات آشنا شوید. مطالبی مانند کلاسها، اشیا، اینترفیس ها، [...]]]></description>
			<content:encoded><![CDATA[<table class="text" border="0" cellspacing="0" cellpadding="2" width="100%">
<tbody>
<tr>
<td colspan="2"><span id="_ctl0_Body1_lblSummary" class="date" style="font-weight: bold;">امروزه برنامه‌های کاربردی بر پایه شئ‌گرایی استوارند.  تکنولوژی NET. امکانات بسیار جالب و کاملی در این زمینه دارد این مقاله که از کتاب  ارزشمند Developing windows-based applications with microsoft VB.net &amp; C#.net  برگرفته شده است به شما کمک می‌کند با مفاهیم و چگونگی استفاده از این امکانات آشنا  شوید. مطالبی مانند کلاسها، اشیا، اینترفیس ها، چند ریختی و وراثت. همچنین می تواند  به عنوان مرجعی برای استفاده از امکانات برنامه نویسی شئ گرا در VB.net قرار  گیرد.</span> <!--<A href="#continue">ادامه مقاله&#8230;</A></p>
<p>&#8211;><!-- Ads --><!-- 			<TABLE id=Table1 cellSpacing=0 cellPadding=1 align=center border=0> <TR> <TD align=center><FONT class=smalltext  				color=#666666>آگهی</FONT></TD></TR> <TR> <TD> <a id="_ctl0_Body1_AdRotator1" href="/whatever/ads.aspx" target="_top"><img src="/Images/banner/ads300x250.gif" alt="ads300x250 برنامه نویسی شئ گرا در VB.NET (قسمت اول)" border="0" title="برنامه نویسی شئ گرا در VB.NET (قسمت اول)" /></a></TD></TR></TABLE> &#8211;><!-- Ads --></td>
</tr>
</tbody>
</table>
<hr />
<table class="text" border="0" cellspacing="0" cellpadding="2" width="100%">
<tbody>
<tr>
<td valign="top"><a name="continue"></a><span id="_ctl0_Body1_lblArticleText"><!--</p>
<div class="EnglishParag">
<div class="MultiLineCode">
<p class="text">&#8211;><strong>مقدمه ای بر برنامه نویسی شئ گرا<br />
</strong><br />
برنامه نویسی در محیط دات نت  فریم ورک بر پایه اشیا انجام می گیرد. اشیا طرحهای برنامه پذیرند که می توانند  نمونهایی از بسته های از دادهای مرتبط و دستورات باشند. اشیا طرحهای کامل و خاصی  برای دیگر اعضای محیط برنامه هستند، بدون این که جزییات کارهای درونی خود شی مطرح  شود. اشیا از یک قالب به نام کلاس ساخته می شود. کلاسهای کتابخانه ای پایه NET. یک  سری کلاسهایی برای درست کردن اشیا در برنامهایتان آماده کرده اند. همچنین شما می  توانید از محیط برنامه نویسی Microsoft Visual Studio برای درست کردن کلاسهای  اختصاصی خودتان استفاده کنید. در این مقاله شما با مقدمات برنامه نویسی شئ گرا آشنا  می شوید.</p>
<p><strong>اشیا، اعضا و تجرد (Abstraction)<br />
</strong><br />
یک شئ (object) یک  طرح برنامه پذیر است که چیزهایی ر ا نشان می دهد. در دنیای واقعی، ماشین، دوچرخه،  کامپیوتر و&#8230; شئ هستند. هر کدام از این اشیا یک سری اعمال و خصوصیات دارند. در  برنامه شما، یک شئ شاید یک فرم یا یک کنترل مانند یک دکمه(button) یا یک database  connection یا هر طرح دیگری باشد. هر شئ یک واحد عملیاتی کامل است، و شامل همه  دادهای مورد نیازش و دارای همه ی اعمالی که برای آن ساخته شده است می باشد.</p>
<p><strong>کلاس ها (Classes)<br />
</strong><br />
کلاسها قالب هایی برای اشیا هستند. کلاسها  را می توان، &#8220;طرحهای اولیه&#8221; برای اشیا فرض کرد. آنها تمام عضوهای یک شئ را تعیین می  کنند، و رفتارهای یک شئ را تعریف می کنند. وقتی که یک کلاس مقدار دهی شد، یک نمونه  درون حافظه ای از آن کلاس ساخته می شود. این نمونه شئ نامیده می شود. برای نمونه  سازی از کلاس از کلمه کلیدی New استفاده می شود.</p>
<div class="MultiLineCode">&#8216; Declares a variable of the Widget type</p>
<p>Dim  myWidget As Widget</p>
<p>&#8216; Instantiates a new Widget object and assigns it to  the myWidget</p>
<p>&#8216; variable</p>
<p>myWidget = New Widget()</p></div>
<p>وقتی یک نمونه از کلاس ساخته می شود، یک کپی از نمونه ی داده بوسیله آن کلاسی که  در حافظه ساخته شده تعریف می شود و به مرجع متغییر داده می شود. هر نمونه از کلاس  مستقل از دیگر نمونه هاست و می تواند یک طرح جداگانه‌ی برنامه پذیر باشد. درهر  لحظه، محدودیتی برای تعداد کپی های یک کلاس (که قبلا تعریف شده) وجود ندارد. برای  مقایسه، در جهان واقعی، اگر ماشین یک شئ باشد، کلاس یک طرح برای ماشین است. یک طرح  می تواند برای هر تعداد ماشین مورد استفاده قرار گیرد و تغییرات برروی یک ماشین،  تغییری بر دیگر ماشین ها نمی گذارد.</p>
<p><strong>اشیا و اعضا(Members)<br />
</strong><br />
اشیا ترکیبی از عضوها هستند. اعضا، تشکیل شده از خصوصیات(Properties)،  فیلدها، متدها و رویدادها (events) و هر چیزی که اطلاعات و اعمالی داشته باشد.  فیلدها و خصوصیات، اعضای داده هر شئ‌ای هستند. متدها اعمالی هستند که شئ می تواند  انجام دهد و رویدادها اطلاعاتی هستند که یک شئ به اشیا دیگر می فرستد یا از آنها  دریافت می کند در زمانیکه اتفاقی در برنامه می افتد. در مثال واقعی مان، شئ ماشین،  فیلدها و خصوصیاتی مانند Color ،Make ،Model ،Age، GasLevel دارد. این اطلاعات  وضعیت شئ ماشین را توصیف می کند. شئ ماشین شاید چندین متد مانند Accelerate,  shiftgears, turn داشته باشد. متدها رفتاری که شئ می تواند اجرا کند را نشان می  دهند. ماشین شاید رویداد EngineOverheating از طرف شئ &#8220;موتورش&#8221; داشته باشد، یا وقتی  با شئ &#8220;درخت&#8221; تعامل می کند، شاید رویداد &#8220;تصادف&#8221; برای آن اتفاق بیفتد.</p>
<p><strong>کپسوله سازی( Encapsulation)<br />
</strong><br />
کپسوله سازی روشی است که یک شئ  را مستقل از اینترفیسش پیاده سازی کنیم. یک برنامه با یک شئ بواسطه اینترفیسش تعامل  می کند، که شامل خصوصیات عمومی و متدهایش است. تا زمانی که این اینترفیس ثابت باقی  می ماند، برنامه می تواند به تعامل با کامپوننت ادامه دهد. حتی اگر پیاده سازی  اینترفیس کاملا بین دو نسخه کاملا بازنویسی شده باشد. اشیا فقط از طریق متدها و  خصوصیات عمومیشان با دیگر شئ ها تعامل می کنند. داده های داخلی یک شئ، نباید در  اینترفیس قرار بگیرد. بنابراین فیلدها به ندرت Public تعریف می شوند. به مثال  ماشینمان برگردیم: اگر شئ ماشین با شئ راننده تعامل کند، اینترفیس ماشین شاید شامل  متدهای GoForward، Backward و متد Stop باشد. این همه‌ی اطلاعاتی است که راننده  برای تعامل با ماشین نیاز دارد. ماشین شاید شامل شئ &#8220;موتور&#8221; نیز باشد، اما راننده  نیازی به شناخت شئ موتور ندارد. همه اطلاعتی که راننده درباره این متدها دارد این  است که می توانند فراخوانی شوند و آنها مقادیر ویژهای را برمی گردانند. بنابراین  اگر شئ موتور تغییری کند، تا زمانیکه اینترفیس به درستی به کار خود ادامه می دهد  این امر تفاوتی برای راننده ایجاد نمی کند.</p>
<p><strong>چند  شکلی(Polymorphism)<br />
</strong><br />
چند شکلی توانایی کلاسهای متفاوت، در پیاده سازی های  مختلف از اینترفیسهای عمومی مشابه است. به عبارت دیگر، چندشکلی به متدها و خصوصیات  یک شئ اجازه می دهد، بدون توجه به چگونگی پیاده سازی اعضای آنها، فراخوانی شوند.  برای مثال شئ Driver می تواند بوسیله اینترفیس عمومی Car با شئ Car تعامل کند.اگر  شئ دیگری مانند شئ Truck یا شئ SportCar اینترفیس عمومی مشابهی را داشته باشند، شئ  Driver می تواند با آنها بدون توجه به پیاده سازی خاص آن اینترفیس تعامل کند این جا  دو راه اصلی برای تامین چندشکلی وجود دارد: چندشکلی اینترفیس(interface  polymorphism) و چندشکلی وراثتی (inheritance polymorphism).</p>
<p><strong>چندشکلی  اینترفیس(interface polymorphism)<br />
</strong><br />
اینترفیس یک قرارداد برای رفتار است.  در واقع اینترفیس اعضای یک کلاس را تعیین می کند، اما توضیحاتی درباره‌ی پیاده سازی  همه جزییات آن نمی دهد. یک شئ می تواند اینترفیسهای زیاد و متفاوتی را پیاده سازی  کند، و کلاسهای متفاوت زیادی می توانند یک اینترفیس مشابه را پیاده سازی کنند. همه  اشیایی که اینترفیس مشابهی را پیاده سازی می کنند می توانند با دیگر اشیا درون  اینترفیس تعامل کنند. به عنوان مثال شئ car مثال قبل شاید اینترفیس IDrivable را  پیاده سازی کند(به عنوان قرار داد، اینترفیس ها معمولا با I شروع می شوند)، که  متدهای GoForward, GoBackward,Halt را تعیین می کند. کلاس های دیگر مانند Truck،  Forklift یا Boat شاید این انیترفیس را پیاده سازی کنند و بنابراین می توانند با شئ  Driver تعامل داشته باشند. شئ Driver از پیاده سازی انیترفیس که با آن تعامل دارد  بی اطلاع است.</p>
<p><strong>چندشکلی وراثتی (inheritance  polymorphism)<br />
</strong><br />
وراثت به شما امکان می دهد که اعمال یک کلاس از پیش تعریف  شده را، در یک کلاس جدید با هم ترکیب کنید و اعضای متفاوت مورد نیاز را در آن پیاده  سازی کنید. کلاسی که از کلاس دیگری ارث می برد &#8220;مشتق&#8221; آن کلاس، یا &#8220;وارث&#8221; آن کلاس  نامیده می شود. یک کلاس می تواند مستقیما فقط از یک کلاس ارث ببرد، که آن کلاس که  از آن ارث می برد را کلاس پایه (base class) می نامند. کلاس جدید اعضای مشابهی با  کلاس پایه دارد، و اعضای اضافی که مورد نیاز باشند می توانند افزوده شوند. به  علاوه، در کلاس جدید بوسیله overriding پیاده سازی کلاس پایه، اعضای پایه می توانند  تغییر کنند. کلاسهای وارث، همه ویژگی های کلاس پایه را نگه می دارند و می توانند با  دیگر اشیایی که نمونه هایی از کلاس پایه هستند تعامل کنند. به عنوان مثال،اگر کلاس  car یک کلاس پایه باشد، sportscar شاید کلاس مشتق شده از آن باشد. کلاس sportscar  شاید کلاس پایه برای کلاس مشتق شده ی دیگری باشد مثل کلاس ConvertibleSportsCar. هر  کلاس مشتق شده جدید، ممکن است اعضای اضافی را پیاده سازی کند، اما اعمالی که در  کلاس اولیه car تعریف شده همچنان باقی می مانند.</p>
<p><strong>Overloading  اعضا<br />
</strong><br />
overloading به شما امکان می دهد که چندین عضو با نام مشابه درست  کنید. هر عضوی که همنام با عضو دیگری است باید امضای متفاوتی داشته باشد.  overloading متداول ترین در متدهاست. شاید شما بخواهید عضوی درست کنید که بتواند  ستهای متفاوتی از پارامترها را بپذیرد.</p>
<div class="MultiLineCode">Public Sub Display(ByVal DisplayValue As  Integer)<br />
&#8216; Implementation Omitted</p>
<p>End Sub</p></div>
<p>این متد کاملا پذیرفتنی است. اما فرض کنیم که می خواهید به کلاینت اجازه دهید  اگر نیاز بود پارامتر duration را انتخاب کند. یا اینکه شاید بخواهید متد بتواند  مقادیر integer یا string را به عنوان پارامتر DisplayValue بپذیرد. در VB.Net  اجازه دارید پارامترهای اختیاری داشته باشید. چاره کار overloading است. overloadها  متدهای چندگانه هستند. متدهای overload شده باید امضا متفاوتی داشته باشد. اما نیاز  ندارند مقدار بازگشتی و نوع و یا سطح دسترسی مشابهی داشته باشد. وقتی متد overload  صدا زده می شود ، CLR(common language runtime) نوع آرگومانهای تحویل داده شده در  فراخوانی متد را امتحان می کند. این سپس لیست آرگومان را با فراخوانیها و امضاهای  Overload موجود به طور مناسبی تطابق می دهد. اگر هیچ Overload ای با نوع آرگومانها  تناسبی نداشته، یک خطا اعلام می شود.</p>
<p><strong>درست کردن متدهای  overload<br />
</strong><br />
شما می توانید متد overload شده را از راهی شبیه آنچه دیگر  متدها را می سازند درست کنید: بوسیله توصیف متد با یک نام، یک سطح دسترسی، یک نوع  بازگشتی، و یک لیست آرگومان. یک متد overload شده باید نامی شبیه متد موجودی داشته  باشد. اما باید امضای متفاوتی با آن داشته باشد. سطح دسترسی و نوع بازگشتی می تواند  مشابه و یا متفاوت باشد. مثال زیر متد overload شده را نشان می دهد.</p>
<div class="MultiLineCode">&#8216; This example demonstrates an overloaded  method.<br />
Public Sub DisplayMessage(ByVal I As  Integer)</p>
<p>MessageBox.Show(I.ToString())</p>
<p>End Sub</p>
<p>&#8216; This  method has the same name as the previous method, but is</p>
<p>&#8216; distinguishable  by signature</p>
<p>Public Sub DisplayMessage(ByVal S As String)</p>
<p>MessageBox.Show(S)</p>
<p>End Sub</p></div>
<p>دو متد تعریف شده، با نام یکسان اما امضا متفاوت و پیاده سازی جداگانه. وقتی یک  متد با نام DisplayMessage فراخوانی می شود، تست کننده runtime نوع آرگومان تحویل  داده شده را تعیین می کند. اگر یک string تامین شود. متدی که string می گیرد صدا  زده می شود. اگرinteger تعیین گردید متد Integer را فراخوانی می  شود.</p>
<p><strong>اینترفیس‌ها:<br />
</strong><br />
اینترفیس یک قرارداد است. هر شئ که پیاده  سازی می شود، برای تامین پیاده سازی اعضای تعیین شده در آن اینترفیس یک ضمانت نامه  اینترفیس می گیرد. اگر یک شئ نیاز به تعامل با اینترفیسی داشته باشد، می تواند با  آن با هر شئ‌ای که آن اینترفیس را پیاده سازی می کند تعامل داشته باشد .</p>
<p>یک  اینترفیس فقط اعضایی را تعریف می کند که بوسیله شیی که بعدا پیاده سازی خواهد شد  ساخته می شود.تعریف اینترفیس هیچ چیزی درباره ی پیاده سازی اعضا نمی دهد. فقط  پارامترهای که آنها می گیرند و نوع مقادیری که آنها برخواهند گرداند.پیاده سازی  اینترفیسها کاملا به پیاده سازی کلاس واگذار می شود.</p>
<p>بنابراین این امکان  دارد که در اشیا مختلف پیاده سازی های مختلف مهیجی از اعضای مشابه داشته باشیم. به  عنوان مثال، اینترفیسی به نام Ishape که یک متد CalculateArea تعریف می کند. کلاس  Circle این اینترفیس را برای محاسبه مساحت خود، به طریق متفاوتی با کلاس Square  پیاده سازی می کند. هر چند که یک شئ که نیاز به تعامل با IShape دارد می تواند متد  CalculateArea را فراخوانی کند و هر دوی Circle یا Square نتایج درستی می دهند.</p>
<p><strong>تعریف اینترفیسها<br />
</strong><br />
اینترفیس ها با کلمه کلیدی interface تعریف  می شوند.</p>
<div class="MultiLineCode">Public Interface IDrivable<br />
End Interface</div>
<p>این اعلان اینترفیس IDrivable را تعریف می کند. ، اما هیچ عضوی برای آن تعریف  نمی کند. متدهای یک عضو باید با امضای متد تعریف شود، اما بدون access modifier  هایی مثل public,private. و مانند اینها. access modifier ها ی یک اینترفیسaccess  modifier اعضای آن اینترفیس راتعیین می کنند.پس اگر یک اینترفیس Public داشته باشید  همه اعضایش هم باید هم public باشند. مثال زیر نشان می دهد که چطور متدها را به  اینترفیس اضافه کنید :</p>
<div class="MultiLineCode">Public Interface IDrivable<br />
Sub GoForward(ByVal Speed  As Integer)</p>
<p>Sub Halt()</p>
<p>Function DistanceTraveled() As  Integer</p>
<p>End Interface</p></div>
<p>همچنین شما می توانید خصوصیات را به اینترفیستان اضافه کنید. خصوصیت باید  ReadOnly یا WriteOnly تعریف شوند. مثال زیر را ببینید.</p>
<div class="MultiLineCode">Public Interface IDrivable<br />
&#8216; Additional member  definitions omitted</p>
<p>&#8216; This defines a read-only property.</p>
<p>ReadOnly  Property FuelLevel() As Integer</p>
<p>End Interface</p></div>
<p>اگرچه شما می توانید خصوصیات را در اینترفیسها تعریف کنید. اما نمی توانید  فیلدها را در آنها تعریف کنید. این شرط تضمین می کند که کلاسهایی که از طریق  اینترفیسها تعامل دارند به دادهای درونی یک شئ دسترسی نداشته باشند. اینترفیسها  همچنین می توانند رویدادها را تعریف کنند:</p>
<div class="MultiLineCode">Public Interface IDrivable<br />
&#8216; Additional member  definitions omitted</p>
<p>Event OutOfFuel(ByVal sender As Object, ByVal e As  System.EventArgs)</p>
<p>End Interface</p></div>
<p><strong>چند شکلی با اینترفیسها (Polymorphism with Interfaces)<br />
</strong><br />
هر شئ که  یک اینترفیس خاص را پیاده سازی می کند، می تواند با هر یک از اشیا دیگری که به آن  اینترفیس نیاز دارند، تعامل کند.</p>
<div class="MultiLineCode">Public Sub GoSomewhere(ByVal V As IDrivable)<br />
&#8216;  Implementation omitted</p>
<p>End Sub</p></div>
<p>این متد نیاز به یک پیاده سازی از اینترفیس IDrivable دارد. هر شئ که این  اینترفیس را پیاده سازی می کند می تواند به عنوان یک پارامتر به این متد پاس داده  شود. وقتی یک شئ درون اینترفیسش تعامل می کند، فقط اینترفیس اعضا دردسترس هستند.  شما همچنین می توانید به طور ضمنی اشیایی که اینترفیس خاصی را پیاده سازی می کنند  درست کنید. مثال بعد نشان می دهد چگونه شئ Truck اینترفیس IDrivable را طراحی می  کند. (توجه کنید در این مورد Truck باید IDrivable را پیاده سازی کند).</p>
<div class="MultiLineCode">Dim myTruck As New Truck<br />
Dim myVehicle As  IDrivable</p>
<p>&#8216; Casts myTruck to the IDrivable interface</p>
<p>myVehicle =  CType(myTruck, IDrivable)</p></div>
<p><strong>پیاده سازی اینترفیسها<br />
</strong><br />
در VB.net اینترفیسها بوسیله کلاسها و  ساختارها (structures) با کلمه کلیدی Implements پیاده سازی می شوند.</p>
<div class="MultiLineCode">Public Class Truck<br />
Implements IDrivable</p>
<p>&#8216;  Additional implementation code omitted</p>
<p>End Class</p></div>
<p>کلاسها می توانند چندین اینترفیس را پیاده سازی کند. اگر بخواهید کلاسی تعریف  کنید که چندین اینترفیس را پیاده سازی کند، می توانید اینترفیسها را با کاماهای جدا  کنید. مثال زیر را ببینید.</p>
<div class="MultiLineCode">Public Class Truck<br />
Implements IDrivable,  IFuelBurning, ICargoCarrying</p>
<p>&#8216; Additional implementation code  omitted</p>
<p>End Class</p></div>
<p>وقتی یک کلاس یا ساختاری یک اینترفیس را پیاده سازی می کند. شما باید برای هر یک  از اعضای آن اینترفیس پیاده سازی جداگانه ای انجام دهید. اگر اینترفیسهای چند گانه  پیاده سازی شوند، باید یک پیاده سازی برای هر عضو هر اینترفیسی انجام دهید.</p>
<p><strong>پیاده سازی اعضای اینترفیسها با VB.NET<br />
</strong><br />
در VB.Net یک عضو  کلاس با کلمه کلیدی Implements یک عضو اینترفیس را پیاده سازی می کند. عضو کلاسی که  عضو اینترفیس را پیاده سازی می کند باید امضایی مشابه آن چه در اینترفیس تعریف شده  داشته باشد، اما نیاز نیست که سطح دسترسی مشابهی با آن داشته باشد. مثال بعد نشان  می دهد چگونه یک عضو اینترفیس تعریف می شود.</p>
<div class="MultiLineCode">Public Interface IDrivable<br />
Sub GoForward(ByVal Speed  As Integer)</p>
<p>End Interface</p>
<p>Public Class Truck</p>
<p>Implements  IDrivable</p>
<p>Public Sub GoForward(ByVal Speed As Integer)</p>
<p>Implements IDrivable.GoForward</p>
<p>&#8216; Implementation  omitted</p>
<p>End Sub</p>
<p>End Class</p></div>
<p>عضو کلاسی که یک عضو اینترفیس را پیاده سازی می کند مجبور نیست که نام مشابه با  نام عضو اینترفیس داشته باشد مثال بعد یک پیاده سازی کاملا بی عیب متد IDrivable از  اینترفیس GoForward است.</p>
<div class="MultiLineCode">Public Sub Move(ByVal Speed As Integer)<br />
Implements  IDrivable.GoForward</p>
<p>&#8216; Implementation omitted</p>
<p>End Sub</p></div>
<p>هر فراخوانی متد GoForward از اینترفیس در مثال قبل متد Move را از کلاس پیاده  سازی می کند. همچنین شما می توانید سطح دسترسی متفاوتی را برای- متد کلاسی که متد  اینترفیس را پیاده سازی می کند &#8211; در نظر بگیرید. به عنوان مثال می توانید متد  Public اینترفیس را متد Private کلاس پیاده سازی کنید. اگر این روش را انجام دهید،  وقتی که دسترسی درون اینترفیس است متد Public می شود، اما وقتی دسترسی به عنوان  عضوی از کلاس است private می ماند.</p>
<p></span></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/vbnetprogramming880101-1699/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>آشنایی با کنترل DataList</title>
		<link>http://www.irandevelopers.com/programming/webcontroldatalist8712191959-1612/</link>
		<comments>http://www.irandevelopers.com/programming/webcontroldatalist8712191959-1612/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 16:30:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET - دات نت]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1612</guid>
		<description><![CDATA[در این مقاله کنترل DataList را بررسی خواهیم کرد. پیشنهاد میکنم برای خواندن و اجرای کد برنامه حتما از ویژوال استودیو استفاده کنید. کنترل DataList کنترلی برای نمایش داده ها با هر فرمتی میباشد. میتوانیم خاصیت DataSource این کنترل را یک Table از DataSet انتخاب کنیم و بعد با متد DataBind داده ها را از [...]]]></description>
			<content:encoded><![CDATA[<p>در این مقاله کنترل DataList را بررسی خواهیم کرد. پیشنهاد میکنم برای خواندن و اجرای کد برنامه حتما از ویژوال استودیو استفاده کنید.</p>
<p>کنترل DataList کنترلی برای نمایش داده ها با هر فرمتی میباشد. میتوانیم خاصیت DataSource این کنترل را یک Table از DataSet انتخاب کنیم و بعد با متد DataBind داده ها را از روی DataBase نمایش دهیم.</p>
<p>برای فهم بهتر این موضوع نمونه برنامه زیر را اجرا کنید:</p>
<p>[Code Behind - VB.NET]</p>
<p>Dim Conn As New OleDbConnection<br />
Dim Comm As New OleDbCommand<br />
Dim ds As New DataSet<br />
Dim adp As New OleDbDataAdapter</p>
<p>Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />
Conn.ConnectionString = &#8220;Your ConnectionString&#8221;<br />
Comm.CommandText = &#8220;Select Top 10 * from TableName&#8221;<br />
Comm.Connection = Conn<br />
adp.SelectCommand = Comm<br />
adp.Fill(ds, &#8220;Blog&#8221;)<br />
Conn.Close()<br />
DataList1.DataSource = ds.Tables(&#8220;Blog&#8221;).DefaultView<br />
DataList1.DataBind()<br />
End Sub</p>
<p>[HTML Code]</p>
<p>&lt;asp:DataList Width=&#8221;100%&#8221; id=&#8221;DataList1&#8243; runat=&#8221;server&#8221;&gt;<br />
&lt;ItemTemplate&gt;<br />
&lt;font color=&#8221;Orange&#8221;&gt;&lt;%# databinder.Eval(container.dataitem,&#8221;RowName&#8221;) %&gt;&lt;/font&gt;<br />
&lt;/ItemTemplate&gt;<br />
&lt;/asp:DataList&gt;</p>
<p>در کد HTML به جای RowName اسم فیلدی را که مایلید قرار دهید. در تگ &lt;ItemTemplate&gt; میتوانید فرمت نمایش داده ها را مشخص کنید. تگ های &lt;HeaderTemplate&gt; و &lt;FooterTemplate&gt; نیز برای فرمت عنوان و پایان لیست مورد استفاده قرار میگیرند. آرگومان دوم متد Eval نیز نام ستون مورد نظر را میگیرد.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/webcontroldatalist8712191959-1612/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>استفاده از Microsoft Agent در ویژوال بیسیک</title>
		<link>http://www.irandevelopers.com/programming/microsoftagentvisualbasic8712110947-1550/</link>
		<comments>http://www.irandevelopers.com/programming/microsoftagentvisualbasic8712110947-1550/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 06:17:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[ويژوال بیسیک]]></category>

		<guid isPermaLink="false">http://www.irandevelopers.com/?p=1550</guid>
		<description><![CDATA[Microsoft Agent چیست؟ Microsoft Agent یک ActiveX است که می شه با اون یک شخصیت رو کنترل کرد تا یک سری فرمانها و صحبتهای ما رو به گوش کاربر برسونه&#8230; اگر از محصولات Office استفاده کرده باشید حتماً اون کلیپسی رو که براتون ادا در میاره دیدین&#8230; بله به اون میگن Agnet&#8230; حالا میخوایم ببینیم [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Microsoft Agent چیست؟</strong><br />
Microsoft Agent یک ActiveX است که می شه با اون  یک شخصیت رو کنترل کرد تا یک سری فرمانها و صحبتهای ما رو به گوش کاربر برسونه&#8230;  اگر از محصولات Office استفاده کرده باشید حتماً اون کلیپسی رو که براتون ادا در  میاره دیدین&#8230; بله به اون میگن Agnet&#8230; حالا میخوایم ببینیم که چطوری میشه از اون  در برنامه های خودمون استفاده کنیم.</p>
<p>یکی از بهترین Agentهای طراحی شده  Merlin نام داره که اعمال زیادی رو براتون انجام میده و من هم خیلی بهش علاقه دارم  (;</p>
<p><strong>برنامه نویسی Microsoft Agent:</strong><br />
اول از همه شما احتیاج دارید  که این ActiveX رو در فرمتون تعریف کنید، برای این کار شما ابتدا باید یک Object  ایجاد کنید:</p>
<div class="Code">Public MyAgent As Object</div>
<p>خوب حالا شما باید Agent رو در  Event ،Load فرمتون صدا بزنید. Agent در یک فایل acs. ذخیره میشه که باید اونو Load  کنید. در زیر کدی برای صدا زدن آن آورده‌ام که البته باید به این نکته توجه کرد که  فایل acs. شما میتونه تو هر شاخه دیگه باشه که میتونید قبلاً تو هاردتون Search  کنید. و همچنین در کد زیر فرض شده شما ActiveX خودتون رو با نام Agent1 در فرمتون  قرار دادین:</p>
<pre class="Code">Agent1.Characters.Load "myagent", "c:\agent\Merlin.acs"
Set MyAgent = Agent1.Characters("myagent")</pre>
<p>حالا ناراحت این نباشید که ActiveX رو ندارین در آخر مقاله آدرس جاهایی  که میتونید اون رو بگیرید آورده‌ام. خوب حالا بعد از اینکه شما Object رو ساختین  حالا با یک دستور به سادگی میتونید Agent رو نمایش بدین:</p>
<div class="Code">MyAgent.Show</div>
<p>بعد از این دستور Merlin نمایش داده میشه  حالا چیکارش کنیم؟؟!! اگه شما Microsoft Text2Speech Engine رو تو ویندوزتون نصب  کرده باشید میتونید به Agent بگین که براتون صحبت کنه. پس به طریق زیر عمل کنید:</p>
<div class="Code">MyAgent.Speak &#8220;Look! I can speak!&#8221;</div>
<p>حالا شما میتونید  چند جمله مشخص کنید تا Agent براتون یکیشو بخونه (به دلخواه خودش!!!) برای اینکار  میتونید از | در بین جملاتتون استفاده کنید:</p>
<div class="Code">MyAgent.Speak &#8220;Hello|Hi&#8221;</div>
<p>همچنین شما میتونید Agent  خودتون رو به هر جای صفحه که خواستید ببرید برای اینکار هم میتونید اینطور بنویسید:</p>
<div class="Code">MyAgent.MoveTo 320, 240</div>
<p>البته به این نکته توجه داشته  باشید که شما فقط میتونید جای Agent رو در روی صفحه نمایش مشخص کنید و نمیتونید اون  رو تو یک فرم محدود کنید. برای اینکه توسط Agent خودتون فقط یک سری اطلاعات رو  بصورت متن به کاربر نشون بدین می تونید از دستور زیر برای اینکار استفاده کنید که  با استفاده از دستور زیر یک کادر شبیه به یک بالون بالای سر Agent باز میشه که متن  مورد نظرتون رو تو اون کادر مینویسه:</p>
<div class="Code">MyAgent.Think &#8220;I&#8217;m thinking&#8230;.hmm&#8230;E=MC2..Eureka!&#8221;</div>
<p>در ضمن یک سری دستورات برای اینکه بتونید این متن‌ها رو کنترل کنید هم  وجود داره که من تو <a href="../tutorials/view.aspx@id=3">مقاله‌ای</a> که برای  دلفی نوشتم آوردم که دیگه اینجا نیاوردم، شما میتونید اون دستورات را در اینجا هم  استفاده کنید.</p>
<p>خوب حالا طریقه کار کردن با Agent رو یاد گرفتیم حالا برای  مخفی کردن اون میتونید از دستور زیر استفاده کنید:</p>
<div class="Code">MyAgent.Hide</div>
<p>تا اینجا همه چیز در مورد صحبت کردن و  نمایش دادن متن بود حالا یک مقداری هم می پردازیم به حرکات و اعمال دیگر Agent که  خیلی هم سرگرم کننده هست. Merlin برای اعمال زیادی حرکات خاصی داره که بسیار جالب  هستند. مثلا برای Search ،Idle ،Think ،Greet ،Process و… می تونید از Merlin  بخواهید که براتون ادا در بیاره <img src='http://www.irandevelopers.com/wp-includes/images/smilies/icon_wink.gif' alt="icon wink استفاده از Microsoft Agent در ویژوال بیسیک" class='wp-smiley' title="استفاده از Microsoft Agent در ویژوال بیسیک" />  برای اینکار باید از دستور زیر استفاده کنید:</p>
<div class="Code">MyAgent.Play &#8220;animationname&#8221;</div>
<p>در دستور بالا بجای  animationname باید نام حرکتی که میخواهید براتون انجام بده رو بیارید که برای هر  Agent متفاوت هست. البته یک سری اعمال مثل اون چیزهایی که در بالا گفتم تقریبا تو  همه Agentها در نظر گرفته شده. شما خودتون هم میتونید برای کار خودتون یک Agent  طراحی کنید که برای اینکار می تونید از نرم‌افزارهایی که برای اینکار وجود دارند  استفاده کنید مثل Microsoft Agent Character Editor که میتونید از سایت Microsoft  دریافت کنید.</p>
<p>خوب این هم یک مقاله مقدماتی در مورد کار با MSAgent در  برنامه های VB که امیدوارم برای شروع خوب بوده باشه. از اونجایی که من مخالف آموزش  مطالب بصورت کامل و قدم به قدم هستم ادامه این راه جالب و سرگرم کننده را به عهده  خودتون میزارم و امیدوارم که بتونید نرم افزارهای خوبی با این تکنولوژی تهیه کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.irandevelopers.com/programming/microsoftagentvisualbasic8712110947-1550/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

