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

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

saalek110

Well-Known Member
معرفي ابزاري ديگر - تايمر

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


b5.gif


اگر روي تايمر دو بار كليك كنيد، ((رويداد تايمر)) آماده كدنويسي ميشه. من كد زير را مي نويسم. ابزارهاي لازم هم يك تايمر و يك تكست باكس.(با نامهاي اوليه) .
قبل از اجرا هم از طريق پنجره پراپرتي اينتروال را 1000 ، هزار مي كنم كه ميشه هر يك ثانيه ، يك اكشن.
[ltr]Dim t As Integer
Private Sub Timer1_Timer()
t = t + 1
Text1.Text = t
End Sub[/ltr]

b6.gif


در شكل بالا تايمر ديده نمي شود و فقط عملكرد آن ديده مي شود. و كارش اين است كه هر يك ثانيه ، عدد داخل تكست باكس را يكي اضافه مي كند.

البته ((اينتروال)) مثل هر صفت ديگر،داخل برنامه هم قابل مقدار دهي است.
[ltr]Dim t As Integer

Private Sub Form_Load()
Timer1.Interval = 1
End Sub

Private Sub Timer1_Timer()
t = t + 1
Text1.Text = t
End Sub[/ltr]

b7.gif

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

saalek110

Well-Known Member
Option Explicit

Option Explicit
ميشه گفت مخفف اينه:
"All variables used must be explicitly declared"​

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

[ltr]Option Explicit
Dim t As Integer[/ltr]


b8.gif

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

saalek110

Well-Known Member
تفاوت روال ساب با روال فانكشن - شروع بحث رنگ


a3.gif


در تصوير بالا مي خواهيم به فرم رنگ بدهيم. ما داريم از يك تابع استفاده مي كنيم به نام ((آر-جي - بي)) . همان طور كه در تصوير مي بينيد ، اين تابع 3 ورودي مي خواد كه هر 3 اينتيجر يعني عدد صحيح هستند. و آن 3 عدد را به عنوان ميزان قرمزي، سبزي ، و آبي بودن رنگ در نظر ميگيره.
همچنين در تصويرمي بينيد كه خروجي اش يك عدد لانگ است.
براي نمونه من 3 عدد(كه بايد كمتر از 255 باشد) به تابع مي دهم.
[ltr]Private Sub Command1_Click()
Form1.BackColor = RGB(150, 200, 220)
End Sub[/ltr]
يادتون نره كه اين رويداد دكمه است ، پس يك دكمه به فرم اضافه كنيد. حالا من آن را اجرا مي كنم.


a4.gif


روالهايي كه مقدار بازگشتي دارند ، يا بايستي در جاي مورد استفاده قرار بگيرند(مثل مثال بالا) تا مقدار بازگشتي آنها مورد استفاده قرار بگيره يا اينكه
آنها را مساوي متغيري كه قبلا تعريف كرديم قرار دهيم.
[ltr]dim rang as long
rang=rgb(150,200,220)[/ltr]
ولي روالهايي كه مقدار بازگشتي ندارند(مثل روال ساب) ، فقط صدا ميشه و كارشو انجام ميده و ميره.
مثلا روالي كه دو عدد را بر هم تقسيم مي كنه و پرينتش مي كنه، با يك روال ساب ميشه نوشت. ولي اگر بخواهيم باقيمانده را برگردونه بايد يك فانكشن تعريف كنيم. و موقع صدا كردن با دو راه باقيمانده را تحويل مي گيريم. يا جايي قرار ميديم تابع را كه باقيمانده اونجا استفاده داره يا يك متغير تعريف مي كنيم و آن را مساوي مقدار تابع(كه همان باقيمانده است) قرار مي دهيم.
در مورد فانكشنهايي كه خودمان مي سازيم كه مي دونيم چي برمي گردونه ، پس متغير مناسبش(صحيح ، لانگ ، رشته ، ....) را مي دونيم چيه.
اما در مورد تابع هاي آماده ويژوال بيسيك بايد دقت كرد. در مثال رنگ بالا كه ساده بود قضيه.
 
آخرین ویرایش:

saalek110

Well-Known Member
ادامه رنگ

[ltr]Dim rang As Long

Private Sub Command1_Click()

rang = RGB(0, 0, 0)
Print "RGB(0 , 0 , 0) ", rang

rang = RGB(255, 255, 255)
Print "RGB(255, 255, 255) ", rang
End Sub[/ltr]

g4.gif

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

saalek110

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


e4.gif


در تصوير بالا مي بينيم كه تابع راندوم(تصادفي) ، يك عدد براي ورودي مي خواهد. ولي اين عدد را مي توانيم ندهيم، از آنجا اين را مي فهميم كه عدد ، داخل كروشه است. خروجي آن يك عدد سينگل است.
كار اين تابع اين است كه عددي بين صفر و يك به شكل تصادفي تحويل ميدهد.
[ltr]Dim d As Single

Private Sub Command1_Click()
d = Rnd()
Print d
End Sub[/ltr]

e5.gif

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

saalek110

Well-Known Member
Mikhak گفت:
Boolean: جهت مقادير درست يا نادرست
• Byte: جهت مقادير صحيح صفر تا ۲۵۵ (تنها مقادير مثبت)
• Char: جهت مقادير نويسه ها يا حروف يونيکد
• Date: جهت مقادير تاريخ و زمان بين اول ژانويه ۰۰۰۱ و ۳۱ دسامبر ۹۹۹۹
• Double: جهت مقادير اعشاری با دقت مضاعف
• Integre: جهت مقادير صحيح بين +۲,۱۴۷,۴۸۳,۶۴۷ و -۲,۱۴۷,۴۸۳,۶۴۸ (۴ بايت)
• Long: جهت مقادير صحيح بين -۹,۲۲۳,۳۷۲,۰۳۶,۸۵۴,۷۷۵,۸۰۸ و +۹,۲۲۳,۳۷۲,۰۳۶,۸۵۴,۷۷۵,۸۰۷ (۸ بايت)
• Short: جهت مقادير صحيح بين -۳۲,۷۶۸ و +۳۲,۷۶۷ (۲ بايت)
• Single: جهت مقادير اعشاری با دقت واحد
• String: جهت مقادير رشته ای با تعداد حروف صفر تا دو ميليارد حرف

پر کاربردترين انواع داده ای عبارتند از Integer، Date، Boolean و String.
----------------------
سينا
اينتيجر و لانگ هر دو مقادير صحيح است ولي دومي خيلي اعداد بزرگتري را پوشش ميده.
سينگل براي اعداد اعشاري.
-----------
حالا واضح تر شد كه چرا تابع ((آر - جي - بي)) خروجي لانگ ميده، چون چند ميليون خروجي اش بزرگه.
و تابع ر((راندوم)) چون عدد اعشاري ميده بيرون ، بايد خروجي اش ، سينگل باشه.

اين مطلب ميخك پست 63 بود. فكر كنم كم -كم لازمه يك فهرست تهيه بشه.

يك فهرست در پست شماره 4 گذاشتم. شايد كمي در جستجو كمك كنه.
 
آخرین ویرایش:

saalek110

Well-Known Member
تابع مقدار صحيح - تابع اينتيجر


e7.gif


تابع مقدار صحيح ، عددي كه بهش بدهيم را ، اعشارش را حذف مي كنه و عدد بي اعشار را تحويل ميده.
[ltr]
Private Sub Command1_Click()
Print Int(12.34)
End Sub[/ltr]

e6.gif

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

saalek110

Well-Known Member
بازي بااعداد - راندم - مقدار صحيح

همان طور كه گفتيم ((تابع راندوم)) عددي بين ((صفر و يك )) مي دهد.
اگر اين عدد حاصله را در 10 ضرب كنيم ، ميشود عددي بين ((صفر تا ده)) يعني كوچكتر از ده. كه اعشار هم داره.
و اگر مقدار صحيح از اين عدد بگيريم، ميشه عددي بين ((صفر تا 9)) .
[ltr]Dim a As Single
Dim b As Single
Dim c As Long

