.net 如何编写VB表单应用程序,以根据单击的按钮显示不同的输入控件集?
我已尝试将输入控件放置在组框和面板框中,并将用户选择的组/面板框的.Visible属性更改为True,将所有其他属性更改为false 我是不是找错了方向,认为这个UI设计是错误的?以下是我迄今为止编写的代码:.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
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 谢谢你的建议!我会尝试这个,当我到达一个地方,我可以做一些编码周一后,我到代托纳。