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

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

MnavidM

Active Member
سلام.

ببین وقتی شما یک روال رو تعریف میکنید اگر اون رو با private تعریف کنی , فقط در همین فرم یا ماژول می تونی ازش استفاده کنی ولی اگه از public استفاده کنی در سرتاسر پروژه در دسترس هست و می تونی ازش استفاده کنی.

حالا در مورد متغیر های موجود در این روال ها :

1- اگه متغیر رو public و روال رو هم public تعریف کنی در سرتاسر پروژه در دسترس هست .
2- اگه متغیر رو public و روال رو هم private تعریف کنی در سرتاسر فرم (یا ماژولت) در دسترس هست .
3- اگه متغیر رو private و روال رو هم private تعریف کنی فقط در همون روال در دسترس هست.
4- اگه متغیر رو private و روال رو هم public تعریف کنی فقط در همون روال در دسترس هست .

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

Mikhak

Active Member
بله همونطور كه نويد جان گفت درسته

من بالا يه مثال زدم براتون
يك كلاس يا ماژول رو فرض كنين كه توي اون از چند تا روال استفاده كرديم مثلا 3 تا
دوتا از روالهامون به صورت private و يكيش هم به صورت public تعريف شده
حالا ميتونيم از داخل همون ماژول يا كلاس به هر سه روال دسترسي داشته باشيم
ولي در بيرون از ماژول فقط به روالي دسترسي داريم كه به صورت public يا سراسري تعريف شده باشه
روالهاي private يا محلي يه چيزي تو مايه هاي متد هاي كمكي براي توابع Public و ساير موارد به كار برده ميشه
اميدوارم متوجه شده باشي
طريقه فرخوانيش هم دقيقا شبيه روالهاي عادي هستش اگه قسمت آموزش توابع رو تو چند صفحه قبل بخوني متوجه ميشي
مخلصيم
-------------------------
سينا
 

saalek110

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

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


b4.gif


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


b5.gif


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


b6.gif


b7.gif


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

[ltr]Code modules are files with a .BAS extension which hold the general procedures which YOU write. Many times, we refer to these as standard modules, or just modules. A Form is also a module, but referred to as a Form module, or sometimes an object module.[/ltr]
ماژول فايلش پسوند ((بي اي اس )) دارد. ماژول نگه دارنده روالهاي شماست. فرم ،هم يك ماژول است ولي ((فرم ماژول)) ناميده مي شود يا ((آبجكت ماژول)) .
 
آخرین ویرایش:

saalek110

Well-Known Member
قلمرو متغيرها

قلمرو متغيرها
scope

a1.gif


متغير ((ايكس)) يك متغير ((گلوبال)) است و در همه جاي پروژه آن را مي شناسند.

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

متغيرهاي ((ايگرگ)) و ((زد)) ، هر يك در فرم مربوطه خويش ، حكمراني مي كند. ولي نه در فرم ديگر.

متغيرهاي (( آ )) و (( بي )) و (( سي )) هر يك در محله(روال) خويش شناخته شده است.

=======================​
[ltr]
A variable is temporary storage space for numbers, text, and objects. Variables are constantly being created and destroyed and will not hold any values after your program has ended.[/ltr]
متغير ، يك فضاي ذخيره اي موقتي، براي اعداد ، متن و اشياء است. متغيرها دائما ساخته مي شوند و از بين مي روند و هيچ مقداري بعد اختتام برنامه حفظ نمي شود.

[ltr]which procedures and which modules should have access to the variable's value.[/ltr]
سئوال : كدام ماژول يا روال به متغير دسترسي دارد؟

[ltr]Procedure-level variables are created with a Dim statement placed right in
the procedure where it's going to be used. The value of a procedure level variable cannot be accessed outside it's procedure. When the procedure finishes (End Sub or End Function), the variable is destroyed and memory allocated to the variable is released.[/ltr]
سطح روال: متغيرها با كلمه ((ديم)) كه قبل از نام متغير ميايد ايجاد مي شوند.
اين گونه متغيرها بيرون روال قابل دسترس نيستند.
وقتي روال خاتمه يابد ، متغير تخريب مي شود و حافظه تخصيص يافته به آن آزاد مي شود.

[ltr]Module-level variables are created with a Private statement in the general declarations section of a Form or code module. The value of the module level variable is available to every procedure in that module. Memory allocated to the module-level variable is not destroyed until the module is Unloaded.[/ltr]
سطح ماژول: متغيرها ، با عبارت خصوصي ،در قسمت ((جنرال ديكلريشن))،فرم يا ماژول ايجاد مي شوند.
متغيرهاي ((ماژول لول)) در همه روالهاي ماژول در دسترس است.
زماني حافظه تخصيص يافته اين متغيرها آزاد مي شود كه ، ماژول (( آنلود )) شود.

[ltr]Global variables are created with a Public statement in the general declarations section of a Form or code module. The value of a Global variable is available to any procedure, in any Form or code module. Memory allocated to a Global variable is not released until your program shuts down.[/ltr]
گلوبال: متغيرها با عبارت عمومي در قسمت ((جنرال ديكلريشن)) فرم يا ماژول ايجاد مي شوند.
اين متغيرها(گلوبال) در همه روالها ، در هر فرم يا ماژول قابل دسترس است.
و مقدارش، موقع خاموش شدن برنامه، از بين مي رود.

[ltr]It would certainly be easier to make every variable Global. You wouldn't have to think twice about it's availability at any given time. But sometimes, every byte of memory counts, so don't give your variables any more "life" than they actually require.[/ltr]
مشخص است كه اگر شما تمام متغيرها را ((گلوبال)) تعريف كنيد، ديگر لازم نيست به اين فكر كنيد كه كدام متغير كجا در دسترس است.
اما جايي كه هر بايت از حافظه مهم باشد، بهتر است كه به هر متغير ((طول عمر)) مناسب آن را بدهيد.
 
آخرین ویرایش:

saalek110

Well-Known Member
public & private

یک سری تمرین با public و private:

پروژه ای بسازید. و یک فرم علاوه بر فرم 1 به آن بیافزایید.

در فرم یک یک باتون هم اضافه کنید.

در فرم یک کد زیر را درج کنید.
کد:
Private Sub Command1_Click()
a1
a2
Form2.a1
End Sub

Public Sub a1()
Print "form1 a1"
End Sub

Private Sub a2()
Print "form1 a2"
End Sub
و در فرم 2 کد زیر را درج کنید:
کد:
Public Sub a1()
MsgBox ("form2 a1")
End Sub


Private Sub a2()
MsgBox ("form2 a2")
End Sub
وقتی داشتیم می نوشتیم form2 و یک نقطه گذاشتیم تصویر زیر را داشتیم:

2ch5g78.gif

یعنی به ساب a1 از فرم 2 دسترسی داریم ولی به ساب a2 از فرم 2 دسترسی نداریم. چون اولی پابلیک و دومی پریویت است.
نتیجه گیری من این است که ساب های پابلیک را از فرم دیگه میشه صدا کرد ولی پریویت را نمیشه.
ولی چه پابلیک و چه پریویت را میشه از داخل همان فرم صدا زد. (همان طور که در کد بالا می بینید که a1 از فرم 1 و a2 از فرم 1 در رویداد کلیک باتون صدا زده شده که دومی پریویت بوده)

===================
===================

متغیرها دو نوعند(البته از نظر محل دسترسی)
محلی
عمومی

هر متغیری که داخل ساب یا فانکشن تعریف شود محلی است و فقط در همان ساب یا فانکشن به رسمیت شناخته می شود.
متغیر عمومی بالای کدها بعد option explicit تعریف می شود.

اما متغیرهای عمومی هم مثل ساب و فانکشن می توانند پابلیک یا پریویت باشند. که باز اگر پابلیک بود در فرم دیگر قابل استفاده و اگر پریویت بود در فرم دیگر قابل استفاده نیست.

===============
برای تمرین متغیر عمومی در فرمهای یک و دو از کد زیر استفاده کنید:
کد:
Option Explicit
Dim form1_a1 As Integer

Private Sub Command1_Click()
form1_a1 = 4
Print form1_a1

      Form2.form2_a1 = 5
      Print Form2.form2_a1
      
      ' //// form2.form2_a2 = 66 /// gheyre ghabele ghabol

End Sub
کد:
Option Explicit
Public form2_a1 As Integer
Dim form2_a2 As Integer

2rqejwg.gif

در شکل بالا می بینیم که دسترسی به متغیر form2_a1 وجود دارد ولی به متغیر form2_a2 وجود ندارد.
=======
اما می توانیم ماژول را فرمی که فقط قسمت کدنویسی داره در نظر بگیریم. در مورد متغیرهای ماژول هم به نظر من مثل همین فرم 2 است یعنی اگر public تعریف کنیم همه جا قابل استفاده است و اگر با dim تعریف کنیم فقط در ماژول قابل استفاده است.
به نظر من اگر متغیری نیاز داریم که در تمام پروژه باید شناخته بشه بهتره در ماژول تعریف بشه تا در فرومها گم نشه و جاش معلوم باشه.
در هر کتابی مترجم لغتی را به کار میبره.
من function و sub را می شناسم.
از منوی Tools گزینه Add Procedure را که بزنید می توانید ساب و فانکشن بسازید. البته دستی هم میشه نوشت کدهایش را.

