کمک در مورد دستور do و for

hamidahmadi

Active Member
متخصصان عزیز ویژوال بیسیک لطفا" جواب بدهید
من میخواهم بگویم در یک دستور اگر کاربر کلمه سام را در یک( تکست) تایپ کرد کپشن یک( لیبل) بشود "شما بردید" و اگر غلط بود (اینجا برای من مهم است) برای تنها( 3 بار) با یک حلقه (do ) و همچنین یا یک دستور( for )( تکست ) کلمه غلط را دریافت کند و در یک لیبل بگوید " شما باختید " و در هر مرحله ای که رد میشود( اینجا3 مرحله ) است کلمه شما باختید از روی لیبل پاک شود و آماده برای نوشتن کلمه درست یا غلط بعدی در( تکست ) شود.

خیلی ممنونتان میشوم اگر این را به من یاد دهید تا من بتوانم حلقه do و for را یاد بگیرم
 

MnavidM

Active Member
سلام.

منظورتون از هر مرحله ای که رد می شود چیه ؟

شما یه command , text و label دارید که وقتی روی command کلیک میکنید اون شرط رو بررسی میکنه اما چه طور به مرحله بعد میره .

بیشتر توضیح بده .

برای اینکه متوجه بشی چند دفعه هست که کاربر دکمه رو زده , می تونی :

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

رد اول فرمت :

کد:
public xcount

و در رویداد Click دکمه (command) این رو اضافه کن .

کد:
xcount=xcount+1
if xcount>3 then lable1='شما باختید'

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

hamidahmadi

Active Member
آقا نوید دست شما درد نکند از راهنمائیتان
منظور من این است که مثلا" یک همچنین کدی داریم

()Private Sub cmd1_Click
If txtsam.Text = "sam" Then
lblsam.Caption = "You win"
Else
lblsam.Caption = "You lose"
""= txtsam.text
txtsam.SetFocus
End If
End Sub
من میخواهم قسمت Else آن در صورت وارد کردن جواب غلط سه بار تکرار شود یعنی تکست پاک شود و منتظر برای تایپ دوباره باشد تا سه بار و بعد از سه بار مثلا" در لیبل نوشته شود شما سه بار سعی کردید اسم رمز را بدهید ولی هر سه بار غلط بود نیم ساعت دیگر سعی کنید و یک تصویر دیگر دیگر به غیر از این تصویر که پرسیدن از کاربر بود بیاید
و من بیشتر میخواهم بدانم چطور با یک دستور do و for میتوان یک همچنین کاری را کرد
خواهشمندم آقا نوید یک مثال کامل البته با کد کامل و با استفاده از حلقه do و for بزنید تا من کاملا" در این رابطه روشن شوم

قبلا" از شما تشکر میکنم به خاطر لطف جنابعالی به اینجانب
 

saalek110

Well-Known Member
با سلام چون آقا نويد ممكنه تا فردا تشريف نياورند، من آنچه از فرمايشات ايشان فهميدم را كدنويسي كردم. شايد توانسته باشم كمكي بكنم. در ضمن من ساعتي يك بار آنلاين ميشم. مباحثه كنيد اگر مشكلي بود.

Option Explicit
Private Sub cmd1_Click()
Static xcount
If xcount > 3 Then Call baakht
If xcount > 3 Then Exit Sub
If txtsam.Text = "sam" Then
lblsam.Caption = "You win"

Else
xcount = xcount + 1
lblsam.Caption = "You lose"
txtsam.Text = ""
txtsam.SetFocus
End If
End Sub
Private Sub baakht()
lblsam.Caption = "you try 3 time , return 0.5 hours later"
End Sub
 

hamidahmadi

Active Member
با تشکر از سالک عزیز
سالک جان دقیقا" زدید به هدف زیرا من دقیقا" همین را میخواستم حال میخواهم برایم توضیح دهی چرا از متغیر استاتیک استفاده کردی و اینکه آیا نمی شود با استفاده از حلقه do و for این کار را کرد. چرا که با همه سادگی این دو دستور من نمیتوانم درست آن را متوجه شوم البته وقتی دیگران مثال میزنند راحت است اما وقتی خودم میخواهم یک موضوعی را با این دو حلقه آزمایش کنم نمیتوانم و دیگر اینکه اگر میتوانید در مورد کدی که نوشتید یک راهنمائی بکنید.
مرسی از لطف بیکرانت
 

saalek110

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

اگر مي خواي از حلقه استفاده كني ، بجاي تكست باكس از
inputbox
استفاده كن. خيلي راحت ميشه كار.
يعني يك حلقه تعريف كن كه 3 بار بچرخه.
for e=0 to 1
بعد در درونش
inputbox
را بذار.
کد:
javaab=inpitbox......
بعد مثل برنامه قبلي جواب را چك كن.
.
 
آخرین ویرایش:

saalek110

Well-Known Member
شرح كد: ما يك متغير استاتيك تعريف مي كنيم. متغير استاتيك فقط مي تونه محلي باشه. پس بالا (زير option explicit ) نمي شه تعريف كرد. من مقدار دهي اوليه به اين متغير نكردم. وقتي مقدار دهي اوليه نكنيد ، صفر ميشه مقدارش.
حال در شرطي كه خودتان نوشته بوديد و من هم از آن استفاده كردم ، اگر كاربر اشتباه جواب بده ، قسمت else برقرار ميشه. و در اين قسمت ، متغير ما يكي به مقدارش افزوده ميشه.
وقتي 3 تا 4 بار كه كاربر اشتباه جواب بده اين عدد بزرگتر از 3 ميشه و If xcount > 3 Then Call baakht عمل مي كنه و زير برنامه sub ما احضار ميشه. براي اينكه ديگر به كدهاي رويداد كليك دكمه وارد نشه وقتي اين شرط برقراره ، اين خط را افزوديم. If xcount > 3 Then Exit Sub چون اگر نبود ، باز روي ليبل ما چيزهايي مي نوشت كه دلخواه نبود. پس با دستور exit sub خارج ميشيم از رويداد كليك دكمه، يعني به كاربر ديگه اجازه امتحان نمي دهيم.
 

hamidahmadi

Active Member
خیلی ممنون سالک جان امیدوارم همیشه موفق باشی ضمنا" در 19 صفحه ای که ویژوال بیسیک را به همراه میخک درس میدهی شاهکار کرده ائی . امیدوارم آنرا همینطور ادامه بدهید
 

MnavidM

Active Member
سلام.
سالک جان ممنون که جواب رو کامل کردی.

hamid جان موفق باشی.

نوید.
 

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

بالا