Stop DataGridView from flowing under panel? - c#

Question
How can I stop my datagridview from moving underneath the panel when the window is resized?
Example
What I have tried? And what I would like.
I have tried to dock the datagridview to the top on the window, but it just docks under the panel.
I have tried docking both to the top and docking one to the top and the other to the bottom, however they both just take half the screen up.
What I would like is if the datagridview docked to the bottom of the panel.

You have to modify the Anchor property on your controls. Based on what you've provided, the DataGridView control is probably anchored Bottom, Right, and you should anchor it Top, Left to match what the panel control's anchor is.
Also, if you do want the grid to be anchored to the bottom, right, you can set the MinimumSize property of your form accordingly so that it can never be resized such that the controls "collide".
It's not possible without third-party controls to dock one control to another control.

Related

How to set a gap between 2 panels in c# winform, details below

I place a panel with dock type left and place 2 panels with dock type top in the parent panel. But I want to place a gap between these 2 panels because the margin is not working on that panels. How to do that in C# winform? Please help...
I don't think you can when docking. What you could do is dock one Panel as container and then put another Panel inside that, leaving a margin as required and then anchoring to all four sides. The inner Panel is then used for your other controls rather than the outer.
Alternatively, you could use Anchor instead of Dock, which would allow you to explicitly position each Panel. The correct combination of anchored edges would simulate docking, i.e. top, left and bottom for the left Panel and top, left and right for the top Panels.
I guess the other alternative would be to introduce additional Panels to act specifically as separators between those you intend to use as containers.

How to make controls stretch and shrink when the window is resized?

How do I make it when the window is resized none of the controls are on one corner or just shrug away but become bigger or smaller to correspond with the window In Windows forms?
You need to Anchor your control(s) on the window.
Basically u (always) anchor your control on Top & Left (that's default anyway).
If you want to stretch your Control horizontal add Right.
For vertical stretching add Bottom.
[Properties] (rightclick the control you want to anchor and select properties)
Use Anchor property of each control to achieve the effect.
For example, if you set it to "Right, Bottom" on a control, it will keep its right and bottom side anchored (set to fixed distance) against the right and bottom edge of the form.
This is sufficient for basic sizing. For advanced sizing, you have to size your controls manually on window resize event.
You might also want to set MinimumSize property of your form to prevent its window to shrink under that size. This way you can prevent unwanted layout distortions like controls clipped or completely hidden behind right or bottom edge of the window.

PictureBox anchor not working properly

On my form I have a Panel control that contains a PictureBox control and a Label control.
The panel is not visible in the image above but it's basically the area around these two controls.
I have set the Anchor property of all these three controls to Top, Bottom, Left, Right so that they follow their parent container's re-sizing behavior.
The L abel control (postbagfolderempty) works properly but the PictureBox (EMPTY!) does not seem to be moving from its original position.
Is there an additional property I need to set?
Update: I changed my PictureBox's AutoSize property to None. It has started to move, but as I try to enlarge my form, it starts sinking into a white area (image below).
Make sure your PictureBox doesn't have SizeMode set to AutoSize.
Anchoring changes the size, if it's autosized it won't change anything
Also, make 100% sure your PictureBox is actually a child of the panel. It's easy to check: select it on the designer and press Esc, it should select the panel.
Update
As per the comments, seems the problem is that you are anchoring to all the sides (thus producing the scaling of the control).
If you want a panel that scales with the form, and controls within the panel that are centered but not scaled along, then anchor that panel to all sides, place the controls inside the panel centered in the designer, and set their anchors to None, that way they won't scale, and since they are not anchored, they will move along when the panel scales (but they won't scale with it, which -seems- it's what you are aiming at)

What is the difference between Dock and Anchor

I have a windows form which have a lot of controls in
that(Listbox,Groupbox,Combobox,TextBox,ListBox etc). I need to resize
and arrange the controls automatically whenever the form's size gets
changed. I need to know the difference between Dock and Anchor to
implement this. What is the actual difference between Docking and
Anchoring?
The Anchor and Dock properties of a form are two separate properties.
Anchor refers to the position a control has relative to the edges of the form. A textbox, for example, that is anchored to the left edge of a form will stay in the same position as the form is resized.
Docking refers to how much space you want the control to take up on the form. If you dock a control to the left of the form, it will stretch itself to the height of the form, but its width will stay the same.
This EXAMPLE can help you understand a bit more.

Resizing a Single Control In WinForms

How might I design a UI in C#/WinForms which happens to contain several different control types such that only the ListView control gets resized if the user resizes the window?
There are two primary ways to make a control automatically resize based on size changes of the parent container (a Form in your case):
Set the Dock property of the control to DockStyle.Fill.
Set the Anchor property to "Top, Bottom, Left, Right"
Use the Dock property with Dock.Fill
The advantage of this method is that it takes the entire control and tells it to always fill the entire client area of the parent container (in your case, the Form client area). That's useful if you want to do something like fill a Form with a ListControl or TreeView or something like that. But it's not as useful if you want to scale a single control while using other controls (as you indicate is your need). In that case, you would need to set the Dock property on those other controls to DockStyle.Top or DockStyle.Bottom to have them float above or below your main resizing control.
That's a hassle and it also limits the layout options of the other controls. You can mitigate that problem by docking two Panel controls, one at the top and another at the bottom of the Form. Those panels will remain in fixed positions while the middle area (with your DockStyle.Fill control) scales with the parent Form. You can then put any controls in any layout configuration in those "header" and "footer" panels.
This kind of composite form-building using docked panels is incredibly powerful. Quite frankly, it was game changing in .NET when they introduced this with .NET 1.0 WinForms.
Use the Anchor property with "Top, Bottom, Left, Right"
If all you want to do is have a single control on a form scale, while others stay "stuck" to the edges, use the Anchor property. For the controls that you want to stay at the top, set the Anchor property to "Top, Left" (the default). For controls that you want to stay at the bottom, set the Anchor property to "Bottom, Left". For controls that you want to grow in width with the form/dialog (such as a single-line textbox control), set the Anchor property to "Left, Right" (and set Top or Bottom depending whether you want it move as the top or the bottom of the dialog changes.
And if you want a control to resize in all directions with a Form, set the Anchor property to "Top, Left, Bottom, Right". Very useful for "main control" type of things, such as a dominant listbox, tree control, or multi-line textbox.
For what you need, don't mess with the AutoSize or AutoSizeMode... those properties control how a control changes size based on its own contents, not how it resizes based on its container's behavior. Think of AutoSize/AutoSize mode as inward looking, while Anchor/Dock are outward looking. You get some very bizarre behavior if you use both sizing methods at the same time. Generally not useful.
Dock the ListView to all four sides of the form, and the other controls to 2 or less.
There is a property on controls called "Anchor" (in "Layout" category) if you set this to "Top, Bottom, Left, Right" it will maintain margins between control and its parent container causing it to resize as container changes size.
But if only one of anchors along one axis is enabled (e.g. "left", but not "right") it will move the control instead, again, preserving locked margins between the control and its container.
In short : exactly what James said, except it is "Anchor" not "Dock" property. Dock is similar but not exactly the same.
IF you put the ListView in one panel of a SplitContainer and put the remaining controls in the other panel you can restrict the growth of the second panel by setting the min and maxsize.
If your ListView is docked Full then it'll take all the increase when the form is resized.
What if we have multiple controls in the form?
For example: If a form is used to generate some result in a grid with respect to the data entered in couple of text-boxes or combo-boxes, etc.;
And we want them to resize/realign accordingly and not overlap each other (as it happens when using the dock-fill), especially with the grid-view or similar control in context.

Categories

Resources