Krish KvR
Krish KvR

Reputation: 1054

Toggle Group Box Visibility

I have two Group Boxes grpMeter and grpTag. I have to place grpMeter over grpTag.. both need same location and size..

On button click, I have to make them visible alternately. Is it possible? I tried many times but only 1 group box becomes visible. Maybe because of the overlapping problem. I tried with panel, but the same problem arises. Is there any solution?

public void ShowMeter()
{
    grpMeter.Visible = true;
    grpTags.Visible = false;
}

public void ShowTag()
{
    grpTags.Visible = true;
    grpMeter.Visible = false;            
}

Upvotes: 4

Views: 24080

Answers (6)

NeverHopeless
NeverHopeless

Reputation: 11233

One of the good way is to use RadioButton. Take two Radio buttons and place it inside a groupbox.

Something like this would work:

private void rdMeter_CheckedChanged(Object sender, EventArgs e)
{
    grpMeter.Visible = rdMeter.Checked;
    grpTag.Visible = !rdMeter.Checked;
}

private void rdTag_CheckedChanged(Object sender, EventArgs e)
{
    grpTag.Visible = rdTag.Checked;
    grpMeter.Visible = !rdTag.Checked;
}

Upvotes: 0

Mehmet Ataş
Mehmet Ataş

Reputation: 11559

I am not sure but what you are looking for seems like FlowLayoutPanel. Then you can put group boxes next to each other and positioning will be handled automatically. This prevents accidentally putting one GroupBox into another or shifting locations. Also provides an easier working at design time.

Upvotes: 0

cvraman
cvraman

Reputation: 1697

See the code below. The button Click will toggle visibilty. Also it's important that you set one of the groupboxes as visible and the other one as invisible in your constructor

using System;
using System.Windows.Forms;

namespace TestForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //This is important. Set one of them to be Visible and the other one to be invisible
            grpMeter.Visible = false;
            grpTags.Visible = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            grpMeter.Visible = !grpMeter.Visible;
            grpTags.Visible = !grpTags.Visible;
        }
    }
}

Upvotes: 0

Thorsten Dittmar
Thorsten Dittmar

Reputation: 56727

Place both group boxes next to each other so that they don't overlap and see if it works then. If you made it work, don't move the one group box with the mouse, but select it only and then set the coordinates manually in the Properties list.

That way you can prevent the one group box from accidentially becoming the child of the other group box.

Upvotes: 16

Spaceman
Spaceman

Reputation: 547

Try this logic inside a button_click event:

private void btn_Click(object sender, EventArgs e)
{
    if (grpTags.Visible)
        ShowMeter();
    else
        ShowTag();
}

Upvotes: 1

Chepene
Chepene

Reputation: 1128

Try this:

private void button_Click(object sender, EventArgs e)
{
    grpMeter.Visible = !grpMeter.Visible;
    grpTags.Visible = !grpTags.Visible;
}

Upvotes: 0

Related Questions