私はToolStripを使用しており、ツールストリップボタンを使用してGUIを変更する方法のサンプルコードを使用してGUI構造を変更するためのボタンです。ToolStripButtonのクリックされたイベントが処理されたときに単一のプロシージャを呼び出すことができるなど、より簡単な方法でそれらを使用する方法はありますか?現在の場合、私は悪い方法でコーディングしているようです。
たとえば、ユーザーが[ホーム]ボタンをクリックすると、選択したボタンが強調表示され、他のパネル要素が非表示になり、ホームのパネルが表示されます。
Private Sub tsbHome_Click(sender As Object, e As EventArgs) Handles tsbHome.Click
tsbHome.Checked = True
tsbTools.Checked = False
tsbReport.Checked = False
tsbAnalyze.Checked = False
'... Tool Strip Button lists continues...
pnlHome.Visible = True
pnlTools.Visible = False
pnlReport.Visible = False
pnlAnalyze.Visible = False
' ... Panel lists continues...
End Sub
ユーザーが[ツール]ボタンをクリックすると、選択したボタンが強調表示され、他のパネル要素が非表示になり、ツールのパネルが表示されます。
Private Sub tsbTools_Click(sender As Object, e As EventArgs) Handles tsbTools.Click
tsbHome.Checked = False
tsbTools.Checked = True
tsbReport.Checked = False
tsbAnalyze.Checked = False
'... Tool Strip Button lists continues...
pnlHome.Visible = False
pnlTools.Visible = True
pnlReport.Visible = False
pnlAnalyze.Visible = False
' ... Panel lists continues...
End Sub
このコードをはるかに単純にするための2つのトリックがあります。1つ目Handles
は、イベントメソッド宣言の句に複数の項目を含めることができることを知っていることです。(その句を省略して、AddHandler
1つのメソッドに多くのコントロールのイベントハンドラーを設定するために使用することもできます。)もう1つのトリックは、sender
引数を使用して、このメソッドに接続されている複数のコントロールのどれが使用されたかを判断する方法を知ることです。
それらを組み合わせると、任意のビューに変更するために機能する1つの方法が得られます。
Private Sub NavigationMenuItem_Click(sender As Object, e As EventArgs) Handles tsbHome.Click, tsbTools.Click, tsbReport.Click, tsbAnalyzer.Click
'First Suspend Layout, to avoid extra screen re-draws
Me.SuspendLayout()
'Set your checkboxes
tsbHome.Checked = sender Is tsbHome
tsbTools.Checked = sender Is tsbTools
tsbReport.Checked = sender Is tsbReport
tsbAnalyze.Checked = sender Is tsbAnalyze
'Then De-select EVERYTHING
pnlHome.Visible = sender Is tsbHome
pnlTools.Visible = sender Is tsbTools
pnlReport.Visible = sender Is tsbReport
pnlAnalyze.Visible = sender Is tsbAnalyze
' ... lists continues...
'Finally, resume layout so all changes draw to the screen at once
Me.ResumeLayout()
End Sub
Form LoadまたはInitializeComponent()メソッドにコードを追加して、パネルとツールストリップボタンをリストに追加すると、これを簡単に行うことができます。
Private ViewButtons As List(Of ToolStripButton)
Private ViewPanels As List(Of Panel)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ViewButtons = New List(Of ToolStripButton) From {tsbHome, tsbTools, tsbReport, tsbAnalyze}
ViewPanels = New List(Of Panel) From {pnlHome, pnlTools, pnlReport, pnlAnalyze}
For Each b In ViewButtons
AddHandler b.Click, AddressOf NavigationMenuItem_Click
Next
End Sub
Private Sub NavigationMenuItem_Click(sender As Object, e As EventArgs)
Me.SuspendLayout()
For i As Integer = 0 To ViewButtons.Length - 1
Dim selected As Boolean = ViewButtons(i) Is sender
ViewButtons(i).Checked = selected
ViewPanels(i).Visible = selected
Next
Me.ResumeLayout()
End Sub
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加