فرق تابع و ساب اینه که یکی خروجی برنمی گردونه و یکی بر می گردونه.
تابع را مثل یک کارخانه در نظر بگیر که چند تا ورودی میگیره و روی آن عملیاتی انجام می دهد و خروجی می دهد.

دستور exit sub
این دستور مهم و مفیدی است.
کارش خروج از ساب است.

مثال: فرض کنید کلی کد در رویداد یک باتون نوشتید. بعد شرطی برقرار نیست و شما می خواهید بقیه کدها دیگه اجرا نشه. اگر این دستور نبود خیلی مشکل پیش می اومد. ولی با استفاده از این دستور براحتی از اون ساب که مثلا رویداد کلیک یک دکمه است خارج می شوید.
در ویژوال بیسیک شما رویدادگرا کار می کنید. یعنی هر تکه کد میره داخل یک رویداد.
مثلا چند خط کد وقتی یک باتون کلیک شد اجرا میشه
و چند خط کد وقتی فرم لود میشه
و چند خط کد موقع خروج برنامه
و الی آخر

یعنی شما کد آزاد ندارید.
یعنی هر تکه کدی داخل یک رویداد است.
و هر رویداد هم یک روال است از جهتی.
و هر ساب یا فانکشنی هم که ساخته باشد از درون این روال ها صدا زده می شود.
اگر کدها را به این شکل بنویسیم:
کد:
Private Sub Form_Load()
End Sub
دستورات
همان طور که گفتم تمام کدها را ما داخل رویداد می نویسیم. نمی شود بیرون رویداد نوشت.
خطای زیر را دریافت می کنیم:

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

saalek110

Well-Known Member
کار با متغیر استاتیک - کار با ثوابت

در دو مثال زير ، در مثال اول يك متغير محلي معمولي(موقتي - اتوماتيك) و در مثال دوم يك متغير استاتيك محلي تعريف كردم. به نتايج محاسبات توجه كنيد:
[ltr]Option Explicit

Private Sub Command1_Click()
Dim x As Integer
x = x + 1
Print x
End Sub[/ltr]

b2.gif

[ltr]Option Explicit

Private Sub Command1_Click()
Static x As Integer
x = x + 1
Print x
End Sub[/ltr]

b3.gif


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

سعي نكنيد بالاي فرم متغير استاتيك تعريف كنيد. به مطلب زير توجه كنيد.
[ltr]Only Procedure-level variables can be declared Static. This means the variable is not destroyed and will retain it's value between multiple calls to the procedure.[/ltr]
فقط متغيرهاي درون روالي را ميشود ((استاتيك)) تعريف كرد.متغير استاتيك مقدارش را بين فراخواني هاي متعدد روال حفظ مي كند.


=====================================

Constants

[ltr] Constants are special variables which have one permanent value. constants make code easier to write and also easier to read.[/ltr]
ثوابت
ثوابت ، متغيرهاي خاصي هستند كه فقط يك مقدار مي گيرند. ((مقدار ثابتها)) باعث راحتي نوشتن و خواندن كدها مي شوند.

[ltr] Const TITLE = "VB Tutorial" [/ltr]
در مثال بالا متغير (( تايتل)) ، مقدار تابت (( وي بي توتوريال)) را پذيرفته.

[ltr]Now, with this Constant declaration, we can use the word TITLE in place of "VB Tutorial" at any time. [/ltr]
حالا ما مي توانيم به جاي عبارت (( وي بي توتوريال)) از كلمه ((تايتل)) در هر زماني استفاده كنيم.

[ltr] Notice the name of the constant is in caps. This is a common practice which enables programmers to recognize their constants at a glance. [/ltr]
توجه كنيد كه نام ((متغيرهاي ثابت)) با حروف بزرگ نوشته شده. اين به برنامه نويس كمك مي كند كه به سرعت بفهمد كه اين متغير از نوع ((مقدار ثابت)) است.

[ltr] Public Const TITLE = "VB Tutorial" [/ltr]
در مثال بالا يك مقدار ثابت بصورت پابليك تعريف شده. پس حالا در كل پروژه شناخته مي شود. اگر از كلمه پابليك استفاده نمي شد ، فقط در ماژول يا روال تعريف شده شناخته مي شد.

