آموزش ویژوال بیسیک توسط حمید احمدی

hamidahmadi

Active Member
تعیین آیکون جعبه پیام

با استفاده از آرگومان دوم تابع ( )MsgBox میتوانید آیکون جعبه پیام را هم تغییر دهید

جدول ذیل آیکونهای جعبه پیام را نشان می دهد






دستور ذیل جعبه پیامی می سازد با سه دکمه Yes و No و Cancel و آیکون علامت سئوال.
کد:
[color=blue]
intResponse = MsgBox("Is the Printer on?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "Question Box") [/color]

توجه
- معمولا" ثابتهای نامگذاری شده با پیشوند vb شروع می شوند.
- با فعال کردن دکمه های پیش فرض فوکوس را به آن دکمه می دهیم
- اگر یک مقدار را به آرگومان دوم اضافه کنیم شمایل را مشخص می کنیم و آنها را با استفاده از علامت + اضافه می کنیم.
 

hamidahmadi

Active Member
گرفتن اطلاعات با تابع ( )InputBox

این تابع به کاربر اجازه می دهد که در فیلد ورودی برنامه مقداری را تایپ کند و سپس برنامه به وی پاسخ می دهد
جعبه ورودی تمام خصوصیات جعبه پیام را دارد و فقط دارای یک فیلد اضافی برای گرفتن جواب کاربر است. البته برنامه نویس هیچ کنترلی بر دکمه های جعبه ورودی ندارد و یک جعبه ورودی همیشه دارای دو دکمه Ok و Cancel می باشد. جعبه ورودی آیکون هم نمیتواند داشته باشد

شکل کلی تابع InputBox ( ) به شکل ذیل است
کد:
[color=green]
strAnswer = inputBox(strPrompt[ , strTitle][ , strDefault][ , intXpos][, intYpose])
[/color]


این تابع یک مقدار از نوع Variant برمیگرداند و همیشه میتوان آن را به صورت یک رشته بکار برد و فقط اولین آرگومان اجباری است


- strPrompt پیام یا سئوالی است که در جعبه ورودی دیده خواهد شد و حداکثر 1024 کاراکتر میتواند داشته باشد
- strTitle عنوان پنجره ورودی می باشد
- strDefault مقداری که به صورت پیش فرض در فیلد ورودی ظاهر می شود
- intXpos و intYpos مختصات ظاهر شدن پنجره جعبه ورودی روی صفحه را مشخص میکند
- در تابع inputBox اگر مقدار برگشتی Cancel بود ویژوال بیسیک یک رشته به طول صفر برمیگرداند که میتوان با دستور If آن را کنترل کرد


کد:
[color=green]
Private Sub Command1_Click()
strAnswer = InputBox("What is the customer's name?", "Get name")
If (strAnswer <> "") Then
lblHamid.Caption = strAnswer
Else
lblHamid.Caption = "شما بايد يک نام تايپ کنيد"
End If
End Sub 
[/color]
 
آخرین ویرایش:

hamidahmadi

Active Member
کار با صفحه کلید

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

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

1- KeyPress
2- KeyDown
3- KeyUp
 

hamidahmadi

Active Member
رویداد KeyPress

- این رویداد با پائین رفتن کلید تحریک می شود و اگر کاربر دستش را روی کلید نگه دارد با تکرار کاراکترهای این رویداد هم تولید خواهد شد
- این رویداد اکثر کاراکترهای ASCII ( بخوانید اسکی ) را به جز کاراکترهای صفر تا 31 جدول اسکی تشخیص می دهد.
- رویداد KeyPress دارای یک آرگومان از نوع Integer می باشد
- آرگومان KeyAscii معادل ASCII کلید زده شده در جدول اسکی می باشد و با یک دستور If و یا Select Case می توان آن را تست کرد

کد:
[color=red]
Private Sub Text1_KeyPress(KeyAscii As Integer)

End Sub
[/color]

- با KeyPress میتوان کلید زده شده را تغییر داد
- با کد ذیل اگر در تکست باکس حرف A را بزنید حرف B تایپ می شود


کد:
[color=red]

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 65 Then '65 is ASCII for A
KeyAscii = 66 '66 is ASCII for B
End If
End Sub
[/color]
 

hamidahmadi

Active Member
رویداد KeyDown

این رویداد مانند KeyPress با پائین رفتن کلید تحریک می شود ولی جزئیات بیشتری را در اختیار برنامه نویس قرار می دهد
مثلا" رویداد KeyPress برای کلیدهای حروف بزرگ و حروف کوچک کدهای متفاوتی را بر میگرداند ولی رویداد KeyDown برای این حروف کدهای یکسانی برمیگرداند ولی آرگومانی دارد که حالات کلید Shift را نشان می دهد

شکل کلی رویداد KeyDown به قرار ذیل می باشد

کد:
[color=green]
Private Sub txtHamid_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub
[/color]

- آرگومان KeyCode کد کلید زده شده و آرگومان Shift وضعیت کلیدهای Shift و Ctrl و Alt می باشد
- آرگومان KeyCode همیشه معادل حرف بزرگ کلید زده شده است که اگر دقت نشود این وضعیت می تواند موجب سردرگمی شود

مزیت رویداد KeyDown به قرار ذیل است :

- تقریبا" تمام کلیدهای صفحه کلید را تشخیص می دهد. کلیدهائی مانند Home و End و کلیدهای پیکانی و غیره
- وضعیت باینری آرگومان Shift نوع کلید Shift و Ctrl و Alt را مشخص می کند
- برای تست این آرگومان باید آن را با عدد 7 And کرد ( And بیتی )

مثالی در این رابطه قبلا" زده شده است دوباره آنرا تکرار میکنیم

کد:
[color=green]
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim intShift As Integer
intShift = Shift And 7
Select Case intShift
Case 1
lblShift.Caption = "Shift"
Case 2
lblShift.Caption = "Ctrl"
Case 3
lblShift.Caption = "Shift & Ctrl"
Case 4
lblShift.Caption = "Alt"
Case 5
lblShift.Caption = "Shift & Alt"
Case 6
lblShift.Caption = "Alt & Ctrl"
Case 7
lblShift.Caption = "Shift & Ctrl & Alt"
End Select
End Sub
[/color]
 
آخرین ویرایش:

hamidahmadi

Active Member
رویداد KeyUp

این رویداد تقریبا" مانند رویداد KeyDown می باشد با این تفاوت که هر وقت کاربر کلیدی را که فشرده رها کند رویداد KeyUp تحریک خواهد شد

شکل کلی رویداد KeyUp به قرار ذیل می باشد

کد:
[color=green]
Private Sub txtHamid_KeyUp(KeyCode As Integer, Shift As Integer)

End Sub
[/color]

باید توجه داشت که هر رویداد KeyPress تشکیل شده است از یک رویداد KeyDown و KeyUp
 

hamidahmadi

Active Member
دستور SendKeys

این دستور می تواند ضربات کلید را به برنامه بفرستد. از نظر برنامه هیچ تفاوتی بین دستور SendKeys و ضربات واقعی صفحه کلید وجود ندارد

شکل کلی این دستور چنین است

کد:
[color=green]
SendKeys strKeystrokes [, blnWait]
[/color]

- رشته strKeystrokes همان کاراکترهائی است که باید ارسال شود
- اگر آرگومان منطقی blnWait که معمولا" قید نمی شود False باشد روال اجرا کننده این دستور بلافاصله بعد از ارسال کاراکترها مجددا" کنترل برنامه را در دست می گیرد ولی اگر این آرگومان True باشد سیستم تا پردازش کامل کاراکترها کنترل را به روال اجرا کننده دستور SendKeys باز پس نخواهد داد
- برای ارسال کاراکترهای خاص ^ + - ، % باید آنها را داخل یک جفت آکولاد { } قرار دهید
- تنها کلیدی که نمیتوان با این دستور به برنامه فرستاد کلید Print Screen می باشد

مثال :

کد:
[color=green]
SendKeys "7 {+} 5"
SendKeys "{Home}
[/color]

کد:
[color=Blue]
Private Sub Command1_Click()
Text1.SetFocus
SendKeys "{home}+{end}"
End Sub
 [/color]
 

hamidahmadi

Active Member
تقدم عکس العمل یا خاصیت KeyPreview فرم

وقتی کاربر کلیدی را می زند اگر خاصیت KeyPreview فرم به True تنظیم شده باشد ابتدا فرم فوکوس را دریافت میکند در غیر اینصورت فرم فعال یا کنترلی که فوکوس را در اختیار دارد
 

hamidahmadi

Active Member
جعبه چک Check box

با جعبه چک می توان گزینه هائی را در اختیار کاربر قرار داد که کاربر می تواند با کلیک بر روی آنها آنها را علامت دار کند و یا با کلیک بر روی گزینه های علامت دار آنها را از حالت انتخاب خارج کند
خاصیت Value جعبه انتخاب مشخص می کند که آیا گزینه انتخاب شده است و یا نه ؟ بعنی اگر این خاصیت عدد 1 باشد جعبه چک انتخاب شده و اگر عدد صفر باشد جعبه چک انتخاب نشده است.
کد:
[color=blue]
Private Sub cmdHamidAhmadi_Click()

If chkHamid.Value = 1 And chkAhmadi.Value = 0 Then
lblHamidAhmadi.Caption = "You Select Hamid"
ElseIf chkHamid.Value = 0 And chkAhmadi.Value = 1 Then
lblHamidAhmadi.Caption = "You Select Ahmadi"
ElseIf chkHamid.Value = 1 And chkAhmadi.Value = 1 Then
lblHamidAhmadi.Caption = "You Select HamidAhmadi"
Else
lblHamidAhmadi.Caption = "You Not Select HamidAhmadi"
End If

End Sub
[/color]
 

hamidahmadi

Active Member
دکمه گزینه یا دکمه رادیویی Option button

- به کاربر اجازه می دهد که فقط یک گزینه از میان گزینه های مختلف را انتخاب کند و اگر گزینه دیگری را انتخاب کنید گزینه انتخاب شده قبلی از حالت انتخاب خارج می شود
- خاصیت Value دکمه گزینه مشخص می کند که آیا گزینه انتخاب شده است یا نه ؟
- برای اینکه هیچکدام از دکمه ها در هنگام Load شدن انتخاب شده نباشند در Form_Load خاصیت Value همه دکمه ها را False می کنیم
- هیچگاه یک دکمه گزینه را تنها بر روی فرم نگذارید زیرا اگر انتخاب شود دیگر نمیتوان آن را از حالت انتخاب خارج کرد
 

hamidahmadi

Active Member
کنترل قاب

- این کنترل مکانیست برای قرار گرفتن کنترل های دیگر
- اگر بخواهیم بر روی فرم چند دکمه گزینه فعال داشته باشیم از فریم استفاده میکنیم بدین صورت که بر روی فرم چند فریم گذاشته و بر روی هر فریم چند دکمه گزینه می گذاریم
- به کنترل فریم کانتینر نیز گفته می شود
- برای اینکه کنترل های دیگر را بر روی فریم بگذاریم می بایست یک بار بر روی کنترل کلیک کرده و آن را گرفته و روی فریم بگذاریم تا جزء فریم شود

خواص مهم کنترل قاب عبارتند از :

- BorderStyle که اگر این خاصیت 0 باشد فریم نامرئی بوده و تشخیص آن از سایر قسمتهای فرم ناممکن می باشد و اگر 1 باشد مرئی خواهد بود
- Caption عنوانی که در بالای فریم ظاهر می شود
- Font فونت عنوان فریم
 
آخرین ویرایش:

hamidahmadi

Active Member
ساختار برنامه

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

- روال عمومی روالیست که به هیچ کنترلی وابسته نیست و اساسا" وظایف کلی و عمومی مانند محاسبات را بر عهده دارد
- روال کلاس یک شی خاص است وراهیست برای تعریف انواع داده

اگر در پنجره کد توجه کنید دو لیست به نامهای Object ( تلفنظ کنید آبجکت به معنای شی ) و Procedure ( تلفظ کنید پروسیدور به معنای روال یا طرز عمل ) وجود دارد
لیست Object تمام کنترل های موجود روی فرم مربوطه را نشان می دهد. در بالای این لیست آیتمی وجود دارد به نام (General) به معنای عمومی که پرانتزهای اطراف آن نشان دهنده این است که این یک کنترل نیست بلکه یک قسمت ویژه است . تعاریف مدول و روالهای عمومی در این قسمت قرار می گیرند
 

hamidahmadi

Active Member
فراخوانی روال های عمومی

روال های عمومی می توانند تابع یا سابروتین باشند . هنگامی که قطعه کد تکراری بلندی داریم می توانیم آن را در یک روال عمومی گذاشته و در برنامه اجرا کنیم . اما چگونه ؟

مثال :
کد:
[color=blue]
Private Sub Clear_Flags()
'Hide all flags shown
imgEngland.Visible = False
imgItaly.Visible = False
imgUSA.Visible = False
imgFrance.Visible = False
End Sub
[/color]
حال برای فراخوانی این کد در برنامه کافیست این دستور را استفاده کنیم
کد:
[color=blue]
Call Clear_Flags()
[/color]
حتی ساده تر نیز می توانیم
کد:
[color=blue]
Clear_Flags()
[/color]
 

hamidahmadi

Active Member
روال های Private و Public

- روالی که به صورت خصوصی تعریف شده باشد و فقط در همان مدول قابل استفاده باشد روال Private می باشد.
- روالی که به صورت عمومی تعریف شده باشد و در تمام مدول های برنامه قابل استفاده باشد روال Public می باشد.

اگر روالی در مدول فرم قرار داشته باشد هر برنامه ای که بخواهد از آن کد استفاده کند مجبور است که آن فرم را ضمیمه کند لذا برای اجتناب از اینکار لازمست که روال های عمومی را در یک مدول کد قرار داد. یک مدول کد میتواند تعداد زیادی روال عمومی داشته باشد برای اینکار لازمست از منو گزینه Project و سپس Module را انتخاب کنید. و سپس برنامه با فراخوانی این کدها ( مدول کد را به صورت عمومی تعریف کنید تا از سایر مدولهای برنامه قابل استفاده باشد ) از آن استفاده می کند
 

hamidahmadi

Active Member
میدان دید متغیرها

متغیرها هم مانند روال ها میدان دید دارند

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

کد:
[color=blue]
Private Sub cmdTest_Click()
Dim strHamid As Integer
End Sub
[/color]

اگر آن متغیر را در قسمت اعلان عمومی ( General ) تعریف کنیم آن متغیر در دیدرس کل مدول فرم می باشد
کد:
[color=blue]
[color=red](General)[/color]    [color=red](Declarations)[/color]    
Dim strHamid As Integer
 [/color]

و اگر بخواهیم این متغیر در کل مدول ها دیده شود در قسمت اعلام عمومی ( General ) از لغت کلیدی Public استفاده می کنیم


کد:
[color=blue]
[color=red](General)[/color]    [color=red](Declarations)[/color]    
Public strHamid As Integer
[/color]
 

hamidahmadi

Active Member
انتقال داده ها

وقتی لازم باشد که دو روال داده ها را به اشتراک بگذارند روال احضار کننده می تواند متغیرهای محلی خود را به روال احضار شده ارسال کند. برای انتقال متغیرها باید آن ها را درون پرانتزهای روال فهرست کنید

انتقال داده ها با مرجع یا با مقدار
اگر از کلمه کلیدی ByRef ( انتقال بوسیله مرجع ، پیش فرض خود ویژوال بیسیک ) در انتقال داده ها استفاده شود این بدان معناست که روال دوم میتواند داده ها را دستکاری کند ولی اگر از کلمه ByVal ( ارسال با مقدار ) استفاده شود روال دوم قادر به دستکاری داده ها نیست

مثال :



 
آخرین ویرایش:

hamidahmadi

Active Member
تفاوت تابع و سابروتین

تفاوت تابع و سابروتین نه تنها در دستورات ابتدائی و انتهائی آنهاست بلکه تابع می تواند یک مقدار را به روال احضار کننده برگرداند.

اعلان تابع باید از فرمت زیر پیروی کند
کد:
[color=blue]
Public | Private Function funcName ([Arg As datatype][,…]) As dataType
[/color]

یک تابع میتواند نسبت به مدول خود هم خصوصی و هم عمومی باشد. لازم نیست تابع آرگومان داشته باشد ولی معمولا" اکثر توابع حداقل یک آرگومان دارند. اگر تابعی هیچ آرگومانی نداشت میتوان پرانتزها راحذف کرد
مقدار As data Type که در سابروتین ها وجود نداشت به علت مقدار برگشتی توابع نوع داده مقدار برگشتی تابع را اعلان می کند
در بدنه تابع باید مقدار برگشتی را به یک متغیر نسبت دهید که نام آن با نام تابع یکی می باشد. این متغیر نیازی به اعلان ندارد و می توانید از آن به راحتی استفاده کنید
 

hamidahmadi

Active Member
ارسال کنترل ها به توابع و سابروتین ها

متغیرها تنها نوع داده ای نیستند که می توان آنها را به روال ها ارسال کرد ، مقدار کنترل ها را هم می توان به روال ها فرستاد اما قبل از آن که بتوان در یک روال با کنترل ها کار کرد باید بتوانیم بطریقی نوع کنترل را تشخیص دهیم
برای تشخیص نوع کنترل ارسال شده به یک روال از دستور As data Type استفاده می شود

کد:
[color=blue]
If TypeOf object Is Objecttype Then
یکی از دستوران ویژوال بیسیک
Else
یکی از دستوران ویژوال بیسیک 
End If
[/color]
 

hamidahmadi

Active Member
توابع داخلی ویژوال بیسیک

ویژوال بیسیک دارای صدها توابع داخلی می باشد که تاکنون با LoadPicture و MsgBox و InputBox آشنا شده ایم حال با مهمترین آنها آشنا می شویم
 

hamidahmadi

Active Member
توابع عددی

ساده ترین توابع عددی توابع تبدیل اعداد صحیح هستند

کد:
Int (عدد )      
قسمت صحیح آرگومان را که به سمت پائین گرد شده می برد 

مثال : 
Int(6.8)   
جواب عدد 6 می شود

Int(-6.8)  
جواب عدد 7-  می شود         

Fix (عدد )              
قسمت صحیح برش خورده آرگومان را برمی گرداند 

مثال :
Fix(6.8) 
جواب عدد 6 می شود 

Fix(-6.8)  
جواب عدد 6-  می شود 

Abs(مقدار مطلق  )  
 همان مقدار مثبت یک عدد است 

مثال :
Abs(19) 
جواب عدد 19 می شود 

Abs(-19) 
جواب عدد 19 می شود 

Abs ( -13  -   50 ) 
جواب عدد 63 می شود 
در اینجا عدد 50 به اضافه 13 می شود اما جواب که 63-  باید بشود عدد مثبت 63 می شود

Abs ( 13  -  50 ) 
جواب عدد 37 می شود 
در اینجا عدد 50 منهای  13 می شود و جواب که  37  می شود

در تابع () Abs فرقی نمی کند که عدد اول بزرگتر باشد یا عدد بعدی
 

جدیدترین ارسال ها

بالا