C# control size does not cover entire control - c#

I've got a DataGridView with the RowHeaderVisible property set to false;
I have the margins and padding set to 0;
then the size is equal to the header widths added together...
Why is there extra space still needed to show the full control? (There is a horizontal scroll bar visible) What property does this, or how would you get an accurate measurement of the exact (actual) sizing of the control?

I havent used one for a while but if its like a listview, the headers should be less than the width to leave space for the vertical scrollbar - presuming you have one. Try reducing the width of one of the headers, or increasing the control width

Related

Constrain the movement of a SplitContainer in C#?

I have a SplitContainer in my form.
On the 1st panel I have a TreeView and a ListView on the 2nd. (Classic)
Now I want to limit the size of the 1st panel (with the TreeView) to 250 pixels wide.
I wish to block the separator from moving too much (or too less).
How do I do that?
You can use SplitContainer.Panel1MinSize property.
SplitContainer1.Panel1MinSize = 250;
First, if you want to constrain the TreeView to be EXACTLY 250px, set the FixedPanel to be Panel1, set the IsSplitterFixed property to True, and set the Panel1MinSize to 250. This basically makes the split graphical only; the splitter will default to a size large enough for the TreeView, and will not move.
If you want to constrain the TreeView to be AT LEAST 250px, simply set Panel1MinSize to be 250. This will prevent the user from making the panel SMALLER than that, though they can make it LARGER. There is no maximum constraint, but you can get the effect of one by setting a maximum size for the window and a minimum size for the other panel of the SplitContainer.
Just a little addition.
Here is the code to place in the frmMain_Load() (or whereever). In the code, the minimum is 250 pixels and the maximum is 400 pixels.
this.splitContainer1.Panel1MinSize = 250;
this.splitContainer1.Panel2MinSize = this.splitContainer1.Width - 400;
Do not forget to place the same code in the resize event frmMain_Resize()
I guess you should take look at the FixedPanelProperty of the splitContainer. I allows you to only let the other panel grow and shrink on rezise operations:
The resizing is much smoother.

How to have a dynamically resizing GridViewColumn that scales based on the size of the largest item in the ListView in WPF?

Currently I have some GridViewColumns that use Auto for their Width property, but this only seems to work on startup. After I add new values to the ListView, the GridViewColumns using Auto don't adjust their width.
Any idea on how to do this?
Wrongly understand your meaning ;(
you should set the width by code
Here you are: How to autosize and right-align GridViewColumn data in WPF?
fire it up to blend to ease your design process,
or click off the clips with "8" signs
then it will not drag follow with the size of window (in total of 4 clips and 4 sides)
also make the horizontal scroll bar become visible, then it will add up value and scrollable =D
What are the other columns sizes set to? If they are fixed then the Auto sized column will only be able to grow up to the maxwidth minus those column widths. Have you tried setting their column sizes to *?
-Matt

Resizing DataGridView columns based on the grid width

I'm having a windows form. In this form I've datagrid control which has few columns with predefined width.
When I resize the form either by using maximize box or using mouse, datagrid automatically resizes itself to fit the form. This is done using anchor property of the datagrid.
Now I need to resize the width of the columns as well so that all the columns fit within resized grid without getting horizontal scroll bar. At present I'm doing this by calculating the ratio of the new grid width with the old grid width and increasing the column width in the same ratio. But the problem in this is the ratio is not accurate when I maximize and minimize the form, so after couple of resize actions total columns width is less than the grid width and it starts showing empty space in the grid. I'm doing this in grid resize event.
Another catch in this is, there are couple of fixed columns also present in this grid and I'm not supposed to change the width of those columns on grid resize.
How should we handle this? Is there any other way to handle this resize problem?
Update: I was doing unnecessary job of calculating the ratio to increase the width of the columns, which is not necessary.
Thanks #KMan. Your suggestion to use the fill property worked. It takes care of column width resizing based on the grid changed width on form resize.
How about:
You set the AutoSizeColumnsMode property to AllCellsExceptHeader, this would adjust all columns according to the values.
And, to your last column, you can set the style to Fill.
Also, checkout How to: Set the Sizing Modes of the Windows Forms DataGridView Control.

Multiple column scrolling, resizeable panel?

I have this:
Each list is its own WrapPanel and they are all on another WrapPanel which is in a ScrollViewer. If I don't set the height myself for the main WrapPanel it assumes I want the WrapPanel as high as it can go giving me only one column whereas I want as many columns as needed to fill the window.
If I set the Width and Height of the WrapPanel that holds everything to fixed numbers, but I want it to change when the user resizes the window.
In your example screen shot and description I see a tab control whose anchor is set to Top, Left, Bottom, and Right. The tab page with AutoScroll set to true. Within the tab page I see a FlowLayoutPanel. The FlowLayoutPanel has its AutoSize property set to true. I also see a set of other panels/user controls each of which contains a title and a series of check boxes.
You can`t achieve this with standard controls. You can try to create your own custom WrapPanel implementation. But, actually, looking at original WrapPanel sources I think this will be quite tricky. You see, what you want, is basically to measure how many columns can fit in the current window, while every element in column can be of any size. The way I see that algorithm, it will require N*N iterations to get the final result. So you may have problems with performance.

How do I know the current width of system scrollbar?

As you know, one can customize the width of the scrollbar width in Display Properties -> Appearance -> Advanced -> Item: ScrollBar. The default value is 17. However, I can't assume this is always the case, is it possible for me to retrieve this value?
Look at the System.Windows.Forms.SystemInformation class members: HorizontalScrollBarHeight and VerticalScrollBarWidth.
Vertical Scroll Bar Width
System.Windows.Forms.SystemInformation.VerticalScrollBarWidth;
If you want to know the size of a ScrollableControl minus the size of the scroll bar, the easiest way is to use the Control.ClientSize property.
From the documentation:
Gets or sets the height and width of the client area of the control.
The client area of a control is the bounds of the control, minus the nonclient elements such as scroll bars, borders, title bars, and menus.
Skip the ClientSize property of the control. At least in VS2013 the Scrollbar is included in the ClientSize.
When I formatted a RichTextBox with a width of 304 and a vertical scrollbar, the Client Size width was 300, which only accounted for the borders.
stick with the System.Windows.Forms.SystemInformation.VerticalScrollBarWidth to get your scrollbar width.

Categories

Resources