[ltr] Also, Public constants are not allowed in Form modules [/ltr]
ثابتهاي عمومي را نميشه درفرم تعريف كرد. بايست در ماژول تعريف بشه. اگر در فرم تعريف كنيد پيغام زير را دريافت خواهيد كرد.(عكس زير) ولي ميشه بدون اعلان پابليك در فرم تعريف كرد.


b1.gif


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

saalek110

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

در كد زير ، پاسخ فرم را به رويداد (( كليد پايين)) (كي داون) را داريم.

[ltr]Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub[/ltr]
هر كليدي را كه فشار دهيد، يك ((مسيج باكس)) باز مي شود و كد آن كليد را مي دهد. من امتحان كردم. و نتايج زير را گرفتم.
[ltr]((a taa z)) mishe 65 taa 90
((1 taa 9)) mishe 49 taa 57
((0)) mishe 48
((shift)) mishe 16
((contorol)) mishe 17
((space)) mishe 32
((delet)) mishe 46
[/ltr]
كد روبرو هم پاسخ فرم به ((فشردن كليد )) است:
[ltr]Private Sub Form_KeyPress(KeyAscii As Integer)
MsgBox KeyAscii
End Sub

((a)) mishe 97
be ((shift)) vakonesh neshon nemideh.
[/ltr]
حالا يك ((تكست باكس)) روي فرم بيافزاييد و كد زير را به ((پنجره كد)) بيافزاييد:
[ltr]Private Sub text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57
'Ok to type these keys
Case Else
KeyAscii = 0
End Select
End Sub[/ltr]
نتيجه اين ميشه كه كاربر اگر اعداد را بزند، داخل ((تكست باكس)) تايپ ميشه، ولي اگر غير اعداد را بزنه، چيزي تايپ نمي شه.

===============================
مثال بعد
لازم نيست گاهي كدها را حفظ باشيم. به كد زير نگاه كنيد.
[ltr]Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = Asc("x") Or KeyCode = Asc("X") Then
Print"x are being held down "
End If
End Sub[/ltr]
ولي وقتي فقط ((ايكس كوچك)) يا فقط ((ايكس بزرگ)) را پوشش دهيم كار نمي كنه.

a9.gif


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

[ltr]Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc("x") Then
Print "smaal x"
End If
End Sub[/ltr]
 
آخرین ویرایش:

saalek110

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

رويداد ((كليد پايين))(كي داون) ، دو ورودي دارد.
يعني علاوه بر ((كد كليد)) (كي كد) ، يك ورودي ديگر هم دارد.
و آن ورودي ((شيفت)) است.
[ltr]If Shift has a value of 0....none of these keys are being held down
If Shift has a value of 1....Shift key is being held down
If Shift has a value of 2....Ctrl key is being held down
If Shift has a value of 3....Shift key and Ctrl key are being held down
If Shift has a value of 4....Alt key is being held down
If Shift has a value of 5....Shift key and Alt key are being held down
If Shift has a value of 6....Ctrl key and Alt key are being held down
If Shift has a value of 7....All three keys are being held down
[/ltr]
كه عدد ((شيفت)) نشان مي دهد كه دكمه هاي ((شيفت)) و ((آلت)) و ((كنترل)) فشرده شده اند يا نه.

[ltr]Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 2 Then
Print "Ctrl are being held down "
End If
End Sub[/ltr]

a3.gif

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

saalek110

Well-Known Member
ديالوگ باكس ها


[ltr]Dialog Boxes are used to get information from the user or simply to display a message. There are several kinds of dialog boxes, but only VB's built-in InputBox and MsgBox will be discussed on this page.[/ltr]
ديالوگ باكس ها براي اين است كه اطلاعاتي را از كاربر بگيرد يا فقط به طور ساده پيامي را نمايش دهد. انواع مختلفي از ((ديالوگ باكس)) موجود است. ولي اينجا فقط ما ((اينپوت باكس)) و ((مسيج باكس)) را شرح مي دهيم.
فرمول:
[ltr]MsgBox Statement[/ltr]
مثال:
[ltr]Private Sub Command1_Click()
MsgBox "Hello"
End Sub[/ltr]

a6.gif

[ltr]Private Sub Command1_Click()
MsgBox Text1.Text & " is writen in textbox"
End Sub[/ltr]

a7.gif



در مثال بعدي تايتل هم تدارك ديده شده و علامت تذكر هم اضافه شده.
[ltr]Private Sub Command1_Click()
MsgBox "hi", vbCritical, "warning"
End Sub[/ltr]

a8.gif


[ltr]There are four VB constants that you can use for the icon argument.
vbCritical (warns the user of a serious problem)
vbExlamation (a non-critical warning message)
vbQuestion (use when the MsgBox is asking a question)
vbInformation (simple informative messages)[/ltr]

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

