Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何编写VB表单应用程序,以根据单击的按钮显示不同的输入控件集?_.net_Vb.net - Fatal编程技术网

.net 如何编写VB表单应用程序,以根据单击的按钮显示不同的输入控件集?

.net 如何编写VB表单应用程序,以根据单击的按钮显示不同的输入控件集?,.net,vb.net,.net,Vb.net,我已尝试将输入控件放置在组框和面板框中,并将用户选择的组/面板框的.Visible属性更改为True,将所有其他属性更改为false 我是不是找错了方向,认为这个UI设计是错误的?以下是我迄今为止编写的代码: Public Class frmMainMenu Dim blnIncident As Boolean = False Dim blnPatient As Boolean = False Dim blnAssessments As Boolean = False Dim blnInter

我已尝试将输入控件放置在组框和面板框中,并将用户选择的组/面板框的.Visible属性更改为True,将所有其他属性更改为false

我是不是找错了方向,认为这个UI设计是错误的?以下是我迄今为止编写的代码:

Public Class frmMainMenu

Dim blnIncident As Boolean = False
Dim blnPatient As Boolean = False
Dim blnAssessments As Boolean = False
Dim blnInterventions As Boolean = False
Dim blnNarrative As Boolean = False

Private Sub PanelFocus()

    If blnIncident = True Then

        pnlIncidentInfo.Visible = True
        pnlPatientInformation.Visible = False
        pnlAssessments.Visible = False
        pnlInterventions.Visible = False
        pnlNarrative.Visible = False

    ElseIf blnPatient = True Then

        pnlPatientInformation.Visible = True
        pnlIncidentInfo.Visible = False
        pnlAssessments.Visible = False
        pnlInterventions.Visible = False
        pnlNarrative.Visible = False

    ElseIf blnAssessments = True Then

        pnlAssessments.Visible = True
        pnlIncidentInfo.Visible = False
        pnlPatientInformation.Visible = False
        pnlInterventions.Visible = False
        pnlNarrative.Visible = False

    ElseIf blnInterventions = True Then

        pnlInterventions.Visible = True
        pnlIncidentInfo.Visible = False
        pnlAssessments.Visible = False
        pnlPatientInformation.Visible = False
        pnlNarrative.Visible = False

    ElseIf blnNarrative = True Then

        pnlNarrative.Visible = True
        pnlIncidentInfo.Visible = False
        pnlPatientInformation.Visible = False
        pnlAssessments.Visible = False
        pnlInterventions.Visible = False

    End If

End Sub

Private Sub btnIncident_Click(sender As System.Object, e As System.EventArgs) Handles btnIncident.Click

    blnIncident = True
    PanelFocus()

End Sub


Private Sub btnPatientInfo_Click(sender As System.Object, e As System.EventArgs) Handles btnPatientInfo.Click

    blnPatient = True
    PanelFocus()

End Sub

Private Sub btnVitals_Click(sender As System.Object, e As System.EventArgs) Handles btnVitals.Click
    blnAssessments = True
    PanelFocus()

End Sub

Private Sub btnInterventions_Click(sender As System.Object, e As System.EventArgs) Handles btnInterventions.Click
    blnInterventions = True
    PanelFocus()

End Sub

Private Sub btnNarrative_Click(sender As System.Object, e As System.EventArgs) Handles btnNarrative.Click
    blnNarrative = True
    PanelFocus()

End Sub

End Class
谢谢

斯科特

[编辑]

我想我找到了问题所在。我无意中将一些面板框控件放在了彼此的内部,这样就形成了与父面板的子关系。它们不会显示,因为。。。父控件的visible属性设置为false。在子调用之后,我还忘记将用户选择的布尔变量设置回false

感谢你们这些花时间阅读我的问题的人。如果你有更好的方法来完成我想做的事情,请随时与我分享或联系


斯科特

你所做的可能会奏效,但很难维持。最好的代码是为每个场景创建一个用户控件

考虑每个场景有哪些共同的属性,并定义一个接口。 然后让每个用户控件实现该界面


首先,它需要额外的工作,但从长远来看,它会带来大量的回报。

因为您的代码所做的一切,就是让一个面板可见,而让所有其他面板不可见。一种使以后更容易理解代码并使其更加精简的方法是将按钮的单击事件设置为由同一个处理程序处理。然后在处理程序中,遍历面板,使其除了与单击的按钮匹配的面板之外都不可见,使其可见

大概是这样的:

For Each btn as Button in Me.Controls.OfType(Of Button)
    AddHandler btn.Click, AddressOf Button_Click
Next

Private Sub Button_Click(sender As Object, e As EventArgs)
    Dim ClickedButton as Button = DirectCast(sender, Button)
    For Each p as Panel in Me.Controls.OfType(Of Panel)
        If p.Name.Contains(ClickedButton.Name.Substring(3)) Then
            p.Visible = True
        Else
            p.Visible =False
        End If
End Sub

要使此代码正常工作,您必须进行的另一个更改是将btnVitals的名称更改为btnAssessments

谢谢你的建议!我会尝试这个,当我到达一个地方,我可以做一些编码周一后,我到代托纳。