Private Sub Command1_Click()
a = Rnd()
b = 10 * a
c = Int(b)
Print "rnd="; a; " 10*rnd="; b; " int(10*rnd)="; c
End Sub[/ltr]
((آ)) و ((ب)) ، سينگل تعريف شده ، چون قراره اعشار توش بريزيم.
((سي)) لانگ شده ، چون ((تابع مقدار صحيح))، به آن ((عدد صحيح)) تحويل ميده. حالا چرا اينتيجر نگرفتم؟ من به فكرم كه عدد رنگ را در ((سي)) بزارم. كه چند ميليونه و بزرگه.


e8.gif


همين برنامه با تايمر و ضرب در 16 ميليون بجاي 10
[ltr]
Dim a As Single
Dim b As Single
Dim c As Long

Private Sub Form_Load()
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
a = Rnd()
b = 16000000 * a
c = Int(b)
Print "rnd="; a; " 16000000*rnd="; b; " int(16000000*rnd)="; c

End Sub[/ltr]

البته من حدودي كار كردم . راه درست اينه:
I = Int((Imax - Imin + 1) * Rnd) + Imin

e9.gif


عدد حاصل را به عنوان رنگ فرم برمي گزينيم.
[ltr]Dim a As Single
Dim b As Single
Dim c As Long

Private Sub Form_Load()
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
a = Rnd()
b = 16000000 * a
c = Int(b)
Form1.BackColor = c

End Sub[/ltr]

f1.gif

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

saalek110

Well-Known Member
ادامه رنگ

بخاطر سپردن عددي بين صفر و بالاي 17 ميليون ، تقريبا غير ممكن است.
تابع ((آر جي بي)) به اين منظور ساخته شده تا كار ساده تر شود.
[ltr]
Private Sub Form_Load()
Form1.BackColor = RGB(255, 0, 0)
End Sub[/ltr]

g5.gif

.

a3.gif

[ltr]vbblack=rgb(255,255,255)

vbred=rgb(255,0,0)
vbgreen=rgb(0,255,0)
vbblue=rgb(0,0,255)

vbcyan=rgb(0,255,255)
vbmagenta=rgb(255,0,255)
vbyellow=rgb(255,255,0)

vbwhite=rgb(0,0,0)

Private Sub Form_Load()
Form1.BackColor = vbRed
End Sub[/ltr]

نقل از :
فراخواني توابع و روتين ها در ويژوال بيسيک
هر کاری میکنم دستور زیر اجرا نمیشه فقط ارور میده
کد:
Private Sub Command1_Click()
MsgBox ("You Must Enter a Valid Number", vbOKCancel + vbCritical, "Error")
End Sub
در مورد کاربرد پارانتر دقت کنید، وقتی شما یک تابعی مثل MsgBox را بدون استفاده از مقدار بازگشتی آن استفاده می کنید
باید به شکل یک روتین Sub فراخوانی بشه یعنی با فرمان Call و یا بدون استفاده از پارانتر :

کد:
MsgBox "You Must Enter a Valid Number", vbOKCancel + vbCritical, "Error"

Call MsgBox("You Must Enter a Valid Number", vbOKCancel + vbCritical, "Error")

پارانتر هایی که شما در دور پارامتر ها گذاشته اید، اونها را به یک پارامتر تبدیل کرده که خطا محسوب می شه.
 
آخرین ویرایش:

saalek110

Well-Known Member
فراخواني با مراجعه - فراخواني با مقدار

دو نوع فراخواني
تابحال فراخواني هاي ما به روش ((فراخواني با مراجعه)) بوده.
در اين روش داده در دسترس است و مقدار آن ممكن است تغيير كند.
[ltr]Option Explicit
Dim x As Integer
Dim y As Integer

Private Sub Command1_Click()
x = 1
Call saalek(x)
Print "x="; x
End Sub

Private Sub Command2_Click()
y = 3
Call saalek(y)
Print "y="; y
End Sub

Private Sub saalek(z As Integer)
z = z + 1
End Sub[/ltr]

