رستم فیروززاده
تماس با من
پروفایل من
آرشیو وبلاگ
      آموزش زبان ویژوال بیسیک (برنامه نویسی Visual Basic)
بکارگیری ریسورس در VB6 نویسنده: رستم فیروززاده - سه‌شنبه ٢٦ خرداد ۱۳۸۸

حلقه For Each… Next

ساختار حلقه

For Each »VarName« in »ObjectName«

' User Statements

Next

این دستور با کلمات For Each شروع شده؛ متغیری را می پذیرد (VarName) و توسط کلمه In نام یک شیء که اشیاء دیگر در آن موجود است(ObjectName) را پذیرفته و با توجه به نوع داده متغیر، اشیاء همکلاس با متغیر را توسط کدهای درون دستور دستخوش تغییرات کاربر می نماید و با کلمه Next؛ دستور ، حلقه را مجدداً چک می کند و تا انتهای اعمال دستورات  حلقه ادامه می یابد.

در اینجا توضیحات بالا را جزء به جزء توضیح داده و یک کد خلق می کنیم.


حلقه For Each… Next

ساختار حلقه

For Each »VarName« in »ObjectName«

' User Statements

Next

این دستور با کلمات For Each شروع شده؛ متغیری را می پذیرد (VarName) و توسط کلمه In نام یک شیء که اشیاء دیگر در آن موجود است(ObjectName) را پذیرفته و با توجه به نوع داده متغیر، اشیاء همکلاس با متغیر را توسط کدهای درون دستور دستخوش تغییرات کاربر می نماید و با کلمه Next؛ دستور ، حلقه را مجدداً چک می کند و تا انتهای اعمال دستورات  حلقه ادامه می یابد.

در اینجا توضیحات بالا را جزء به جزء توضیح داده و یک کد خلق می کنیم.

یک شیء فرم در پروژه داریم، روی آن 5 پنج  شیء TextBox و 5 پنج شیء Label ایجاد می کنیم.

از آنجایی که ما می خواهیم سریع عمل کنیم از ریسورس برای تکمیل کردن این برنامه کمک می گیریم.

پس از ایجاد اشیاء بالا ؛ یک شیء ریسورس (Resource) به پروژه اضاف کنید.

با دابل کلیک بر روی شیء ریسورس آن را اجرا کرده و برای آن یک جدول رشته (String Table) به تر تیب زیر ایجاد کنید.(از کلید StringTable در نوار ابزار این شیء برای ایجاد جدول رشته استفاده می شود.)

Id

Farsi

101

نام

102

نام خانوادگی

103

شماره شناسنامه

104

تاریخ تولد

105

کد ملی

 

***{ دقت کنید شیء ریسورس را در پوشه پروژه ذخیره سازی کنید.}***

در این قسمت نیاز است توضیح دهیم که چه کاری قرار است انجام دهیم تا از روال توضیحی ما خسته نشوید.

ما می خواهیم توسط حلقه For Each… رشته های ثبت شده در جدول رشته ازشیء ریسورس را جایگزین متن اشیاء Label و جایگزین TooltipText از اشیاء TextBox در پروژه مان کنیم.

در این قسمت سعی کنید هر شیء Label با شماره ایجادش را برابر با شیء TextBox هم شماره ، ردیف کنید تا ظاهراً برنامه تان زیبا شود.

در این قسمت یک شیء ماجول (Module) به پروژه اضاف کنید. وارد ماجول کد این شیء شده و متدی با این

مشخصات ایجاد کنید.

نام متد SetStrings                        ورودی: یک ورودی بانام Frm و نوع داده Form (از کلاس فرم)

ساختار ::

Sub SetStrings (ByVal Frm As Form)

 

End Sub

پروسیجر بالا دارای یک ورودی (Argument) با نام Frm هستش که کلاس Form  به خود اختصاص داده که این بدین معناست که ورودی این متد یک شیء فرم را می پذیرد.

نحوه ایجاد دستوری که درون این سابروتین قرار است تایپ شود به شیوه زیر است.

For Each Ctl in Frm

 

Next

در این حلقه Ctl نام متغیر ما و Frm همان ورودی متد بالاست که وارد کردن آن الزامی است.

ورودی Frm چه کاری انجام می دهد؟

این ورودی نام یک فرم را دریافت کرده و کار شیء اصلی که اشیاء دیگر در آن قرار دارند  را بر عهده دارد. و متغیر Ctl می تواند هر شیءی در شیء Frm باشد.

