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

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

Mikhak

Active Member
آرایه های چند بعدی

آرایه های چند بعدی
یک آرایه چند بعدی شبیه یک جدول می باشد. اگر حتی یک بار Microsoft Excel را دیده باشید می دونید چی می گم.
مثال:
کد:
Static iArray(1 To 2, 1 To 3) as integer

تمامی عناصر آرایه بالا:
کد:
iArray(1,1), iArray(1,2), iArray(1,3)
iArray(2,1), iArray(2,2), iArray(2,3)

اکثر اوقات از آرایه های یک بعدی استفاده می کنید ولی در مواقعی استفاده از آرایه های 2 یا 3 بعدی بهتر است. آرایه های بیش از 3 بعدی یک ایده خوب به حساب نمی آیند چون Debug کردن برنامه را به شدت سخت می کند.
آرایه های چند بعدی (منظور بیشتر 2 بعدی میباشد) به صورت خطی پر می شوند. برای مقدار دادن به عناصر آرایه های چند بعدی از حلقه های تو در تو استفاده می شود.
مثال جالب:
کد:
Option Explicit
Private Sub Form_Load()
Dim i, j As Integer
Dim TableArray(1 To 10, 1 To 10) As Integer

For i = 1 To 10
    For j = 1 To 10
        TableArray(i, j) = i * j
        Text1.Text = Text1.Text & TableArray(i, j) & vbTab
    Next j
    Text1.Text = Text1.Text & vbCrLf
Next i
End Sub

جدول ضربی ازاعداد را در آرایه دو بعدی قرار می دهیم.
قبل از اجرای این کد یک جعبه متن نسبتا بزرگ را در روی فرم قرار دهید و حتما در پنجره Properties جعبه متن خاصیت MultiLine رو برابر True کنید.
vbTab کلمه رزرو شده ای است که معادل 8 کاراکتر فضای خالی می باشد.
vbCrLf کلمه رزرو شده ای است که مکان نما را به خط بعد منتقل می کند.

اين مثال شايد يه كم زود باشه ولي فكر كنم با توضيحاتي كه دادم كافي باشه

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

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

MnavidM

Active Member
سلام.

این هم یک مرجع دیگر برای یادگیری ویژوال بیسیک .

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

بعد از گرفتن فایل اگه برنامه winrar داشتید که مشکلی نیست و فایل رو از حالت فشرده دربیارین .

اگر winrar نداشتید , پسوند فایل رو از rar به zip تغییر بدید و بعد اون رو Unzip کنید .

موفق باشید.
نوید.
 

پیوست ها

  • VBScript.rar
    335.1 کیلوبایت · بازدیدها: 240

Mikhak

Active Member
آرایه های پویا

آرایه های پویا:

اگر از آرایه ها به طور صحیح استفاده نکنید مقدار زیادی از حافظه تان به هدر می رود.
مثال:
کد:
Dim MyArray (10000) As Long
این آرایه تقریبا 40,004 بایت از حافظه را اشغال می کند.یعنی 4 * 10,001 می باشد چون نوع Long چهار بایت حافظه اشغال می کند.
الان ممکن است این عدد بزرگی نباشد ولی اگر 10 تا از این آرایه را در برنامه استفاده کنید 4,000,400 بایت حافظه مصرف می شود.
عاقلانه تر این است در ابتدا مقدار کمی را به آرایه تخصیص دهیم و زمان اجرا آن را تغییر سایز دهیم.درRunTime .
بله شما به سادگی این کار را در ویژوال بیسیک با تابع ReDim انجام می دهید.
آرایه هایی را که در زمان اجرا تغییر سایز می دهیم آرایه های پویا می نامند.
هنگامی که آرایه های پویا را تعریف می کنید لازم نیست مثل آرایه های ثابت عمل کنید. یعنی لازم نیست سایز را مشخص کنید.
کد:
Dim ArrayName() As DataType

تمام قضایا مثل بالاست فقط به ReDim توجه کنید.
کد:
ReDim ArrayName(LowerValue To HigherValue)

