آموزش مصور ويژوال بيسيك visual basic در مجيد آنلاين

وضعیت
موضوع بسته شده است.

saalek110

Well-Known Member
هماهنگي

عكسهاي زير را در يك پوشه بنام ((1)) ذخيره كنيد:
d3.jpg
.
d2.jpg
.
d1.jpg

بعدا مي خواهيم داخل كدهاي برنامه آنها را صدا كنيم.
 
آخرین ویرایش:

saalek110

Well-Known Member
تغيير عكس با كدنويسي

کد:
' abzaare laazem : 3 dokmeh va yek image
' baa naam haye avalieh
' ----------------------
Private Sub Command1_Click()
Image1.Picture = LoadPicture("f:\1\d1.jpg")
End Sub
' ----------------------
Private Sub Command2_Click()
Image1.Picture = LoadPicture("f:\1\d2.jpg")
End Sub
' ----------------------
Private Sub Command3_Click()
Image1.Picture = LoadPicture("f:\1\d3.jpg")
End Sub

شما آدرس را بنا به هارد خود تغيير دهيد.


h1.gif

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

saalek110

Well-Known Member
رويداد غالب

وقتي روي دكمه ، ((دابل كليك)) مي كنيم،، آنگاه ، پنجره كد باز مي شود و آماده كدنويسي براي رويداد كليك مي شود، با نوشتن كدهايي كه در زير مي بينيد:
[ltr]Private Sub Command1_Click()

End Sub[/ltr]
اين عمل براي راحتي است. زيرا بيشتر ((دكمه)) ،براي كليك بر آن به كار مي رود .
در مورد ابزارهاي ديگر ، رويداد غالب متفاوت است. مي توانيد روي هر ابزار ، ((دابل كليك)) كنيد تا رويداد غالب را ببينيد. ((رويداد غالب)) يعني رويدادي كه معمولا برنامه نويس با آن رويداد با ابزار ارتباط برقرار مي كند.
------------
پس ((دكمه))، رويداد غالبش ، كليك است.
در مورد ((ايميج)) و ((پيكچر باكس)) ، هم ، ((رويداد غالب)) ، كليك است.
در مورد ((ليبل)) و ((ليست باكس)) هم همين طور.

اما در مورد ((تكست باكس))، رويداد غالب عبارت است از : ((چنج ))
[ltr]Change[/ltr]
يعني در برابر رويداد ((تغيير محتوا)) ، معمولا كدنويسي مي شود.
ابزار تعيين درايو و ابزار تعيين دايركتوري هم ، رويداد غالبشان ، همان ((چنج)) است.

ولي ((فايل ليست باكس)) ، رويدادغالب كليك دارد.
----------
دو ابزاري كه هنوز نگفته ايم ، و بزودي گفته خواهد شد، يعني ((چك باكس)) و ((آپشن باتم))
هم داراي رويداد غالب ((كليك)) هستند.

---------------
كلا نيازي به گفتن اين نبود ، فقط براي يادآوري گفته شد. زيرا براحتي رويداد انتخابي قابل تغيير است.
طبق شكل زير رويداد مورد نظر قابل انتخاب است.


h2.gif


فعلا راجع به ((انواع ديگر رويداد)) بحث نكرده ايم ، چون درگير ((معرفي محيط برنامه)) بوده ايم. ولي تقريبا معرفي محيط برنامه به پايان رسيده. بزودي با مثالهايي مناسب ، با رويدادهاي مختلف كار خواهيم كرد.
 
آخرین ویرایش:

saalek110

Well-Known Member
گزارش كار تابع سازي

من يك تابع ساختم به اين شكل:


a6.gif


مي بينيد كه با باز كردن پرانتز ، 3 ((آرگومان)) مي خواهد. ولي x پررنگ تر است.
(يعني شما داريد x را وارد مي كنيد- اگر x را وارد كنيد و ((ويرگول )) را بزنيد ، حرف y پر رنگ مي شود.)

در ادامه ، من براي امتحان ، 3 آرگومان ندادم بلكه فقط يك آرگومان دادم. نتيجه اينكه : موقع اجرا خطا گرفت.

بعد ، آمدم مثل تصوير زير ، از كلمه ((آپشنال)) استفاده كردم. (فرهنگ لغت: اختياري،غير واجب،مجاز،دل بخواه)