چگونه تشخیص دهیم شیء ما (Ctl) دارای چه نوع کلاسی است؟ (تا بتوانیم خصوصیتهای آن را توسط دستور بالا تغیر دهیم.)

بدین منظور ویژوال بیسیک تابعی دارد با نام TypeName که کلاس اشیاء را برمی گرداند.

ساختار تابع::

 Function TypeName(VarName) As String

 Returns a string that provides information about a variable

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

این تابع توسط ورودی VarName نام متغیر را گرفته و نوع داده آن متغیر را به صورت رشته بر می گرداند.

نحوه اضاف کردن به دستور اصلی:

این دستور را شرطی ایجاد می کنیم که اگر نوع داده شیء ما Label بود پس متن درون آن (Caption) را به یکی از رشته های درون String Table تبدیل کن و اگر نوع داده شیء TextBox بود پس TooltipText از آن شیء را برابر یکی از رشته های درون String Table کن.

If  TypeName(Ctl)= "Label" Then

 

ElseIf TypeName(Ctl) = "TextBox" Then

 

End IF

اینجا را دقت کنید؛ کدامین رشته از String Table باید با خصوصیت هریک از اشیاء ما به دلخواه خودمان ست شود؟

به دستور زیر توجه کنید::

Ctl.Caption = LoadResString(Ctl.Tag)

این دستور راه را برای ما کوتاه می کند . و بدین نحو است متن درون هر شیء ست شود با رشته ای از جدول رشته شیء ریسورس توسط Id تایپ شده در خصوصیت Tag از آن شیء.

***{در ویژوال بیسیک هر شیء دارای خصوصیتی است با نام Tag که می تواند کارهایی از این قبیل را به عهده بگیرد.}***

این دستور در مورد Label  ها صدق می کند چرا که ما قصد داریم متن درون Label  ها را تغییر دهیم.

پس آن را درون قسمت ابتدایی از دستور شرطی مان قرار داده و از همین شیوه برای ست کردن رشته با خصوصیت TooltipText از اشیاء TextBox استفاده می کنیم؛

If  TypeName(Ctl)= "Label" Then

Ctl.Caption = LoadResString(Ctl.Tag)

ElseIf TypeName(Ctl) = "TextBox" Then

Ctl. TooltipText = LoadResString (Ctl.Tag)

End IF

در این قسمت دستورمان را جمع و جور می کنیم تا بدانیم چه کار کرده ایم...

Sub SetStrings (ByVal Frm As Form)

For Each Ctl in Frm

If  TypeName(Ctl)= "Label" Then

Ctl.Caption = LoadResString(Ctl.Tag)

ElseIf TypeName(Ctl) = "TextBox" Then

Ctl. TooltipText = LoadResString (Ctl.Tag)

End IF

Next

End Sub

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

در وحله اول خوب است متغیرمان را تعریف کنیم که آن را نادیده گرفتیم.

در قسمت بعد خوب است از هر گونه خطایی در مورد اشتباه وارد شدن شماره ID در خصوصیت Tag پیشگیری کنیم یعنی در صورت عدم صحت Id به غیر از عدد یا وارد نشدن آن پیامی به من برنامه نویس داده شود تا بدانم اشکال کارم از کجاست.

در اول متغیرمان را به این صورت تعریف می کنیم.(علامت | نشانگر یا می باشد.)

Dim Ctl As Control | Object | Variant

متغیر ما می تواند یکی از دو نوع داده Object یا Control را بپذیرد. (اگر نوع داده الحاق نشود بصورت پیشفرض Variant  است.)

در قسمت بعد شرطی طراحی می کنیم که در صورت غیر عددی وارد شدن ID در خصوصیت Tag از اشیاء

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

***{ ویژوال بیسیک برای خروج از هر حلقه و دستور دارای یک دستورمی باشد ؛ بالفرض مثال برای خروج از حلقه For از دستور Exit For استفاده می شود. در اینجا توسط Exit Sub  از کل پروسیجر خارج شده و تمامی دستورات درون آن را وانهاده و از انجام آنها سرپیچی میکند.}***

If IsNumeric (Ctl.Tag) = False Then Msgbox "Inserted Id in Tag Property of Someone Control is Error or its Empty": Exit Sub | Exit For

این دستور در این قسمت وارد می شود.