توجه:
عمل ReDim همیشه در زمان اجرا اعمال می شود و حتما باید قبلا تعریف شده باشد.
مثال:
کد:
Dim Names() As String

Sub Form1_Load()
    ReDim Names(1 To 10)
End Sub


این کد آرایه را در زمان اجرا تغییر سایز می دهد. حتما قبل از استفاده از آرایه پویا باید سایز آن را تعیین کنید.
یک مشکل بزرگ:
وقتی از ReDim استفاده می کنید تمامی مقادیر درون آرایه (اگر قبلا تغییر سایز داده باشیم) پاک می شود. در اکثر اوقات این آن چیزی که شما می خواهید نیست.
برای جلوگیری از چنین کاری از جمله زیر استفاده کنید.
کد:
ReDim Preserve ArrayName(LowerValue To HigherValue)

اگر آرایه افزایش یابد مقادیر خالی به انتهای آرایه و اگر کاهش یابد اطلاعات آخر از بین می روند.

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

saalek110

Well-Known Member
ادامه چك باكس

بجاي
if check1.value=1 then​
اكثر سايتهاي خارجي اينطوري نوشته اند:
if check1.value=vbchecked then​
هر دو حالت درست است. و فرقي نمي كند. منبع: يك ((پي دي اف)) آموزشي.
===================================
در کد بالا آمده به جای یک عدد از یک کانستانت خود ویژوال بیسیک استفاده کرده.
تعریف : کنستانت متغیری است که مقداری بهش داده می شود و نمی شود مقدارش را تغییر داد.
ما خودمان هم می توانیم کنستانت تولید کنیم. ولی اینجا بحث ((کنستانت های خود ویژوال بیسیک)) است.
من برای پیدا کردن آنها ابتدا پنجره Object Browser را باز کردم. مثلا از منوی کلیک راست در پنجره کدنویسی.
بعد کلمه vb را سرچ کردم و کلی vb آمد. منظورم از vb همان کنستانت ها هستند که با پیشوند vb شروع می شوند. می توانید به جای اعداد از اینها استفاده کنید. مثل مثال بالا که به جای عدد 1 از vbchecked استفاده کرده . این کنستانت حاوی عدد 1 است و فرقی در نتیجه برنامه ندارد.

a2.gif


در شکل بالا ستون سوم به ترتیب الفبایی مرتب است و من توانستم vbchecked را براحتی بیابم.
 
آخرین ویرایش:

saalek110

Well-Known Member
ادامه چك باكس

انتخاب اوليه ((وليو))
value
مي تواند حالت ((گري)) داشته باشد.

grayed

c1.gif


c2.gif

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

saalek110

Well-Known Member
ما مي توانيم ابزار هاي هم نام داشته باشيم

ما مي توانيم ابزار هاي هم نام داشته باشيم

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


g1.gif


با بله جواب مي دهيم. در شكل زير من 3 دكمه را با نام يكسان انتخاب كرده ام و چهارمي با نام متفاوت. البته مي دانيد كه چيزي كه روي دكمه نوشته شده ، ((كپشن)) است نه نام. ولي نامهاي هر 3 دكمه هم ((اسم واحد)) است كه در شكل زير ديده نمي شود.


g2.gif


