2013-04-16 39 views
0

我已經在網上搜索了這個答案但找不到它。這似乎是一個普遍的問題,我很困惑,沒有找到任何東西。在VB.net中將第二種形式的返回輸入焦點轉換爲第一種形式

我有3個表格 表格A是用戶將要處理的表格; 表格B用於選擇要顯示的表格C的菜單; 表格C是數據庫中數據的「快速列表」,用於幫助進入表格A.在會話期間可以顯示幾個表格C.

  • 用戶,而在形成工作,其中,用戶按下單個鍵和所需的形式C可以按控制-Q,將顯示菜單形式B.

  • 控制自動傳遞到形式B彈出窗體並關閉。

  • 控制傳遞給窗體C,它是'活動'形式。

沒有什麼填寫上表C,所以我想自動返回到上表A的最後一個活動控制

一切工作得很好,但我結束了C型爲活性形式。

我該如何強制控制回到Form A上的最後一個活動控件?

+0

謝謝您花時間發佈這個問題和答案。你會考慮發佈源代碼嗎?我發現這有點難以遵循,代碼清單可能會讓事情變得更加清晰。 –

回答

0

好的我明白了。還有幾個問題需要解決。不知道這是否是最好的方法,但它確實有效。

第一個問題是能夠引用你想要從其他窗體獲得焦點的窗體。我將表格B和表格C的'show'事件重載,以便能夠傳遞原始呼叫表單。當我從表單A調用表單B時,我提供了表單A的引用。然後,當我調用表單C時,我再次將表單A的引用傳遞給了表單A.此時,表格B和表格C都知道發件人是誰。

我試圖將焦點返回到Form C中的Form C中。因此,在Form B和Form C中,我將設置一個變量(Dim'callingform'as Form)。在每一個晶型B和CI的使用如下:

昏暗callingform爲形式

重載子顯示(BYVAL F1爲形式)

Callingform = F1

因此,每個表B和表的C有一個參考原始形式A,最終得到焦點。

但是你不能用該變量引用表單。以下是對錶格的適當引用,「重點」是改變焦點的方法。

CTYPE(callingform,windows.forms.form).focus()

這種說法似乎很簡單,但我試圖在錯誤的地方使用它。我在Form C的'Load'事件結束時使用了這個語句。問題在於Form C尚未獲得焦點,因此執行該語句隨後會被重寫,因爲Form C實際上是顯示的。那時我不知道,但現在做,焦點沒有轉移到新的形式,直到加載事件後。所以如果你把這個陳述放在表格C的'GotFocus'事件中,它就像魅力一樣。

經過一段時間的考慮後,我決定可以從任何地方調用表格C,它不應該決定焦點應該設置在哪裏。

FormC.Show(FORMA)「顯示C型,並通過發起:應該由誰決定顯示形式C.

所以我已經把表格B的菜單選擇代碼末尾以下決定形式)

CTYPE(FORMA,windows.forms.form).focus() '將焦點轉到走形式,原始形式

formB.Close(實際 - me.close) - ' 關閉彈出的菜單形式,FormB

(旁白:我真的不在爲什麼'ctype'是必要的。我將該表單作爲「表單」傳遞,並將變量「callingform」定義爲表單。我希望能夠只說callform.focus()。 )

0

這是我的答案的相關代碼。

部分代碼: 形式A(原始調用的形式)

If CurMode = Browse Then 

    'Check for Quick List menu CRTL-Q 
    If e.Control AndAlso e.KeyCode = Keys.Q Then 

    ' Call the 'Menu form, FormB 
    CType(Me.MdiParent, frmRECORDmain).ShowQuickListMenu(Me, Me.ActiveControl) 
    Exit Sub 
    End If 

在[快速菜單形式(原始形態B)

Public Class frmQuickListMENU 
Dim CallingForm As Form 
Dim CallingControl As Control 
Dim Selection As String 

' This is so that Form B will know who Form A was. 
Overloads Sub Show(ByVal f As Form, 
       ByVal c As Control, 
       Optional PreSelection As String = "") 
CallingForm = f 
CallingControl = c 
Selection = PreSelection 
Show() 
End Sub 

Private Sub frmQuickListMENU_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
Select Case e.KeyCode 
    Case Keys.D1, Keys.NumPad1 
    . .  
    Case Keys.D3, Keys.NumPad3 
    . . . 
    Case Keys.D6, Keys.NumPad6 
    . . . 
    ' One of 12 Menu choices which will open 1 of 12 Form C's 
    Case Keys.D7, Keys.NumPad7 
    Dim frmquickListPHD1 As New frmQuickListPHD() 
    frmquickListPHD1.MdiParent = MasterParentForm 
    frmquickListPHD1.StartPosition = FormStartPosition.Manual 
    frmquickListPHD1.Location = New Point(QLPHD.Left, QLPHD.Top) 
    ' Show Form C 
    frmquickListPHD1.Show(CallingForm, CallingControl, Me) 
End Select 
' ************************ 
' ************************ 
' THE NEXT LINE IS THE 'MAGIC' I WAS LOOKING FOR 
' This line returnbs focus back to the original Form A 
' ************************ 
CType(CallingForm, Windows.Forms.Form).Focus() 
Me.Close() 
End Sub 

Private Sub frmQuickListMENU_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
    Dim x1 As Integer 
    x1 = Me.Width 
End Sub 
End Class 

終於爲「快速列表的代碼' - 表格C 但是,由於我決定改變表格B代碼而不是表格C代碼的焦點,因此表格C代碼都不相關。我只顯示它與我原來的帖子一致。

Dim callingform As Form 
    Dim callingcontrol As Control 
    Dim MenuForm As Form 


' The following was initially required so that the change of focus could be made within this 
' Class but I have since changed my mind and the Overload is unnecessary. I only left 
' this here so the code would be consistent with my original note. I'll be removing 
' thisOverload of the 'Show' event. 
Overloads Sub Show(ByVal f1 As Form, 
        ByVal c As Control, 
        ByVal f2 As Form) 
    callingform = f1 
    MenuForm = f2 
    callingcontrol = c 
    Show() 
End Sub 

Private Sub frmQuickListPHD_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
Try 
    conn.Open() 
    DA.SelectCommand = New SqlCommand(SQL, conn) 
    ' 
' 
' 
Catch ex As Exception 
    Console.WriteLine("Error" & ex.ToString) 
Finally 
    conn.Close() 
End Try 
Me.Height = QLPHD.Height 
Me.Width = QLPHD.Width 
' 
' 
' More form layout code 
' 
' 
' 
End Sub 
End Class 
相關問題