我已经在网上搜索了有关此问题的答案,但找不到它。 似乎很常见的问题让我很困惑,没有找到任何东西。

我有3个表单Form A用户将使用的表单; 表格B是用于选择要显示的表格C的菜单; 表格C数据库中的数据“快速列表”,以帮助您输入表格A。在会话期间可以显示其中一些表格C。

  • 用户在处理表单A时可以按Control-Q,这将显示菜单B。

  • 控制会自动传递到表单B,在此用户按下一个键,然后弹出所需的表单C,然后关闭表单B。

  • 控制权传递给表格C,它是“活动”表格。

表格C上没有任何可填写的内容,因此我想自动返回到表格A上的最后一个活动控件。

一切正常,但最终我将Form C作为活动表单。

如何将控件强制返回到Form A上的最后一个活动控件?

===============>>#1 票数:0 已采纳

好,我知道了。 并且有几个问题需要解决。 不知道这是否是最好的方法,但是它确实有效。

第一个问题是能够从其他表单中引用您要关注的表单。 我为Form B和Form C重载了'show'事件,以便能够传递原始调用表单。 当我从表单A调用表单B时,我提供了对表单A的引用。然后,当我调用表单CI时,又将该引用传递给了表单A。 那时,表格B和表格C都知道谁是发起人。

我试图将焦点重新设置到窗体C中的窗体A。因此在窗体B和窗体C中,我都将设置一个变量(将Dim'callingform'设置为窗体)。 在表格B和CI中,每个都使用以下内容:

昏暗的呼叫形式作为形式

重载子显示(ByVal f1作为表单)

呼叫表格= f1

因此,表格B和表格C均引用原始表格A,以最终获得焦点。

但是您不能使用该变量引用表单。 以下是对表格的正确引用,“焦点”是更改焦点的方法。

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

该声明似乎很简单,但是我试图在错误的地方使用它。 我在窗体C的“加载”事件结束时使用了该语句。问题在于窗体C尚未得到关注,因此在实际显示窗体C时,随后将覆盖执行该语句。 我当时不知道,但是现在知道了,直到加载事件之后,焦点才转移到新表单上。 因此,如果将该语句放在C型“ GotFocus”事件中,则它的作用就像一个魅力。

在考虑了一段时间之后,我决定可以从任何地方调用Form C,并且它不应该确定应该在哪里设置焦点。 它应该由决定显示C表格的任何人决定。

因此,我将以下内容放在表格B的菜单选择代码的末尾:

FormC.Show(formA)'显示表单C并通过原始表单)

CType(formA,windows.forms.form).focus()'将焦点更改为原始窗体FormA

formB.Close(实际上-me.close)-'关闭菜单窗体,FormB

(此外:我不太明白为什么需要'ctype'。我将表单作为'form'传递,并将变量'callingform'定义为表单。我希望能够说出callform.focus() )

===============>>#2 票数: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

最后是“快速列表”的代码-Form C,但是,由于我决定将焦点转移到Form B代码而不是Form C代码上,因此Form 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

  ask by SunlinerV8 translate from so

未解决问题?本站智能推荐:

关注微信公众号