a5.gif

.
در روالي كه ساخته ايم ، مي بينيد كه امانت رعايت نشده و داده ارسالي تغيير كرده. براي حفظ امانت داري روال آن را به اين شكل بنويسيد:
[ltr]Option Explicit
Dim x As Integer
Dim y As Integer

Private Sub Command1_Click()
x = 1
Call saalek(x)
Print "x="; x
End Sub

Private Sub Command2_Click()
y = 3
Call saalek(y)
Print "y="; y
End Sub

Private Sub saalek(byval z As Integer)
z = z + 1
End Sub[/ltr]

a6.gif

.
اين روش را فراخواني با مقدار مي گويند. روش قبلي ، فراخواني با مراجعه بود.
.
 
آخرین ویرایش:

saalek110

Well-Known Member
پوشش دهي خطاها

يك ((دكمه)) و يك ((تكست باكس)) به فرم بيافزاييد و كد زير را اجرا كنيد:
[ltr]Private Sub Command1_Click()
Text1.Text = Text1.Text + 10
End Sub[/ltr]
اين برنامه كارش ايته كه عدد داخل ((تكست باكس)) را مي خونه و با 10 جمع مي كنه.
ولي اگر كاربر ، بجاي عدد ، حروف وارد كنه و دكمه را بزنه ، خطا ميده و برنامه ميپره بيرون.پس كد خود را به شكل زير تكميل مي كنيم:
[ltr]Private Sub Command1_Click()

On Error GoTo a
Text1.Text = Text1.Text + 10

Exit Sub

a:
Print " hi user; write numbers no alfabet!!"

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

g6.gif




برنامه بعدي
مي خواهيم ببينيم متغيرهاي ((اينتيجر)) و ((لانگ)) ، تا چه عددي را بدون خطا تحمل مي كنند.

کد:
Option Explicit
Dim myinteger As Integer
Private Sub Command1_Click()

On Error GoTo a
myinteger = 0
t:
myinteger = myinteger + 1
GoTo t

Exit Sub

a:
Print "myinteger="; myinteger
End Sub

g7.gif


کد:
Option Explicit
Dim mylong As Long
Private Sub Command1_Click()

On Error GoTo a
mylong = 0
t:
mylong = mylong + 1000
GoTo t

Exit Sub

a:
Print "mylong="; mylong
End Sub

g8.gif


نقل از :
دسترسی به خطا ها در ويژوال بیسيك

چجور ميشه به خطا ها دسترسي پدا كرد يعني برو به خطاي فلان شماره در ويژوال بسيك را ميگم

the_king:

اگر می خواهید یک خطای خاصی را ایجاد کنید (شرایط بروز خطا شبیه سازی شوند) کافی است که
شماره خطا را بدانید و انرا با Err.Raise فراخوانی کنید مثلا :

کد:
Err.Raise 7
خطای شماره 7 مربوط به کمبود حافظه و Out of memory است و منجر به بروز این خطا می شود.

اما اگر می خواهید هنگامی که خطایی رخ داد، خودتان در مورد نمایش یا عدم نمایش آن تصمیم بگیرید
و یا پیغامی که دوست دارید را نمایش دهید، آنگاه بایستی این موارد را در نظر بگیرید :
اول در منوی Visual Basic وارد قسمت Tools و سپس Options شوید.
حالا وارد بخش General شوید و تنظیم Error Trapping را روی Break on unhandled Errors قرار دهید.
اینطوری فقط خطاهایی توسط Visual Basic نمایش می یابند که خود شما کنترلی روی آنها نداشته باشید.
فرض کنیم که یک تابع داریم به نام Divide که دو پارامتر ورودی از هر نوعی (Variant) را بر هم تقسیم می کند
و حاصلش را بر می گرداند :

کد:
Private Function Divide(Number1, Number2)
    Divide = Number1 / Number2
End Function

اما این کد ما در حالتهایی موجب بروز خطا می شود، مثلا اگر من به عنوان دو پارامتر ورودی مقادیر "a" و "b" را به
تابع ارسال کنم، یا مقدار پارامتر دوم صفر باشد یا حاصل تقسیم خیلی بزرگ بشود که در خروجی تابع جا نگیرد.

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

