• 0

[.NET] Multi-Panel Application?


Question

Hi,

I've made a simple application in VB.NET that switches between two different panels, but I'm not sure if it's the most efficient way to do it. Please see the below code and compile the file and let me know if there's any better way to do it. Thanks!

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents Panel2 As System.Windows.Forms.Panel
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
    Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem
    Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem
    Friend WithEvents MenuItem3 As System.Windows.Forms.MenuItem
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Panel1 = New System.Windows.Forms.Panel
        Me.Label1 = New System.Windows.Forms.Label
        Me.Panel2 = New System.Windows.Forms.Panel
        Me.Label2 = New System.Windows.Forms.Label
        Me.MainMenu1 = New System.Windows.Forms.MainMenu
        Me.MenuItem1 = New System.Windows.Forms.MenuItem
        Me.MenuItem2 = New System.Windows.Forms.MenuItem
        Me.MenuItem3 = New System.Windows.Forms.MenuItem
        Me.Panel1.SuspendLayout()
        Me.Panel2.SuspendLayout()
        Me.SuspendLayout()
        '
        'Panel1
        '
        Me.Panel1.BackColor = System.Drawing.SystemColors.ActiveCaption
        Me.Panel1.Controls.Add(Me.Label1)
        Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
        Me.Panel1.Location = New System.Drawing.Point(0, 0)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(292, 271)
        Me.Panel1.TabIndex = 0
        '
        'Label1
        '
        Me.Label1.Font = New System.Drawing.Font("Verdana25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label1.Location = New System.Drawing.Point(96, 88)
        Me.Label1.Name = "Label1"
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "This Is Panel 1"
        Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        '
        'Panel2
        '
        Me.Panel2.BackColor = System.Drawing.SystemColors.Info
        Me.Panel2.Controls.Add(Me.Label2)
        Me.Panel2.Dock = System.Windows.Forms.DockStyle.Fill
        Me.Panel2.Location = New System.Drawing.Point(0, 0)
        Me.Panel2.Name = "Panel2"
        Me.Panel2.Size = New System.Drawing.Size(292, 271)
        Me.Panel2.TabIndex = 1
        '
        'Label2
        '
        Me.Label2.Font = New System.Drawing.Font("Verdana25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label2.Location = New System.Drawing.Point(32, 48)
        Me.Label2.Name = "Label2"
        Me.Label2.TabIndex = 1
        Me.Label2.Text = "This Is Panel 2"
        Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
        '
        'MainMenu1
        '
        Me.MainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem1})
        '
        'MenuItem1
        '
        Me.MenuItem1.Index = 0
        Me.MenuItem1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem2, Me.MenuItem3})
        Me.MenuItem1.Text = "Change Panel"
        '
        'MenuItem2
        '
        Me.MenuItem2.Index = 0
        Me.MenuItem2.Text = "Panel 1"
        '
        'MenuItem3
        '
        Me.MenuItem3.Index = 1
        Me.MenuItem3.Text = "Panel 2"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 271)
        Me.Controls.Add(Me.Panel1)
        Me.Controls.Add(Me.Panel2)
        Me.Menu = Me.MainMenu1
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.Panel1.ResumeLayout(False)
        Me.Panel2.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
        Panel1.Visible = True
        Panel2.Visible = False
    End Sub

    Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
        Panel1.Visible = False
        Panel2.Visible = True
    End Sub
End Class

Once again, thanks in advance!

Link to comment
https://www.neowin.net/forum/topic/379148-net-multi-panel-application/
Share on other sites

9 answers to this question

Recommended Posts

  • 0

If the panels appear one over the other (that is, they have the same size and location) then you should consider changing their zorder... like this:

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
  Panel1.BringToFront()
End Sub

Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
  Panel2.BringToFront()
End Sub

  • 0
  bangbang023 said:
You could simply do a panel1.bringtofront() command. That should make things a little easier and cleaner if you start having many panels. I believe that command should still work.

586600388[/snapback]

Yeah either of those should work fine.

  • 0
  syko86 said:
Thanks for the replies =D. Is there any way to optimize it? I've an application that has 3 different panels and it takes up like 15MB of memory while running =(.