saalek110

Well-Known Member
MsgBox Function

[ltr]You can ask the user a question and display various buttons in the MsgBox Function, which has the same syntax as the MsgBox statement, but the arguments are enclosed in quotes and the Function needs a place (variable or property of a control) to store the VB constant which corresponds to which of the buttons was clicked.[/ltr]

شما ممكن است از كاربر سئوالي را بپرسيد و در ((فانكشن مسيج باكس))دكمه هاي متعددي را به نمايش بگذاريد. سينتكس(فرمول) مشابه (((مسيج باكس)) است ولي آرگومانها داخل كوتيشن ميايد و مثل يك تابع مقدار برمي گرداند اين نوع ((مسيج باكس))، وابسته به اين كه كاربر چه
دكمه اي را زده باشد.
[ltr]Private Sub Command1_Click()
Dim iResponse As Integer
iResponse% = MsgBox("Are you over 18?", vbQuestion + vbYesNo, "Verify Age")
If iResponse% = vbYes Then
MsgBox "You are allowed to vote", vbInformation, "Election"
Else
MsgBox "Sorry, you're underage!", vbExclamation, "Election"
End If
End Sub[/ltr]
در برنامه بالا سئوالي پرسده مي شود و وابسته به اينكه كاربر دكمه ((بله)) يا ((خير)) را بزند ، در متغير ((آي رسپونس)) عددي ذخيره مي شود. و با استفاده از آن عدد كار شده.


a3.gif


a4.gif


[ltr]vbOkOnly
vbOkCancel
vbRetryCancel
vbYesNo
vbYesNoCancel
vbAbortRetryIgnore[/ltr]

اين اسمها براي راحتي است. مي توانيد برنامه اي بنويسيد به اين شكل
[ltr]print "vbokcancel=";vbokcancel
natijeh: vbokcancel=0[/ltr]
يعني ميشه بجاي اين كلمات از اعداد مشابه آنها هم استفاده كرد.
(( آي رسپونس)) را هم (( پرينت )) بگيريد. يك عدد صحيح (اينتيجر)) است. پس با آن عدد صحيح هر نوع برنامه نويسي به سليقه خودتان ممكن است.

===================​
InputBox Function​

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


a5.gif


[ltr]Private Sub Command1_Click()
Dim sResponse As String
sResponse$ = InputBox("What city do you live in?", , "San Diego", 500, 500)
End Sub
[/ltr]


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

saalek110

Well-Known Member
سئوال 4

سلام ميخك جان.
يك سئوال داشتم راجع به اينكه كجا كدهاي خود را بنويسم.
چيزي كه الان به نظرم منطقي مياد اينه كه:
در فرم ها(آبجكت ماژولها به قول ويژوال بيسيك) فقط برنامه هاي پاسخگويي به رويدادها را بنويسم. و سعي كنم به جز كدهاي پاسخ به رويدادها در فرم ها چيزي ننويسم.
و توابع را در ماژولها بنويسم. و اگر كلاسي ساختم ، در كلاس ماژول قرار داده بشه.
-------------
آيا اين رويكرد درسته؟
خواهشا بيشتر توضيح بدهيد. چون هر جمله شما كه صاحب نظر هستيد براي من دنيايي از مفاهيم براي بناي ادامه راه است.
 
آخرین ویرایش:
ايجاد منوها در ويژوال بيسيك
همانطور كه در اكسپلورر ويندوز يا ساير برنامه‌هاي روزمره مشاهده ميكنيد . منوها امكان دسترسي سريع به امكانات برنامه رو به كاربر ميدن. پس بهتره برنامه‌هاي ما هم چنين ابزاري داشته باشه براي اين كار مراحل زير رو طي ميكنيم:
Tools > Menu Editor (ctrl+E)
نام منوي اصلي را در تب Caption مي‌نويسيم (مثلا File) اين نام براي كاربر نمايش داده خواهد شد
نكته قابل توجه اينكه بايد يك Name براي هر گزينه انتخاب كنيم كه حتما به انگليسي باشه تا در كد نويسي پروژه بتوانيم از اون استفاده كنيم.
بازدن كليد Next وارد قسمت بعدي مي‌شويم
بازدن كليد جهت نما به سمت جلو (در خود پنجره Menu Editor) براي ساخت زير مجموعه اين گزينه آماده مي‌شيم.

vb.gif