کد:
Private Function Divide(Number1, Number2)
    On Error GoTo Label_Error
    Divide = Number1 / Number2
    Exit Function
Label_Error:
    MsgBox "Error number : " & Err.Number & vbNewLine _
    & "Error description : " & Err.Description
End Function

در این کدهایی که من به تابع اضافه کردم، هر گاه که خطایی رخ بدهد به برچسب Label_Error می پرد تا خطای
به تله افتاده را مدیریت کنیم. اما اگر خطایی رخ ندهد بایستی با استفاده از Exit Function از تابع خارج شویم.
من در قسمت مدیریت وقفه یک پیغامی را به کاربر نمایش می دهم که شماره خطا و توضیحات آنرا نشان می دهد.
این قسمت می تواند به دلخواه تغییر کند، هیچکاری انجام ندهد (از نمایش خطا صرف نظر شود) یا کار خاصی که
می خواهید را انجام دهد.
 
آخرین ویرایش:

saalek110

Well-Known Member
منو اديتور


طرق دسترسي به منو اديتور. شورتكات آن هم، همان طور كه در تصوير مشخصه، ((كنترل ئي)) است.

c2.gif


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

c1.gif


c3.gif


يك نام و يك كپشن به منوي خود بدهيد. مثل:
[ltr]name=menucolor
caption=color[/ltr]
نتيجه موقع اجرا چنين است:

c4.gif


منو ها هم مثل ابزارها ، صفاتشان در ((پنجره پراپرتي)) به نمايش در ميايد:


c5.gif


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


c6.gif


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


c7.gif


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

کد:
Private Sub menu_blue_Click()
Form1.BackColor = vbBlue
End Sub

من برای باز شدن رویداد بالا در فرم در حالت طراحی روی منوی blue کلیک کردم.
 
آخرین ویرایش:

saalek110

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

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


c8.gif


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

saalek110

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

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

a1.gif


a2.gif


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

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


a3.gif


a4.gif


همچنين در پنجره منواديتور مكاني براي وارد كردن ايندكس داريم. با وارد كردن ايندكس مي توانيد منوها را با هم آرايه كنيد. وقتي چند منو آرايه شوند، اجازه دارند نام يكسان داشته باشند.

تمرين: من يك منو ساختم با 3 زير منو. و زيرمنوها را ايندكس دادم و هم نام كردم. فقط يك ابزار قابل كدنويسي است نه هر 3 زيرمنو.


a5.gif


a6.gif


اين مثال را براي اين مي زنم كه ((ابزارهاي آرايه شده)) تمرين شود. وگرنه قبلا آرايه و تنظيم ايندكس گفته شده.
كدنويسي : ما به رويداد كليك واكنش نشان مي دهيم.(يعني 3 ابزار(منو) آرايه شده واكنش نشان مي دهد.)
براي اين كار مي گوييم وابسته به ايندكسها (كه من صفر تا 2 گرفتم) ، يك عدد چاپ شود.
[ltr]Private Sub number_Click(Index As Integer)
Print (Index + 1) * 100
End Sub[/ltr]

a7.gif


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

saalek110

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

مي خواهيم ((منوي فايل محيط وژوال بيسيك)) را براي فرممان بسازيم.
قسمتهاي زيادي از كار را گفته ايم. فقط چند نكته مانده كه مي گوييم. اول من اين منو را در عكس زير نشان مي دهم. تا ببينيم چه اجزائي دارد.


a1.gif


نكته اول: حدود 6 خط افقي در ميان انتخابها وجود دارد. من ابتدا يك منو با 7 زيرمنو ساختم.


a2.gif


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


a3.gif


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

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

من یک سوال دارم، اگر محبت کنید و پاسخ بنویسید ممنون میشم.

اگر در Caption منوها قبل از هر حرفی کاراکتر " &" را قرار دهیم . بصورت زیر خط دار نمایش داده خواهد شد و میتوان با فشردن دکمه Alt و حرف مورد نظر به منو دسترسی پیدا کرد.

