'How to add button to a specific DataGridView C# WinFrom
Hi, I am very new to C# and window forms. Just like this image showing, I added DataGridView_B
to DataGridView_A
, where DataGridView_B
is usually invisible and only be visible when certain function is called. As far to this step, everything works well.
Then I decided to add a button Button_Close
to DataGridView_B
, so when I don't need DataGridView_B
, I can click the button and it would be invisible again.
Code that I used to bound B to A, which works fine:
this.DataGridView_A.Controls.Add(this.DateGridView_B);
...
this.DateGridView_B.Dock = System.Windows.Forms.DockStyle.Bottom;
Code that I used to bound button to B, which has issue:
this.DataGridView_B.Controls.Add(this.Button_Close);
As long as I bound button to B, the button disappears, then I tried to comment out this line of code, the button is still gone.
Does anyone have any thoughts about why the code acts like this?
Note: the button is added manually by the Toolbox
, not programmatically.
Solution 1:[1]
When you drop items in from the Toolbox
instead of programmatically adding them, their location is absolute to the top left corner of the form.
In your example, I'll make the following assumptions:
DataGridView_A
is 400 x 800 px.DataGridView_B
is 400 x 300 px.Button_Close
is at Point
(350, 510). (Relative to top left corner of form)
When you programmatically add Button_Close
to DataGridView_B
, the location of the button is persevered but in the wrong way. It keeps the Point
(350, 510) and not the Point
relative to DataGridView_B
. This puts Button_Close
at Point
(350, 510) relative to DataGridView_B
when you add it, thus it is not in view.
This can be fixed by adding the button and moving its location to your desired location. Example:
//Add DataGridView_B to DataGridView_A
this.DataGridView_A.Controls.Add(this.DataGridView_B);
this.DataGridView_B.Dock = DockStyle.Bottom;
//Add Button_Close to DataGridView_B
this.DataGridView_B.Controls.Add(this.Button_Close);
//10 px margin on top and right
this.Button_Close.Location = new Point(this.DataGridView_B.Width - (this.Button_Close.Width + 10), 10);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |