Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fill Panel with Buttons of the equal size

Tags:

c#

winforms

I have a Panel, inside the Panel are two or more(in the future) buttons.

How to make those buttons fully fill the Panel and have the same size independently of the Panel size changes during the application run?

EDIT: According to answers which talk about resize event. The problem is that when the next button is added it won't automatically resize rest of the buttons. Also, as far as I understand this resizing would happen ONLY when the Panel is resized and first I have to carefully set the size of the buttons in the Designer. The ideal solution would work like Java's GridLayout -> no worries about the size of any button.

enter image description here

like image 994
Yoda Avatar asked Sep 19 '25 07:09

Yoda


1 Answers

You can rely on SizeChanged event of the panel to get what you want. Sample code:

 private void Form1_Load(object sender, EventArgs e)
 {
     panel1.Dock = DockStyle.Fill;
     panel1.SizeChanged += panel1_SizeChanged;

 }

 private void panel1_SizeChanged(object sender, EventArgs e)
 {
     resizeButtons();
 }

 private void resizeButtons()
 {
     int totButtons = panel1.Controls.OfType<Button>().Count();

     Point curPos = new Point(0, 0);
     foreach(Button but in panel1.Controls.OfType<Button>())
     {
         but.Width = panel1.Width / totButtons; 
         but.Location = curPos;
         curPos = new Point(curPos.X + but.Width, 0);
     }
 }

This code makes sure that any number of buttons fill all the horizontal space no matter how much the size of Panel1 changes.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!