287dctc.png


من همین کارو انجام دادم ولی موقع اجرای برنامه، فقط زمانی حروف مورد نظر بصورت زیرخط دار نمایش داده میشوند که دکمه Alt فشار داده بشه . در صورتیکه باید همیشه حروف مذکور بصورت زیرخط دار نمایش داده بشوند.

مشکل از کجاست ؟


با تشکر
20ge1pi.gif

زبانهای ویژوال از واسط گرافیکی استاندارد ویندوز استفاده می کنند و تابع تنظیمات آن هستند.
در ویندوز XP یک ویژگی جدید اضافه شد که برای سادگی بیشتر محیط گرافیکی،
متن های Hot Key که زیر آنها خط کشیده شده را در منو ها مخفی می کند تا زمانی که کلید
Alt فشرده شود.
برای تغییر این قابلیت که پیشفرض سیستم عامل هم هست، در داخل Display Settings در
کنترل پنل بروید.
قسمت Appearance، دکمه Effects را بزنید.
تیک گزینه Hide underlined letters for keyboard navigation until I press the Alt key را بردارید.
حالا در دو پنجره دکمه OK را بزنید.



بعضي انتخابها در منوي فايل محيط ويژوال بيسيك يك آيكونهايي هم جلوي خودشان دارند . مثل علامت
save & open
اونها را هم من الان نمي دونم چطوري مي گذارند.
بعضي انتخابها هم در اين منو غير فعال است كه قبلا گفتيم چطوري يك منو يا زير منو غير فعال ميشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
سوال اول:

در ويژوال بيسيك چرا ماژول ميسازند؟
چرا در همان فرم نمي نويسند؟
فرق برنامه هايي كه در ماژول مي نويسند با برنامه هايي كه در فرم مي نويسند چيه؟
آيا هر برنامه اي را ميشه هم در ماژول ، هم در فرم نوشت؟
----------------
البته سوال باز هم دارم. فعلا اينها را جواب بديد تا بقيه را بپرسم.
ممنون
 
آخرین ویرایش:

Mikhak

Active Member
بحث ماژول خيلي يه كم گسترده هستش
ولي براي دركش يه چند تا از موارد استفادش رو ميگم
وقتي يك متغير تو يه فرم درست ميكنيم اگه متغير رو بالاي فرم يعني قبل از هر تابعي تعريف كنيم ميتونيم تو همه ي تاب عا ازش استفاده كنيم ولي فقط تو همون فرم ميتونيم ازش استفاده كنيم يعني توي فرمهاي ديگه نميتونيم بكار ببريم
اگه بخوايم متغيري تعريف كنيم كه مثلا يه داده رو بگيره از اين فرم به فرم ديگه منتقل كنه يا به طور كلي يه متغيري كه تو همه ي فرمها بشه ازش استفاده كرد بدون نياز به تعريف توي هر فرم اونوقته كه ماژول بهمون كمك ميكنه
متغيري كه توي ماژول تعريف بشه توي همه جاي برنامه ميشه ازش استفاده كرد
تابع هم به همين صورته يعني اگه يه تابع تو ماژول درست كنيم بدون تعريف تو فرماي ديگه ميتونيم ازش استفاده كنيم
-------------------
سينا
 

saalek110

Well-Known Member
سئوال 2


سئوال 1: من وقتي سئوال اول را مي پرسيدم، اصلا حواسم به متغيرها نبود. چيزي كه برام آنوقت مهم بود اين بود كه ..

توابع 2 نوعند:
public
private

مي خواستم بدونم وقتي در ((يك فرم يا يك ماژوول)) ما يك تابع را خصوصي(پريويت) تعريف مي كنيم... يعني چي؟
يعني از كجاها ((غيرقابل دسترس)) است؟ از فرم ديگه ؟ از ماژولها؟ يا حتي مي تونه از داخل همون فرم هم غيرقابل دسترس باشه؟

