PDA

View Full Version : سوال: مخفی کردن و نمایش فرم بدون اجرای رویداد Form load



R2du-soft
یک شنبه 07 مهر 1392, 17:25 عصر
سلام دوستان
من نیاز به این روش دارم اما به مشکل میخورم:
برنامه ای نوشتم که پس از باز شدن سایت گوگل رو باز میکنه ، زمانی که فرم رو میبندم ، فرم اول hide میشه و سپس فرم دوم نشون داده میشه و با زدم دکمه ای که توی فرم دوم هست ، فرم اول باز به حالت نمایش در میاد.
ولی مشکل من اینجاست که من فرم اول رو مخفی کرده بودم ، و با دکمه ای که درون فرم دوم هست باز فرم رو به حالت نمایش در اوردم،اما نمیخوام که با زدن دکمه و نمایش مجدد فرمم باز سایت گوگل باز بشه ولی این اتفاق میوفته!

کدهایی که استفاده کردم:

درون فرم اول:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()
ShellExecute Me.hWnd, "Open", "http://google.com", "", App.Path, 1
End Sub


Private Sub Form_Unload(Cancel As Integer)
Form2.Show
Me.Hide
End Sub

و درون فرم دوم یک دکمه و سپس کدهای زیر:
Private Sub Command1_Click()
Form1.Show
Me.Hide
End Sub

روشی هست که زمانی که میخوایم فرم رو به حالت نمایش در بیاریم رویداد form load اجرا نشه؟
و
روشی هست مانند goto که از فرم 2 فرمان بدیم که به قسمتی از رویداد فرم اول بره و از اونجا به بعد اجرا کنه کد رو؟ مثل کد زیر:


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()
ShellExecute Me.hWnd, "Open", "http://google.com", "", App.Path, 1

:2

ShellExecute Me.hWnd, "Open", "http://yahoo.com", "", App.Path, 1

End Sub

Private Sub Form_Unload(Cancel As Integer)
Form2.Show
Me.Hide
End Sub

Private Sub Command1_Click()
form1.goto2


یعنی رویداد 2 که توی فرم اول هست رو به بعد اجرا کنه و از باز کردن سایت گوگل صرف نظر کنه؟ :متفکر:

R2du-soft
یک شنبه 07 مهر 1392, 18:01 عصر
دوستان میدونم که با کد
form.visable = false
و

form.visable = true

فرم بدون اجرای رویداد form load اجرا میشه اما دقت کنید که من در رویداد form unload کد me.hide و کد form2.show رو نوشتم ف با وجود اینکه کد me.hide رو نوشتم ، چون کد توی رویداد form unload هست فرم رو hide میکنه اما بعد میبندتش!

vbhamed
یک شنبه 07 مهر 1392, 18:59 عصر
سلام

مشكل شما اين نيست كه از كجا به بعد اجرا بشه يا اينكه با وجود اجرا نشدن Form_Load چرا سايت گوگل مياد
فرم شما يكبار Load شده و سايت گوگل هم باز شده، با زدن دكمه شما فقط فرم رو مخفي كردين و وقتي در فرم دوم دوباره فرم اول رو نمايش مي‌دين، فرم اول به همون حالتي كه مخفي شده بود باز ميشه يعني دوباره سايت گوگل باز نميشه بلكه از همون دفعه اول كه باز شده بود، به همون حالت باقي مونده

براي رفع اين مشكل موقعي كه در فرم اول شما مي‌خواين فرم دوم رو نمايش بدين بعد از نمايش فرم دوم فرم اول رو Unload كنيد با اين دستور
Form2.show
Unload Form1

R2du-soft
یک شنبه 07 مهر 1392, 20:29 عصر
سلام
دوست عزیز من درست عرض کردم شما فکر کنم کد رو نگاه نکردید!
شاید هم من بد توضیح دادم:
به طور خلاصه:
ما در برنامه 2 فرم داریم در فرم اول کد زیر:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()
ShellExecute Me.hWnd, "Open", "http://google.com", "", App.Path, 1
End Sub