Sub SetStrings (ByVal Frm As Form)

Dim Ctl As Control

For Each Ctl in Frm

If IsNumeric (Ctl.Tag) = False Then Msgbox "Inserted Id in Tag Property of Someone Control is Error or its Empty": Exit Sub

If  TypeName(Ctl)= "Label" Then

Ctl.Caption = LoadResString(Ctl.Tag)

ElseIf TypeName(Ctl) = "TextBox" Then

Ctl. TooltipText = LoadResString (Ctl.Tag)

End IF

Next

End Sub

«تابع IsNumeric »

ساختار

Function IsNumeric(Expression) As Boolean

کار این تابع بررسی مقدار ورودی Expression می باشد و از جهت دارا بودن نوع داده خروجی منطقی (Boolean) در صورت عددی بودن مقدار ورودی، مقدار True(1) و در صورت غیر عددی بودن آن، مقدار False(0) را برمی گرداند.

در این صورت برنامه از اجرای باقی دستور سرپیچی میکند(بدلیل وارد شدن Exit Sub در پایان آن). ولی اگر دوست دارید بدانید Id را در مورد چه شی ءی اشتباه داده اید این دستور را جایگزین دستور قبل کنید.

If IsNumeric (ctl.Tag)= False Then MsgBox "Inserted Id in Tag Property of «" & ctl.Name & "» is Error or it is Empty": Exit Sub

دستور بالا به شما اعلان می کند خصوصیت Tag از کدام شیء را اشتباها Id داده اید یا خالی است.

Sub SetStrings (ByVal Frm As Form)

Dim Ctl As Control

For Each Ctl in Frm

If IsNumeric (ctl.Tag)= False Then MsgBox "Inserted Id in Tag Property of «" & ctl.Name & "» is Error or it is Empty": Exit Sub

If  TypeName(Ctl)= "Label" Then

Ctl.Caption = LoadResString(Ctl.Tag)

ElseIf TypeName(Ctl) = "TextBox" Then

Ctl. TooltipText = LoadResString (Ctl.Tag)

End IF

Next

End Sub

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

شی ء Form را انتخاب و بر روی آن دابل کلیک کرده تا وارد قسمت کد با پروسیجر پیش فرض از فرم با مضمون Form_Load شوید. سپس از سابروتین ساخته دست خود بدین شیوه استفاده کنید. (همسان با متد های داخلی ویژوال بیسیک.)

Private Sub Form_Load ()

SetStrings Me

End Sub

موفق باشید.

 

  نظرات ()
مطالب اخیر کانال تلگرام وبلاگ ایجاد Local Database برای پروژه و بکارگیری آن ( بصورت ویزاردی) Snippet و استفاده آن در VS دانلود نرم افزار Trust Information آشنایی با خصوصیات پروژه Project Properties ایده های شما در حیطه نرم افزار رایانه Object Browser ایجاد پروژه جدید در میحط VS 2008 بکار گیری متغیر ها در VB 9.0 آشنایی با محیط ویژوال استادیو 2008
کلمات کلیدی وبلاگ api (۱) components information (۱) convert functions (۱) create project (۱) download trust information (۱) local database (۱) object browser (۱) select case (۱) snippet (۱) vb 90 (۱) wizard local database (۱) ارایه ها (۱) ارتباط با پایگاه داده (۱) ایجاد پروژه جدید با vb (۱) پایگاه داده (۱) تابع (٢) تابع جعبه پیام (۱) تاریخ (۱) تبدیل نوع داده (۱) تلگرام (۱) توابعمرتبط با رشته (۱) تولید نرم افزار با ایده شما (۱) حلقه ها (۱) دانلود (۱) دانلود نرم افزار trust information (۱) دستور enum (۱) دستور with (۱) رابط کاربری برنامه نویس (۱) ریسورس (۱) زمان (۱) نرم افزار trust information (۱) ویژوال بیسیک 2008 (۱) کانال (۱)
دوستان من تولید نرم افزار از ایده های بکر شما دانلود نرم افزار Snippet Maker 2.0 Download Visual Studio SQL and XML Tutorial Quick Learn ايجاد حساب هاي كاربري براي برنامه نسخه آزمایشی نرم افزار ساخت فایل adm پرسش و پاسخ کانال تلگرام این وبلاگ ارتباط با نویسنده وبلاگ در تلگرام پرتال زیگور طراح قالب