a7.gif



در تصوير بالا مي بينيد كه حرف z
[z]​
داخل آكلاد آمده. يعني اختياري است. يعني مي تونيد با دو آرگومان ، تابع را صدا كنيد. و z را ندهيد. ولي اگر با يك آرگومان بخواهيد صدا كنيد، خطا مي گيرد چون y اختياري نيست.


a8.gif


در عكس بالا همه داخل آكلاد هستند . من براي تجربه پرانتز را خالي بستم. هيچ خطايي نداد ولي عكسي هم لود نشد.
 
آخرین ویرایش:

saalek110

Well-Known Member
نتيجه گيري

تابع ها دو نوعند:
اول تابع هايي كه خودمان مي سازيم (مثل تابع سالك كه من در پست قبل ساختم).
دوم تابع هاي خود ((ويژوال بيسيك)) (مثل تابع ((لود پيكچر)) در پست قبل).
--------------------
در هر دو نوع بايستي آرگومانهاي لازم ، موقع صدا كردن تابع ، به آن داده شود.
 
آخرین ویرایش:

saalek110

Well-Known Member
كمي كاملتر

.

c5.gif

.
در تابعي كه من ساختم ، مي بينيد كه نوع ورودي هاي تابع را هم مشخص كرده ام.
نتيجه اجرا:
.

c6.gif

.
 

saalek110

Well-Known Member
...

[ltr]
Dim e As Integer
Private Sub Command1_Click()
For e = 1 To 5
Call saalek(e, "saalek")
Next e
End Sub

Private Sub saalek(x As Integer, y As String)
Print x, y
End Sub[/ltr]
در اين برنامه با يك حلقه ، تابع ،5 بار احضار شده.


a1.gif

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

saalek110

Well-Known Member
دو روش فراخواني تابع

[ltr]Private Sub Command1_Click()
Call saalek(1, 1)
End Sub

Private Sub Command2_Click()
saalek 2, 2
End Sub


Private Sub saalek(x, y)
Print x, y
End Sub[/ltr]


a2.gif

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

saalek110

Well-Known Member
تفاوت دو نوع روال

روال هاي
sub
&
function
تفاوتشان اين است كه اولي مقدار برنمي گرداند ولي دومي مقدار برمي گرداند.
.
اكثر روالهاي ((ويژوال بيسيك)) از نوع ((فانكشن)) هستند. مثل همين ((لود پيكچر)) كه دو پست بالاتر گفته شد.
--------------------
طريقه فراخواني تابع فانكشن
[ltr]meghdaar_bargashtii=esme_taabe(x,y,...)[/ltr]
شكل تابع
[ltr]
private function esme_taabe(x,y,..)
esme_taabe=x+y+z ... ' for example
end function[/ltr]
چون از تابع خسته شديد مثالهاي روال فانكشن را مي گذاريم براي بعد.
 
آخرین ویرایش:

Mikhak

Active Member
توابع بازگشتي

موضوع : توابع بازگشتي

شايد اين بحث يه كم زود باشه چون هنوز به اون صورت در مورد كد نويسي مثال نزده شده ولي چون توابع بازگشتي به بحث توابع مربوط ميشه خواستم حداقل يه شكل كلي از اون رو بگم تا در مراحل بعدي روش كار كنيم
زير برنامه هاي بازگشتي جزو بحثهايي هستن كه اكثر دانشجو هاي كامپيوتر باهاش مشكل دارن ولي ميشه به راحتي با رسم كردن يه ساختار درختي به نتيجه رسيد .
زیر برنامه های بازگشتی زیر برنامه هایی هستند که به نحوی خودشان ، خودشان را فراخوانی می کنند.
دو نوع زیر برنامه بازگشتی داریم:
1. مستقیم
که در این زیر برنامه نام خود تابع درون خودش آورده می شود (فراخوانی می شود)
مثال:
کد:
Function Fact(n As Integer)
.
.
.
Fact = Fact(n - 1)
.
.
.
End Function

2. غیر مستقیم

فرض کنید زیر برنامه a زیر برنامه b را فراخوانی کند و در زیر برنامه b هم زیر برنامه a فراخوانی شده باشد.
این هم نوعی بازگشتی است...
مثال:
کد:
Function Proc1 (m As Integer)
.
.
.
Proc1 = Proc2 (m)
.
.
.
End Function