Private Sub Form_Unload(Cancel As Integer)
Form2.Show
Me.Hide
End Sub

و در فرم دوم یک دکمه با کد زیر هست:
Private Sub Command1_Click()
Form1.Show
Me.Hide
End Sub


با باز شدن برنامه (باز شدن فرم اول) سایت گوگل باز میشه. زمانی که کاربر فرم اول رو میبنده ، فرم دوم باز میشه چون من در خاصیت form unload تعریف کردم که اگه برنامه بسته شد فرم دوم باز بشه.
با باز شدن فرم دوم یک دکمه هست که اگه کاربر روش کلیک کنه فرم اول باز میشه! و با باز شدن فرم اول باز سایت گوگل میاد بالا!
برنامه ساده ای هست اما همین سادگیش کمی پیچیدش کرده و درکش سخت و توضیح دادنش سخت ترم هست!

من خود فایل برنامه و کدها رو ضميمه کردم یه نگاهی بندازید متوجه میشید.
میخوام بعد از کلیک کردن روی دکمه ای که در فرم دوم هست ، فرم اول باز بشه اما هرچیزی که توی رویداد form load هست اجرا نشه و یا اگرم خواست اجرا بشه قسمتی رو بشه تعیین کرد که از اون قسمت به بعد کد اجرا بشه!

و اما ضميمه : 111317

ممنون میشم نگاهی بندازید و راهنماییم کنید.

vbhamed
دوشنبه 08 مهر 1392, 05:50 صبح
سلام
فايل ضميمه رو بررسي كنيد
راستي موقعي كه اينجا كد مي‌زارين انتخابش كنيد و دكمه VB رو از نوار ابزار بزنيد نه چيزي ديگه

R2du-soft
دوشنبه 08 مهر 1392, 09:20 صبح
سلام
فايل ضميمه رو بررسي كنيد
راستي موقعي كه اينجا كد مي‌زارين انتخابش كنيد و دكمه VB رو از نوار ابزار بزنيد نه چيزي ديگه
ممنون
دیدم اما باز اونی که میخوام نیست ، نمیشه توی خاصیت Form_unload کدی قرار داد که زمانی که فرم بسته شد اون کد رو انجرا کنه؟ مثلا کد me.visible = false و در نهایت فرم هم بسته نشه؟ چون اگرم من در خاصیت form_unload کد me.visible = false رو قرار بدم علی رقم اینکه کد اجرا میشه در نهایت فرم کامل بسته میشه! و با دکمه ای که در فرم دیگه وجود داره و کد form1.visible = true زیرش هست باید فرم باز نمایش بشه اما فرم از نو باز میشه چون بسته شده!
و کدی برای متوقف کردن مثل pause هست؟ ! که کل یك رویداد مثل form_unload رو در خط آخر pause کنه؟
ممنون

amin32
دوشنبه 08 مهر 1392, 10:26 صبح
ممنون
دیدم اما باز اونی که میخوام نیست ، نمیشه توی خاصیت Form_unload کدی قرار داد که زمانی که فرم بسته شد اون کد رو انجرا کنه؟ مثلا کد me.visible = false و در نهاین نرم هم بسته نشه؟ چون اگرم من در خاصیت form_unload کد me.visible = false رو قرار بدم علی رقم اینکه کد اجرا میشه در نهایت فرم کامل بسته میشه! و با دکمه ای که در فرم دیگه وجود داره و کد form1.visible = true زیرش هست باید فرم باز نمایش بشه اما فرم از نوع باز میشه چون بسته شده!
و کدی برای متوقف کردن مثل pause هست؟!که کل ید رویداد مثل form_unload رو در خط آخر pause کنه؟
ممنون

برای اینکار در رویداد Unload فرم اول به این شکل عمل کنید :



Private Sub Form_Unload(Cancel As Integer)
Form2.Show
Me.Hide
Cancel = True
End Sub

به این ترتیب فرم از حافظه خارج نمیشه و با ظاهر شدن مجدد فرم هم دوباره رویداد Load اجرا نمیشه.