همانطور كه ميبينيد 4 نقطه قبل از هر نوشته اي ظاهر مي‌شه. حالا هر كلمه اي جلوي اين 4 نقطه نوشته بشه زير منوي File محسوب ميشه.
همانطور كه در عكس ميبينيد گزينه هاي مختلف توضيح داده شده.
بازدن كليد جهت نما به سمت عقب (در خود پنجره Menu Editor) براي ساخت منوي اصلي بعدي مانند Edit آماده مي شيم يا با بازدن كليد Next دومين زير گروه منوي File را ميسازيم.
در بعضي منو ها براي جدا كردن گزينه هاي موضوعي از يك خط استفاده ميكنند براي ايجاد اين خط بايد در Caption يك خط تيره بزاريد.
بعد از اتمام ساخت منو Ok كنيد.نگران نباشيد چون امكان اديت منوي ساخته شده در صورت تمايل از Tools > Menu Editor (ctrl+E) وجود داره.


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

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

saalek110

Well-Known Member
ممنون حامد جان.
خيلي خوب بود.

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

saalek110

Well-Known Member
كار با زمان

يك ((دكمه)) و يك ((ليبل)) به فرم بيافزاييد و كد زير را به ((پنجره كد )) درج كنيد.
[ltr]Option Explicit
Dim Time1 As Variant

Private Sub Command1_Click()
Time1 = Now
Label1.Caption = Format(Time1, "hh:mm:ss")
End Sub[/ltr]

a1.gif



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

========================​

حال 3 ((دكمه)) و 3 ((ليبل)) قرار دهيد بر فرم. مي خواهيم نوعي ((كرنومتر)) (زمان سنج) بسازيم.


a2.gif



برنامه اين طوري كار مي كنه كه ((دكمه اول)) را كه مي زنيم. زمان اوليه را در متغيري ثبت مي كنه. و آن را در ليبل اول نمايش مي دهد.

دكمه دوم ، همان كار دكمه اول را مي كنه ولي براي زمان دوم.

دكمه سوم كارش اينه كه فاصله زدن دكمه اول و زدن دكمه دوم را نمايش مي دهد.
[ltr]Option Explicit
Dim time1 As Variant
Dim time2 As Variant
Dim time_between As Variant


Private Sub Command1_Click()
time1 = Now
Label1.Caption = Format(time1, "hh:mm:ss")
End Sub

Private Sub Command2_Click()
time2 = Now
Label2.Caption = Format(time2, "hh:mm:ss")
End Sub

Private Sub Command3_Click()
time_between = time2 - time1
Label3.Caption = Format(time_between, "hh:mm:ss")
End Sub[/ltr]


b4.gif

.
البته ميشه دكمه سوم را حذف كرد، طوري كه زمان مابين را هم دكمه دوم محاسبه و نمايش بده.
.
Doste گفت:
سلام.

ببین به جای دستور :

کد:
Label3.Caption = Format(time_between, "hh:mm:ss")

می تونی قالب های مختلفی رو امتحان کنی .

الآن VB رو سیستمم نصب نیست اما شما به فرض این رو تست کن .

کد:
Label3.Caption = Format(time_between, "mm:ss")

یا می تونی با توابع رشته ای خودت اون ها رو جدا کنی .

موفق باشی.
نوید.
.
western گفت:
سلام

با توجه به توضيحي كه داده بودي راه زير به ذهنم رسيد
شما بايد از يك تايمر استفاده كني كه مقدار interval = 0 باشد و هروقت كه خواستي محاسبه زمان رو شروع كني مقدار interval = 1000 ميشه
طريقه استفاده رو هم با يه برنامه كوچولو توضيح دادم


اين كد تو وي بي 6 تست شده
اول تو فرم دو تا command و دو تا label و يك تايمر بذار بعدش كد زير رو تو پنجره كد paste كن

کد:
Public T As Integer

Private Sub Command1_Click()
Timer1.Interval = 1000
T = 0
End Sub

Private Sub Command2_Click()
Timer1.Interval = 0
Label1.Caption = "Minutes: " & (Int(T / 60))
Label2.Caption = "Seconds: " & (T Mod 60)
End Sub

Private Sub Timer1_Timer()
T = T + 1
End Sub

توضيحات:
command1 : شروع محاسبه زمان
command2 : پايان محاسبه زمان
label1 : نمايش دقيقه هاي سپري شده
label2 : نمايش ثانيه هاي سپري شده
T : كل زمان سپري شده به ثانيه

ضمنا در اين برنامه فقط به خاطر قابل درك بودن از دو label استفاده شده و شما در برنامه خود ميتوانيد خروجي را به شكلهاي زيباتري نمايش دهيد

اميدوارم به دردت بخوره

موفق باشيد - محمد
.
با تشكر.
.
 
آخرین ویرایش:

Mikhak

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

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

saalek110

Well-Known Member
msdn

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