سئوال 2: ماژولها چه ارتباطي با هم دارند؟ آيا يك ماژول مي تونه در خدمت ماژول ديگر باشه؟ يا فقط ماژولها در خدمت فرمها هستند؟
منظورم اينه كه از توابع اونا به چه شكل استفاده ميشه؟ در مورد توابع خصوصي و عمومي ، جداگانه لطفا توضيح بدهيد.

سئوال 3: من پروژه هايي را ديدم كه 10 تا ماژول دارند. تعداد ماژولها را چي تعيين مي كنه؟
چه وقتي بايد يك ماژول جديد بسازيم؟ آيا با يك ماژول دچار مشكل ميشيم؟
 
آخرین ویرایش:

Mikhak

Active Member
سالك جان شرمنده دير جواب ميدم يه چند روزي نتونستم چك ميل كنم
------------
در مورد سوال اول :
همونطوري كه خودتون گفتين وقتي يه تابع يا متغير رو به صورت محلي يعني private تعريف ميكنيم وقت تو اون محيط يا اون قسمت از برنامه ميشه ازش استفاده كرد و اگه به صورت public يا همون سراسري تعريف كينم همون طور كه از اسمش پيداست ميتونيم و كل پروژه ازش استفاده كنيم
البته مكان تعريف هم مهمه براي مثال فرض كنين توي برنامه از چندتا تابع استفاده كرديم اگه يه متغير رو درون يكي از توابع تعريف كنيم براي مثال
کد:
  Dim x As Integer

    Function func()
        Dim a As Integer
        x = a
    End Function

    Function fib()
        Dim s As Integer
        x = s
    End Function

متغير a درون تابع func تعريف شده و در هر كجاي اون تابع كه بخوايم ميتونيم ازش استفاده كنيم ولي تو تابع fib نميشه ازش استفاده كرد واگه اسم اونو تو تابع fib بيان كنيم به صورت يه متغير ناشناخته باهاش رفتار ميكنه
متغير s تعريف شده در تابع fib هم به همون صورته
ولي متغير x كه بالاي همه ي توابع تعريف شده براي همه ي توابع شناخته شده است و ميشه تو همشون ازش استفاده كرد البته بالا يا پايين بودن فرقي نميكنه اگه بيرون از توابع تعريف بشه به صورت سراسري براي همه ي توابع شناخته شده هست

در مورد سوال دوم
----------------------------
دو كلمه كليدي private و public
وقتي تابعي رو با كلمه كليدي public تعريف ميكنيم ميتونيم در در تمام برنامه ازش استفاده كنيم ولي توابعي كه با كلمه كليدي private تعريف ميشه فقط توي خود اون كلاس يا ماژول قابل دسترسي هستش يعني ميشه گفت يك نوع متدهاي كمكي هستند كه درون كلاس ميشه بهشون دسترسي پيدا كرد


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

مخلصيم
-------------------------
سينا
 

saalek110

Well-Known Member
سئوال 3

تابع را ميشه دو نوع تعريف كرد:
public
private

دسترسي به اين دو نوع چه تفاوتي دارد؟
در حالتي كه اين تابع خصوصي يا عمومي ، در فرم باشه يا ماژول فرقي دارد؟
متغيرهايي كه در هر يك از اين دو نوع(عمومي و خصوصي) تعريف شده اند ، فرق دارد دسترسي اشان از بيرون؟ يعني آيا هر دو يا هيچ كدام يا فقط يكي از اين دو نوع متغيرهايش از بيرون تابع قابل دسترس است؟
-------
كلا راجع به فرق
public
&
private
چه از نظر صدا كردن آن روال(چه ساب ، چه فانكشن) و از نظر دسترسي به متغيرهايش خواهشا روشن كنيد ما را.
من هر وقت مي خواهم يك تابع تعريف كنم، نمي دونم خصوصي تعريف كنم يا عمومي. و نمي دونم هر يك چه سرنوشتي داره.

در ضمن ممنون از پاسخ سئوال 2. راجع به ماژول روشن شدم.
 
آخرین ویرایش:
وضعیت
موضوع بسته شده است.

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

بالا