586600853[/snapback]

That's simply how .net works and while users will bitch and moan, it's nothing to worry about. The framework reserves memory for itself so it's readily accessible when needed, however, if another application requests any of that unused memory, the .net framework will immediately release it and let the other process use it.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Was sort of sceptical about the unload page feature , just tried it and it does actually drop memory usage. 22 tabs open(1.65gb Ram) and after unloading Facebook as a test it dropped to 1.2gb
    • Elon Musk doesn't want you to know Tesla's response to the NHTSA's Robotaxi questions by David Uzondu Recently, Tesla's Robotaxi service began operating in Austin, and almost immediately, the company decided it would prefer you didn't see its homework. Before the launch, the National Highway Traffic Safety Administration (NHTSA) sent Tesla a letter with a deadline of June 19th to answer some questions. Now that Tesla has replied, it has requested that the NHTSA withhold the entire response from the public, classifying it as confidential business information. This isn't too surprising, as the company is notoriously secretive about its performance data, especially in areas like Autopilot and Full Self-Driving. Here are a few paraphrased versions of the questions Tesla faced: How will the system handle bad weather or poor visibility? What happens if the system detects that it cannot drive safely? Does it pull over? Will a human be monitoring the cars remotely or in person? Does the system follow any existing industry standards for autonomous driving? When does Tesla plan to let other people operate their own cars as robotaxis? The feds have good reason to ask. On its first day, Tesla's Robotaxi service was caught on video making some questionable moves, including driving in the wrong lane against traffic, as seen below (full video here). The clip was also shared in our community forums, though you'll need a free membership to access the off-topic section. Here's another showing a Robotaxi dropping passengers in the middle of an intersection. For now, the service runs with a human safety driver (likely a Tesla employee) in the passenger seat. Billionaire Dan O'Dowd, a persistent critic of Tesla's software, felt the company's launch was lackluster, and the videos circulating online demonstrate that the technology is years behind competitors like Waymo, which has operated without in-car supervisors since 2019. For its part, NHTSA acknowledged being aware of the widely reported incidents and is in contact with Tesla to get more information. The agency's statement reminded the public that manufacturers self-certify their vehicles' safety, and NHTSA's role is to investigate and act on safety problems after they are on the road: This situation gets even more interesting when you look at the bigger picture. Musk has already been criticized for his role in the Department of Government Efficiency (DOGE), which has led to job cuts at agencies that oversee his companies, including the Federal Aviation Administration (FAA) for SpaceX, the Food and Drug Administration (FDA) for Neuralink, and, of course, NHTSA. This has led some to worry about regulatory capture. As one cynical comment on Electrek's article notes, the official who signed the letter to Tesla, Tanya Topka, Director of NHTSA's Office of Defects Investigation, may have put a target on her back just for trying to hold the company accountable.
    • Have you ever developed a game for Xbox and Windows at the same time? To say that they are not the same operating system and the same DirecTx by chance?? It's obvious that it isn't, right? So what if Xbox uses HyperV? What difference does that make to a game developer? The PS4 is more different than the PS5, different operating systems and different APIs. The games are not backwards compatible However, a game made in Windows can be transferred to Xbox SX in a few weeks with little programming costs because they are the same API and the same Windows
    • Idiot, FH5 sold more on Xbox and Windows than on PS5. You tell lies like that and think no one will check, right? There are a lot of FIFA and CoD hacks on PS4 and PS5 being used every day and Sony doesn't do anything. You can also buy a game's Platinum achievement without having bought the game and Sony doesn't do anything.
  • Recent Achievements

    • First Post
      956400 earned a badge
      First Post
    • Week One Done
      davidfegan earned a badge
      Week One Done
    • First Post
      Ainajohn earned a badge
      First Post
    • Conversation Starter
      sophiaisabella32 earned a badge
      Conversation Starter
    • First Post
      Brett76 earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      590
    2. 2
      ATLien_0
      225
    3. 3
      Michael Scrip
      172
    4. 4
      +FloatingFatMan
      148
    5. 5
      Xenon
      133
  • Tell a friend

    Love Neowin? Tell a friend!