حالا روي يكي از 3 دكمه ((دابل كليك)) مي كنيم تا پنجره كد باز شود. و همچنين روي دكمه چهارم همين كار را انجام دهيد. البته مي تونيد در همان پنجره كد ، با انتخاب ابزار مورد نظر(دكمه مورد نظر) و انتخاب رويداد مورد نظر(اينجا كليك) از بالاي پنجره كد، همين كار را انجام بدهيد.
در کد زيرچه تفاوتي مي بينيد(بين دكمه هاي سه قلو و دكمه اي كه اسمش متفاوت است؟

کد:
Private Sub c1_Click(Index As Integer)
'[COLOR="SeaGreen"]roydaad baraye 3 dokmeye ham naam[/COLOR]
End Sub

Private Sub Command1_Click()

End Sub
جواب: روال مورد نظر ورودي دارد. و ورودي ((ايندكس)) است.
حال برويد به ((صفت ايندكس)) مربوط به دكمه هاي 3 قلو نگاه كنيد. خواهيد ديد كه بطور اتوماتيك از ((صفر تا 2 )) شماره گذاري شده.


g3.gif


و اگر ((ايندكس)) دكمه چهارم را نگاه كنيد ، مي بينيد كه خالي است.
 
آخرین ویرایش:

saalek110

Well-Known Member
ادامه چك باكس

saalek گفت:
[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]

12.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]
.

همين برنامه بالا را جور ديگر هم مي شود نوشت:
دو ((چك باكس)) خود را همنام مي كنيم. و از ايندكس براي كدنويسي استفاده مي كنيم.
[ltr]Dim n As Integer
Private Sub Check_Click(Index As Integer)
n = 3
If Check(0).Value = 1 Then
n = n + 10
End If
If Check(1).Value = 1 Then
n = n + 100
End If
Text1.Text = n
End Sub[/ltr]
نتيجه همان برنامه بالا مي شود.
b8.gif
 
آخرین ویرایش:

saalek110

Well-Known Member
آپشن باتون

saalek گفت:
همين برنامه بالا را جور ديگر هم مي شود نوشت:
دو ((چك باكس)) خود را همنام مي كنيم. و از ايندكس براي كدنويسي استفاده مي كنيم.
[ltr]Dim n As Integer
Private Sub Check_Click(Index As Integer)
n = 3
If Check(0).Value = 1 Then
n = n + 10
End If
If Check(1).Value = 1 Then
n = n + 100
End If
Text1.Text = n
End Sub[/ltr]
.

در مورد اين كنترل(آپشن باتون) ، برنامه هايي كه من پيدا كردم ، بيشتر از ((ايندكس)) براي كد نويسي استفاده كرده اند. مثلا همان برنامه اي كه با ((چك باكس)) در بالا نوشتيم، اين طور مي شود:
[ltr]Dim n As Integer
Private Sub Option_Click(Index As Integer)
n = 3
n = n + (10 ^ (Index + 1))
Text1.Text = n
End Sub[/ltr]

b9.gif


البته بهتر است ((صفت وليو)) يكي از آپشن باتون ها، از طريق پنجره پراپرتي ، به ((ترو)) تغيير يابد تا مثل شكل بالا اول كار هر دو آپشن باتن، انتخاب نشده نباشند.
------
در مورد ((چك باكس)) ، صفت ((وليو)) در پنجره پراپرتي، 3 حالته بود.(گري هم داشت) ولي براي آپشن باتم دو حالته است.
يكي ((ترو)) ، و ديگري ((فالس)) .
-----
برنامه اي ديگر ديدم كه بجاي ((صفت ايندكس)) براي كدنويسي ، از ((صفت كپشن)) آپشن باتون استفاده كرده بود. يعني كپشن آن را مساوي چيزي قرار داده بود.
Size = option(Index).Caption​
البته در آن برنامه كپشنها چيزي بود كه مناسب استفاده بود نه مثل برنامه ما بي معني.بهر حال نوشتن اين گونه برنامه ها ساده است.
 
آخرین ویرایش:

saalek110

Well-Known Member
گروه سازي چك باكسها و آپشن باتون ها

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

saalek110

Well-Known Member
ادامه آپشن باتم

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

saalek110

Well-Known Member
معرفي دو ابزار ديگر - خط و شكل

شكل:


d1.gif


مهم ترين صفت آن ((شيپ)) است كه تعين كننده نوع شكل ترسيمي است.
[ltr]Shape Determines whether the shape is a square, rectangle,
circle, or some other choice.[/ltr]


d2.gif


