none
VB在執行之後就鎖定視窗的問題? RRS feed

  • 問題

  • 我在一個專案裡創了兩個Form,分別為Form1和Form2
    我想要在執行時,先判斷某個值(例如從ini或著是reg讀取)
    條件成立時直接執行Form1
    條件不成立時先執行Form2
    按了Form2中的按鈕就關閉Form2,並開啟Form1

    請問各位大大要如何做出?


    • 已編輯 abc1236762 2013年9月27日 下午 04:10
    2013年9月27日 下午 04:08

解答

  • 按照你的順序改了之後一樣閃

    Public Class Form1
        Private Sub Button1_Click(sender As Objecte As EventArgsHandles Button1.Click
            Dim th As New Thread(AddressOf Fun)
            th.Start()
            Me.Close()
        End Sub
     
        Private Sub Fun()
            Application.Run(New Form2())
        End Sub
    End Class


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    • 已標示為解答 abc1236762 2013年9月28日 上午 08:00
    2013年9月28日 上午 07:48

所有回覆

  • 用 if ... else ...

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年9月27日 下午 04:09
    版主
  • 但不知放哪阿
    還有我試過用隱藏會突然閃一下才消失
    2013年9月27日 下午 04:11
  • http://stackoverflow.com/questions/4759334/how-can-i-close-a-login-form-and-show-the-main-form-without-my-application-closi

    上面的範例變形一下就能做到你要的了。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年9月28日 上午 02:48
    版主
  • 這種要把畫面切來切去的做法通常我會用另一種方式

    一個 Form , 兩個 UserControl, 這種方法只要決定 Form 裡要出現那個 USerControl  就好了.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 <br/> <a target="_blank" href="http://www.bplan.com.tw/chunfeng/front/bin/ptlist.phtml?Category=103591"><img border="0" src="http://files.dotblogs.com.tw/billchung/1007/20107414497912.gif" width="200" height="67"></a>

    2013年9月28日 上午 03:52
    版主
  • 但是我看不懂c...
    2013年9月28日 上午 04:49
  • abc1236762你好:
    根據我的看法和經驗,你或許可以嘗試這樣做:

    1)點擊你的解決方案“顯示全部文件”,然後雙擊Application.Designer.vb(看截圖):

    重寫裡邊的這個方法:

     If (你的条件Then
                    Me.MainForm = Global.VB.Form1
                Else
                    Me.MainForm = Global.VB.Form2
                End If

    2)Form2中啟動一個線程,在該線程中創建一個Form1的窗體實例,并打開;此時關閉Form2不影響Form1。


    Click For donating:Free Rice For the pool

    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue.

    2013年9月28日 上午 05:54
  • 線程是?

    我在form2的Button1_Click這樣寫
    Me.Close()
    Dim Form1 As Form = New Form1
    Form1.Show()
    結果連Form1也一起關掉,為什麼?

    2013年9月28日 上午 06:58
  • 在Form2中先定義一個函數:

    Public Sub Fun()

       dim frm2 As New Form2()

       frm2.Show()

    End Sub

    然後在需要的地方這樣啟動Form2:

    Dim th As new Thread(AddressOf Fun)

    th.Start()

    2013年9月28日 上午 07:01
  • 是說開啟form2之後,按下按鈕關閉2並開啟form1

    Public Class Form2
    
        Public Sub Fun()
            Dim Form1 As New Form1()
            Form1.Show()
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Me.Close()
            Dim th As New Thread(AddressOf Fun)
            th.Start()
    
        End Sub
    End Class

    這樣也是閃退

    2013年9月28日 上午 07:25
  •  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
     Dim th As New Thread(AddressOf Fun)
            th.Start()
    Me.Close()
    End Sub

    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    2013年9月28日 上午 07:31
  • 按照你的順序改了之後一樣閃
    2013年9月28日 上午 07:33
  • 按照你的順序改了之後一樣閃

    Public Class Form1
        Private Sub Button1_Click(sender As Objecte As EventArgsHandles Button1.Click
            Dim th As New Thread(AddressOf Fun)
            th.Start()
            Me.Close()
        End Sub
     
        Private Sub Fun()
            Application.Run(New Form2())
        End Sub
    End Class


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    • 已標示為解答 abc1236762 2013年9月28日 上午 08:00
    2013年9月28日 上午 07:48
  • 謝謝你,解決了

    不過我想知道這幾行的意義是甚麼

    2013年9月28日 上午 08:00
  • 因為如果你直接像VB6一樣的直接開窗體,意味著他是直接通過UI線程操作的。你把Form1關閉了,關閉了UI線程,那麼由Form1創建的Form2也不復存在了。

    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    2013年9月28日 上午 08:03
  • Visual Basic 的專案有一個很特別的屬性叫 "程式關閉模式" , 可以選擇是 "啟動表單關閉" 或 "最後一個表單關閉" 才會關閉整個 Application.

    至於為什麼直接在 Thread 中用 Form.Show 會閃一下就關掉, 是因為你 Form.Show之後, Thread 就結束了. 所以 Form2 所存在的執行緒既然已經不見了, 它就跟著消失.

    用 Application.Run 則會在該執行緒中創建一個新的事件訊息迴圈, 所以 Thread 不會結束掉.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 <br/> <a target="_blank" href="http://www.bplan.com.tw/chunfeng/front/bin/ptlist.phtml?Category=103591"><img border="0" src="http://files.dotblogs.com.tw/billchung/1007/20107414497912.gif" width="200" height="67"></a>

    2013年9月29日 下午 06:40
    版主