يك (( آي دي)) به نام
msdn
ساختم تا خواننده مطالبي كه با اين (( آي دي )) پست ميشه را با خيال راحتتر بخواند و از منبع خيالش راحت باشد.
 
آخرین ویرایش:

msdn

New Member
cd

با سلام. من سالك هستم.
من بعد مطالبي كه از ((سي دي ))
msdn
ترجمه كرده ام را با اين (( آي دي)) پست مي كنم.
و ديگر مطالب از سايتهاي ديگر را با همان (( آي دي)) سالك.
---------------------
راجع به ((سي دي ))
msdn
بايد بگم كه من دو سري ((سي دي )) دارم.
يكسري 2004 است كه 3 ((سي دي)) است.
و يكسري فكر كنم مال 98 يا 2001 است. (شامل 3 سي دي) كه براي ويژوال بيسيك مناسب تره.
 
آخرین ویرایش توسط مدیر:

saalek110

Well-Known Member
سوال 5

سلام
از دوستان يك نفر كلاس را تعريف كنه
فرقش با تابع ؟
-------
كلاسهاي بيسيك با كلاسهاي نوشته ما تفاوتشان ؟

ممنون

من برام مبهمه قضيه.
 
آخرین ویرایش:

saalek110

Well-Known Member
ذخيره در فايل

با سلام.
برنامه روبرو را نگاه كنيد:
[ltr]Dim a As String
Dim b As Integer
Dim c As Integer

Private Sub Command1_Click()
a = "myword": b = 33: c = 44
Open App.Path & "\myFile.txt" For Output As #1 ' khate 1
Write #1, a, b, c ' khate 2

Close #1 ' khate 3

End Sub[/ltr]
يك دكمه روي فرم بيافزاييد و كد را در پنجره كد بيافزاييد. وقتي دكمه را بزنيد، يك فايل تكست ايجاد ميشه و در آن سه عبارت ((ماي ورد)) ، 33 و 44 نوشته ميشه.
کد:
"myword",33,44
محل ايجاد اين فايل كجاست؟
اگر پروژه را روي هارد ذخيره(سيو) نكرده باشيد ، فايل در جايي كه ويژوال بيسيك را نصب كرده ايد ايجاد مي شود. ولي اگر ذخيره كرده باشيد ، كنار پروژه شما ايجاد ميشه. ( من يك آزمايش كردم ، فرم را يكجا سيو كردم، پروژه را جاي ديگر، فايل رفت كنار پروژه ايجاد شد.)
شرح برنامه:
خط 1: ايجاد فايل - مسير ايجاد فايل - شماره ارتباط با فايل
app.path
اين باعث ميشه فايل پوشه جاري را پيدا كنه. ميشد بجاي آن آدرس كامل نوشت. ولي اينجوري راحتتره كار چون اگر پروژه جابجا بشه در هارد يا از كامپيوتري به كامپيوتر ديگر، فايل هميشه كنار پروژه ايجاد ميشه.
شماره ارتباط با فايل: اين كمك مي كنه تا فرمانهاي
open & write & close
با هم مرتبط باشند.
خط 2: اين خط 3 عبارت ، اولي از نوع رشته و دو تاي بعدي از نوع اينتيجر(صحيح) را در فايل مي نويسد.
خط 3: باعث بستن فايل ميشه تا فايل آزاد بشه.
.
====================
برنامه روبرو برعكس بالاست. يعني فايل را مي خواند.
[ltr]Dim a As String
Dim b As Integer
Dim c As Integer

Private Sub Command1_Click()
a = "myword": b = 33: c = 44
Open App.Path & "\myFile.txt" For Input As #1
Input #1, a, b, c
Print a, b, c
Close #1
End Sub[/ltr]

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


=======================

[ltr]To write to a file, you would use For Output or For Append . If you open a file For Output, be prepared to re-write the entire file. Opening a file For Append allows you to write data to the end of the file, thereby saving what was already there.[/ltr]
براي نوشتن به فايل شما دو حالت را مي توانيد برگزينيد:
اول: ((فور اوت پوت)) .
دوم : ((فور اپند)). اضافه كردن.
اگر شما به حالت ((فور اوت پوت )) باز كنيد ، فايل آماده مي شود تا كل فايل بازنويسي شود. ولي در حالت (( فور اپند)) ، به شما اجازه مي دهد تا اطلاعات را در انتهاي فايل بنويسيد. در نتيجه اطلاعات قبلي حفظ مي شود.

دو دكمه به فرم بيافزاييد و كد روبرو را در ((پنجره كد)) وارد كنيد.
[ltr]Dim a As String
Dim b As Integer
Dim c As Integer