Function Proc2 (n As Integer)
.
.
.
Proc2 = Proc1 (n-1)
.
.
.
End Function
البته در هر دو روش باید شرطی برای خاتمه کار در نظر گرفته شود .

مزاياي توابع بازگشتي:
1- كارايي برنامه بالا رفته و از كدنويسي كمتري استفاده ميشود .
2- خوانايي برنامه سخت ميشود ( واسه همين اكثر برنامه نويس هاي حرفه اي كه بخوان كد هاشون لو نره از توابع بازگشتي استفاده ميكنن)
و......

موضوع بعدي : آرايه ها

--------------------
سينا
 

Mikhak

Active Member
آرايه

آرایه ها:

آرایه لیستی از عناصر (المان های) هم نام و هم نوع می باشد که با استفاده از اندیس می توان به عناصر آن دست پیدا کرد.
وقتی در ویژوال بیسیک یک آرایه را تعریف می کنید باید به سه نکته توجه کرد:

1. اسم آرایه که از آن برای دستیابی به آرایه در برنامه استفاده می کنید.
2. این آرایه از چند عنصر تشکیل شده است. که این قسمت درون پرانتز قرار می گیرد.
3. و در آخر نوع داده های آرایه می باشد (صحیح ، رشته و...)

روش تعریف آرایه در ویژوال بیسیک:
کد:
Dim ArrayName(LowerValue To HigherValue) [As DataType]

اگر آرایه را در یک فرم تعریف می کنید از Dim یا Private استفاده کنید ولی اگر آن را در یک ماجول تعریف می کنید و می خواهید که هر رویه ای به آن دسترسی داشته باشد آرایه را با Public تعریف کنید.
اگر آرایه را در یک رویه یا تابع تعریف می کنید از Dim استفاده کنید.
ArrayName اسم آرایه می باشد که از قوانین نام گزاری متغییر ها پیروی می کند.
LowerValue اولین عنصر آرایه
HigherValue آخرین عنصر آرایه می باشد.
مشخص کردن مقدار اولیه آرایه الزامی نیست. اگر شما این کار را نکنید ویژوال بیسیک به طور خود کار آن را از صفر شروع می کند.
کد:
Dim sTestArray(0 To 10) As String

برابر است با

Dim sTestArray(10) As String

اگر می خواهید ویژوال بیسیک مقدار اولیه آرایه ها را از یک شروع کند در قسمت اعلان برنامه دستور زیر را بنویسید.
کد:
Option Base 1

مقدار دادن به آرایه همانند مقدار دهی به متغییر می باشد.
کد:
ArrayName(Index) = Value

مثال:
کد:
iArray(3) = iArray(7)
به راحتی مقدار آرایه با اندیس 7 درون اندیس 3 قرار می گیرد.

گرفتن سایز آرایه:
منظورم از سایز حدود بالا و پایین عناصر آرایه می باشد.
به عبارت دیگر فهمیدن این که چه تعداد عنصر در آرایه ذخیره شده است.
این کار به سادگی با استفاده از توابع LBound و UBound انجام میشود.(کران بالا و پایین)
سوال:
برای چه به این توابع نیاز است؟ آنها چه کاری انجام می دهند؟
پاسخ:
اگر می خواهید یک جعبه لیست را با عناصر یک آرایه پر کنیدو نمی دانید چه تعداد از آن عناصر را دارید باید از این توابع استفاده کنید
کد:
UBound(ArrayName, Dimension)
'ArrayName = the name of the array
LBound(ArrayName, Dimension)
Dimension یک عدد صحیح اختیاری می باشد که نشانگر تعداد ابعاد یک آرایه چند بعدی می باشد.

یک مثال ساده:
کد:
Dim Names(100) as string
LowerVal = LBound(Names) 'Get the lower boundary number.
UpperVal = UBound(Names) 'Get the upper boundary number.

For i = LowerVal To UpperVal
    List1.AddItem Names (i) 'Add each name from array according to how many stored in the Array
Next

موضوع بعدي : آرايه چند بعدي

-----------
سينا
 

saalek110

Well-Known Member
snail runner

