2014-08-27 49 views
0

我想知道如何強制我的主要gui更新對話框,如SaveFileDialog框關閉。我試過Main.LostFocus,Main.GotFocus,,Main.MouseEnter,Main.MouseLeave,Main.MouseMove,但無論我嘗試什麼功能,我都無法得到我期待的結果。如何在VB.Net中關閉對話框時強制執行操作?

單擊圖片時打開對話框。點擊時圖片發生變化,並在調用icon_new.MouseUp時再次發生變化。問題是它在對話框關閉之前正常工作。在這一點上,圖片變回到鼠標懸停時的圖像。

這裏是圖片定期做什麼:

Private Sub icon_new_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles icon_new.MouseDown 
    icon_new.Image = My.Resources.NewMapClick 
End Sub 
Private Sub icon_new_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles icon_new.MouseUp 
    icon_new.Image = My.Resources.NewMapHover 
End Sub 
Private Sub icon_new_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles icon_new.MouseEnter 
    icon_new.Image = My.Resources.NewMapHover 
End Sub 
Private Sub icon_new_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles icon_new.MouseLeave 
    icon_new.Image = My.Resources.NewMapDefault 
End Sub 

這工作,直到對話框關閉,此時它的圖像變成NewMapHover當它應該是NewMapDefault,因爲鼠標是沒有內不再圖片的邊界。在諸如Main.LostFocusMain.GotFocus或這樣的呼叫中,我有icon_new.image = My.Resources.NewMapDefault,但即使此呼叫觸發,圖像也會以NewMapHover結尾。我不知道爲什麼會發生這種情況,或者如何解決這個問題。任何幫助是極大的讚賞。

編輯:這是調用dialog_box

Private Sub icon_new_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles icon_new.Click 

    If file_created = True Then 
     save() 
    Else 'file_created = false' 
     SaveWindow.FileName = txt_name.Text 
     If SaveWindow.ShowDialog() = DialogResult.OK Then 
      file_path = SaveWindow.FileName 
     End If 
     file_created = True 
    End If 
    save() 
    new_file() 

End Sub 

click事件如果該文件尚未保存,然後打開一個對話框,提示用戶保存文件。我還玩弄了一個MsgBox(),它有Yes,No和Cancel,提示,但爲了簡單起見,我拿出了它,因爲結果是一樣的,三分之一的時間SaveFile對話框會出現。

+0

鼠標向下,向上或單擊時會打開對話框?你有鼠標點擊事件嗎?提供代碼。 – 2014-08-27 21:12:47

+0

你試過把'icon_new.Image = My.Resources.NewMapDefault'作爲你點擊事件中的第一件事,在對話框之前? – Steve 2014-08-27 22:04:06

+0

鼠標輸入/離開事件總的來說非常麻煩,當您使用對話框將焦點移開時,將該問題撥至11。 – 2014-08-27 22:18:42

回答

0

這是我本來的代碼。

Private Sub icon_new_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles icon_new.MouseUp 
    icon_new.Image = My.Resources.NewMapHover 
End Sub 

我增加了可變dialog_open作爲boolean並將其設置爲true每當我稱爲SaveFile.ShowDialog()。然後,我改變了我的MouseUp事件這樣的:

Private Sub icon_new_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles icon_new.MouseUp 
    icon_new.Image = My.Resources.NewMapHover 
    If dialog_open = True Then 
     icon_new.Image = My.Resources.NewMapDefault 
     dialog_open = False 
    End If 
End Sub 

感謝@valter和@Kevin霍格的建議我修改MouseUp事件。

0

嘗試雙擊SaveFileDialog,它將打開SaveFileDialog_FileOk事件代碼,然後將相同的代碼放置在MouseLeave事件中。

當您按下「保存」按鈕後,SaveFileDialog即將關閉時,此事件將觸發。


編輯:

您可以嘗試在點擊事件這樣做:

Dim DResult As DialogResult 
DResult = SaveFileDialog1.ShowDialog() 

If DResult = System.Windows.Forms.DialogResult.OK Then 
    'Code for when you press the save button, and when the image should change 
ElseIf DResult = System.Windows.Forms.DialogResult.Cancel Then 
    'Code for image change... 
End If 
+0

唯一的問題是如果關閉對話框或單擊取消。我試着把代碼放在取消或保存結果的時候,在調用對話框的點擊事件中,但結果仍然是一樣的。理論上這應該調用click事件,然後應該完全關注對話框並關閉堆棧,然後修改圖像的代碼,但由於某些原因,最終結果仍然不正確。不過,感謝您的幫助。 – ZeverMX 2014-08-27 21:02:28

+0

試試我的編輯也是(: – 2014-08-27 21:14:00

+0

)不幸的是,那是我嘗試的第一件事,我很遺憾地說,它沒有工作 – ZeverMX 2014-08-27 21:29:23

0

嘗試

Private Sub icon_new_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles icon_new.MouseUp 
    Dim pnt As Point 
    Dim rect As Rectangle 

    rect.X = icon_new.Location.X 
    rect.Y = icon_new.Location.Y 
    rect.Width = icon_new.Width 
    rect.Height = icon_new.Height 

    pnt = PointToClient(Cursor.Position) 

    If Not rect.Contains(pnt) Then 
     Return 
    End If 

    icon_new.Image = My.Resources.NewMapHover 
End Sub 

瓦爾特

+0

感謝您的幫助編輯MouseUp事件是一種方式,但我認爲我找到了一個更簡單的方法。 – ZeverMX 2014-08-29 20:04:03

相關問題