Private Sub Command1_Click()
a = "myword": b = 33: c = 44
Open App.Path & "\myFile.txt" For Output As #1 ' khate 1
Write #1, a, b, c ' khate 2
Close #1 ' khate 3
End Sub

Private Sub Command2_Click()
Open App.Path & "\myFile.txt" For Append As #1
Print #1, "Jim"; "Johnson"; "213-09-0031"
Close #1
End Sub[/ltr]

اگر دكمه دوم را 3 بار كليك كنيم ، اين فايل ايجاد مي شود:

و حالا بعد 3 بار كليك دكمه دوم ، دكمه اول را كليك مي كنيم و بعد دكمه دوم را دو كليك مي كنيم.

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

msdn

New Member
برنامه هاي تك سندي و چند سندي

[ltr]Interface Styles
If you've been using Windows-based applications for a while, you've probably noticed that not all user interfaces look or behave the same. There are two main styles of user interface: the single-document interface (SDI) and the multiple-document interface (MDI). An example of the SDI interface is the WordPad application included with Microsoft Windows (Figure 6.1). In WordPad, only a single document may be open; you must close one document in order to open another.[/ltr]

اگر شما با برنامه هاي مبتني بر ويندوز كار كرده باشيد، شما احتمالا توجه كرده ايد كه اينترفيس برنامه ها همه يكسان نيست. دو نوع استيل اصلي ديده مي شود:
اينترفيس تك سندي و اينترفيس چند سندي. مثال براي نوع تك سندي wordpad است. شكل زير. در wordpad فقط يك سند منفرد مي تواند باز شود. شما بايستي اولي را ببنديد تا بتوانيد دومي را باز كنيد.
Figure 6.1   WordPad, a single-document interface (SDI) application

f3.gif

[ltr]Applications such as Microsoft Excel and Microsoft Word for Windows are MDI interfaces; they allow you to display multiple documents at the same time, with each document displayed in its own window (Figure 6.2). You can recognize a MDI application by the inclusion of a Window menu item with submenus for switching between windows or documents.[/ltr]

برنامه هاي مثل excel و word از نوع چند سندي هستند. و به شما اجازه مي دهند در يك زمان سندهاي متعدد را به نمايش بگذاريد. و هر سند در پنجره خاص خود به نمايش در مي آيد.شكل زير. شما مي توانيد يك برنامه چند سندي را از داشتن منوي window تشخيص دهيد كه داراي زير منوهايي براي سوئيچ(انتقال از يكي به ديگري) از يك پنجره به ديگر هستند.
Figure 6.2   Microsoft Excel, a multiple-document interface (MDI) application

f2.gif


[ltr]In determining which interface style is best, you need to look at the purpose of the application. An application for processing insurance claims might lend itself to the MDI style — a clerk is likely to be working on more than one claim at a time or might need to compare two claims. On the other hand, a calendar application would be best suited to the SDI style — it's not likely that you would need more than one calendar open at a time; in the rare event that you did, you could open a second instance of the SDI application.[/ltr]

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

[ltr]The SDI style is the more common; There are a number of considerations and techniques unique to creating MDI applications, which are addressed in "Multiple-Document Interface (MDI) Applications" later in this chapter.[/ltr]

نوع تك سندي رايجتر است. توضيحات و تكنيكهايي براي ايجاد برنامه چند سندي داريم كه در ادامه گفته خواهد شد.

[ltr]In addition to the two most common interface styles, SDI and MDI, a third interface style is becoming more popular: the explorer-style interface (Figure 6.3). The explorer-style interface is a single window containing two panes or regions, usually consisting of a tree or hierarchical view on the left and a display area on the right, as in the Microsoft Windows Explorer. This type of interface lends itself to navigating or browsing large numbers of documents, pictures, or files.[/ltr]

علاوه بر دو نوع نمايش. (تك سندي و چند سندي) نوع سومي هم در حال شيوع است. استيل اكسپلورر. در اين استيل ، يك پنجره داريم كه دو قسمت دارد. معمولا شامل يك نماي درختي يا سلسله مراتبي در سمت چپ ، و يك منطقه نمايش در سمت راست. مثل windows Explorer . اين نوع نمايش اجازه مي دهد تا تعداد زيادي سند، عكس يا فايل جستجو يا brows شود.
Figure 6.3   The Windows Explorer, an explorer-style interface

f4.png


[ltr]In addition to the MDI and SDI application examples that accompany this chapter, the Application Wizard provides a good way to compare the different interface styles. You can use the Wizard to generate a framework for each style and view the forms and code that it generates.[/ltr]

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

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

بالا