بنام خدا
مي دانم كه خيلي كند پيش ميرويم. و اين براي بعضي از خوانندگان عذاب آور شده.
نيت من اين است كه ضعيف ترين خواننده ها هم بتواند استفاده كند. اگر مطالب اسلوموشن است ، خواننده قوي براحتي مي تواند توضيحات اضافه را رد كند، ولي اگر توضيحات خيلي كم باشد ، آنگاه خواننده ضعيف مجبور به كنار گذاشتن اين آموزش است.

شايد اصلا اين آموزش زماني كاربرد داشته باشد كه كار به انتها رسيده باشد و بعد ماهها ، كسي اين آموزش را پيدا كند و بخواند. آنگاه، وي كمتر احساس كشدار بودن ارائه مطلب را خواهد كرد.

بهر حال من خود هم در حال يادگيري هستم و اين باعث مي شود نواقص بسياري در كار باشد. ولي اميدوارم بعدها در كورسهاي ديگر اين نواقص از بين برود.

=========================
حتما يك نگاه به اين آموزش بياندازيد.
خيلي مولفش زحمت كشيده.
باعث مرور بحثهاي قبلي ميشه. و چيزايي كه هنوز نگفتيم ، هم كمي گفته شده.
--------------------.
 
آخرین ویرایش:

saalek110

Well-Known Member
رويدادها 2

[ltr]Dim r As Integer
Private Sub Form_Load()
r = 0
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
r = r + 20
Circle (X, Y), r
End Sub

Private Sub Form_Click()
r = 5
End Sub[/ltr]

a3.gif

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

saalek110

Well-Known Member
رويداد ها 3

[ltr]Dim r As Integer

Private Sub Form_Load()
r = 0
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
r = r + 20
Circle (X, Y), r
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
r = 5
CurrentX = X
CurrentY = Y
Print "mousedown"
End Sub[/ltr]

a4.gif

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

saalek110

Well-Known Member
رويداد ها 4

[ltr]Dim r As Integer

Private Sub Form_Load()
r = 20
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Circle (X, Y), r
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
r = 450
CurrentX = X
CurrentY = Y
Print "mousedown"
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
r = 100
CurrentX = X
CurrentY = Y
Print "mouseup"
End Sub[/ltr]

a5.gif

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

saalek110

Well-Known Member
معرفي دو ابزار ((چك باكس)) و ((آپشن باتون))


b1.gif


اين دو ابزار معمولا داخل ((فريم)) استفاده مي شوند. مخصوصا ((آپشن باتون)) . هر تعداد ((آپشن باتون)) كه داخل يك فريم باشد ، با هم كار مي كنند. يعني اگر يكي روشن باشه ، بقيه خاموشند.


b2.gif

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

saalek110

Well-Known Member
مثال براي ((چك باكس))

[ltr]Dim n As Integer

Private Sub Command1_Click()
n = 3

If Check1.Value = 1 Then
n = n + 10
End If

If Check2.Value = 1 Then
n = n + 100
End If

Text1.Text = n
End Sub[/ltr]

b3.gif

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

saalek110

Well-Known Member
همان مثال بالابدون دكمه

[ltr]Dim n As Integer


' -----------------------------------------
Private Sub Check1_Click()
n = 3

If Check1.Value = 1 Then
n = n + 10
End If

If Check2.Value = 1 Then
n = n + 100
End If

Text1.Text = n
End Sub
' -----------------------------------------
Private Sub Check2_Click()
n = 3

If Check1.Value = 1 Then
n = n + 10
End If

If Check2.Value = 1 Then
n = n + 100
End If

Text1.Text = n
End Sub[/ltr]

b4.gif

همين برنامه با يك روال زيباتر است.
[ltr]Dim n As Integer
' -----------------------------------------
Private Sub Check1_Click()
Call taabe_1
End Sub
' -----------------------------------------
Private Sub Check2_Click()
Call taabe_1
End Sub
' -----------------------------------------
Private Sub taabe_1()
n = 3

If Check1.Value = 1 Then
n = n + 10
End If

If Check2.Value = 1 Then
n = n + 100
End If

Text1.Text = n
End Sub
' -----------------------------------------[/ltr]
 
آخرین ویرایش:
وضعیت
موضوع بسته شده است.

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

بالا