صفت بعدي ، ((فيل استيل)) است كه تعيين مي كنه شكل توپر است يا نه و نوع توپر شدن.
[ltr]FillStyle Determines the interior pattern of a shape. Some
choices are: solid, transparent, cross, etc.[/ltr]

d3.gif

[ltr]BackColor Determines the background color of the shape (only
used when FillStyle not Solid.
BackStyle Determines whether the background is transparent or
opaque.
BorderColor Determines the color of the shape's outline.
BorderStyle Determines the style of the shape's outline. The border
can be transparent, solid, dashed, dotted, and
combinations.
BorderWidth Determines the width of the shape border line.[/ltr]
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/​
خط:


d4.gif


كارش اين است كه خطهايي با كلفتي و طرح و رنگ متفاوت ميكشه.
[ltr]BorderColor Determines the line color.
BorderStyle Determines the line 'shape'. Lines can be transparent,
solid, dashed, dotted, and combinations.
BorderWidth Determines line width.[/ltr]
از 3 صفت بالا ، اولي رنگ
دومي ممتد بودن با نقطه-نقطه و غيره.
سومي كلفتي خط.
d5.gif

در شكل مي بينيد كه خط ((تعداد صفات )) كمي دارد. بخاطر اين است كه كارش ساده است.
در شكل زير خطي با ضخامت 1 و به شكل ((نقطه _ نقطه)) رسم شده.

d7.gif

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

saalek110

Well-Known Member
ادامه خط و شكل- زير يا رو بودن

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


d8.gif


در شكل زير ، عكس بالايي ، پيكچرباكس است كه زير نمي رود . ولي عكس پاييني ، ايميج است كه مي تواند زير يا بالاي دايره باشد. ليبل ها هم همان طور كه مي بينيد ، يكي زير و يكي بالاي دايره است و از طريق همان ((فرمت -- اوردر)) تنظيم شده.
آپشن باتم و تكست باكس هم زير نمي روند.


d6.gif

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

saalek110

Well-Known Member
كومبو باكس


c3.gif

اولين صفت مهم آن ، ((استيل)) است.


c4.gif


مي بينيد كه سه حالت داره. در حالت ((سيمپل)) ، اصلا ليست پايين افتادني باز نميشه. در حالت ((دروپ داون)) ، حالت پايه(ديفالت است) كه ليستش باز ميشه. حالت سوم ، ((دروپ داون ليست)) ، به كاربر اجازه وارد كردن داده به جعبه كامبو را نمي دهد.
---------
برنامه نويسي: يك دكمه و يك تكست باكس و يك كومبو باكس به فرم بيافزاييد. (و با همان نامهاي اوليه) سپس كد زير را درج كنيد در پنجره كد:
[ltr]Private Sub Command1_Click()
Call Combo1.AddItem(Text1.Text)
End Sub[/ltr]
نتيجه اجرا را در زير مي بينيد:( در برنامه زیر 3 بار در تکست باکس حروف a و b و c وارد شده و دکمه زده شده)

c5.gif


اما با كد زير، نمايش هم در همان مرحله انجام ميشه:
[ltr]Private Sub Command1_Click()
Call Combo1.AddItem(Text1.Text)
Combo1.Text = Text1.Text
End Sub[/ltr]


c6.gif


كمي كاملتر، وقتي از تكست باكس منتقل ميشه به كومبو ، تكست باكس پاك ميشه. و يك دكمه پاك كردن كومبوباكس هم گذاشتيم.يادتون نره يك دكمه به فرم اضافه كنيد. اسمش را عوض نكنيد ولي اگر خواستيد ، مثل من كپشن ها را عوض كنيد تا قشنگ تر بشه.
[ltr]Private Sub Command1_Click()
Call Combo1.AddItem(Text1.Text)
Combo1.Text = Text1.Text
Text1.Text = ""
End Sub

Private Sub Command2_Click()
Combo1.Clear
End Sub[/ltr]


c7.gif


اضافه كردن متدي ديگر:
برنامه زير كارش اين است كه هر يك از اعضاي كومبوباكس كه انتخاب بشوند، و دكمه ((رموو)) زده شود، آن عضو حذف مي شود.
[ltr]
Private Sub Command1_Click()
Call Combo1.AddItem(Text1.Text)
Combo1.Text = Text1.Text
Text1.Text = ""
End Sub

Private Sub Command2_Click()
Combo1.Clear
End Sub

Private Sub Command3_Click()
Call Combo1.RemoveItem(Combo1.ListIndex)
combo1.text=combo1.list(0)
End Sub[/ltr]

c8.gif


====================
بحث ییشتر راجع به کومبوباکس در این تاپیک:
کار با لیست باکس و کومبو باکس در وی بی
 
آخرین ویرایش:

saalek110

Well-Known Member
اسكرول بار

يك اسكرول بار افقي را ...


d1.gif

روي فرم قرار دهيد و كد روبرو را وارد پنجره كد كنيد.
[ltr]Private Sub HScroll1_Change()
Print HScroll1.value;
End Sub[/ltr]
با كليك بر انتهاي اسكرول بار اعدادي بر فرم چاپ مي شود.

d2.gif

ولي اسكرول بار حركت طبيعي ندارد. پس يك ماكزيمم براي اسكرول بار تعريف مي كنيم.
[ltr]Private Sub Form_Load()
HScroll1.Max = 10
End Sub

Private Sub HScroll1_Change()
Print HScroll1.value;
End Sub[/ltr]

d3.gif

حالا تا 10 تا كه برود سمت راست ، آخر مسيرش است.
 
آخرین ویرایش:

saalek110

Well-Known Member
ادامه اسكرول بار

اسكرول بار صفتي دارد به نام ((لارج چنج))
largechange
مي توانيد از پنجره پراپرتي آن را تغيير دهيد.


e1.gif


من مقدارش را كه ((يك)) بود ، به ((2)) تغيير دادم. حالا اگر در محلي كه در شكل زير نشان داده شده كليك كنيد، به اندازه ((مقدار لارج چنج يعني 2 واحد)) حركت داريم.


e2.gif

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

saalek110

Well-Known Member
ادامه اسكرول بار

در برنامه بالا ، ما از رويداد ((چنج)) استفاده كرديم. ولي ممكن است كاربر دكمه اسكرول را بگيرد و آن را به اين طرف و آن طرف بكشد. در اينجا رويداد ((اسكرول)) فعال مي شود.
[ltr]Private Sub Form_Load()
HScroll1.Max = 20
End Sub
Private Sub HScroll1_Scroll()
Print "scroll"; HScroll1.Value
End Sub[/ltr]

بهتر است هر دو رويداد را پوشش دهيم. يعني هم برنامه براي رويداد ((چنج)) بنويسيم هم برنامه براي رويداد ((اسكرول)) ، تا كاربر هر طور كه از اسكرول بار استفاده كرد ما برايش جواب داشته باشيم.


e3.gif

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

saalek110

Well-Known Member
معرفي دو صفت تب ايندكس و تب استاپ


e4.gif


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

saalek110

Well-Known Member
معرفي دو صفت تولتيپ تكست و تگ

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


f1.gif


اما در مقابل،
صفت ديگر،
((صفت تگ)) يك توضيح است كه براي خودمان كاربرد دارد.


f2.gif

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

mahboobe

New Member
سلام
اگه ميتونيد لطفا يه كتاب در مورد ويژوال بيسيك به من معرفي كنيد.ميخوام اين برنامه نويسي را ياد بگيرم.
مرسي
 
آخرین ویرایش:

saalek110

Well-Known Member
معرفي كتاب

mahboobe گفت:
سلام
اگه ميتونيد لطفا يه كتاب در مورد ويژوال بيسيك به من معرفي كنيد.ميخوام اين برنامه نويسي را ياد بگيرم.
مرسي
من هم هنوز كتاب نخريدم. راهنمايي كنيد.
 
آخرین ویرایش:
وضعیت
موضوع بسته شده است.

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

بالا