Displaying a collection of controls in Windows Forms
I want to display something like the following :-
Each row is about a process (information like PID, Parent etc.). User can check the checkbox
and click Launch button to get some dynamic details about that process.
The problem is that CheckedListBox
control doesn't allow more than one columns and other controls like ListView
(which allow multiple columns) don't allow controls like checkbox
to be embedded in a columns.
I want to know if there is a control which will allow me to have a list of custom controls where each custom control contains a checkbox
, Some Text
and Some Dynamic Text
.
How can this be achieved in Windows Forms? Thanks in advance.
You can use either of these options:
-
DataGridView (Example)
You can useDataGridView
to show multiple columns of different types, includingTextBox
,Label
,CheckBox
,ComboBox
,Image
,Button
,Link
. You also can customize appearance of the grid by custom painting or adding new custom column types. -
UserControl
You can create a composite control orUserControl
containing any other controls which you need and use it as a row template, then you can show all rows by hosting multiple instance of that user control in aPanel
orFlowLayoutPanel
. -
TableLayoutPanel (Example)
You can use aTableLayoutPanel
containing multiple columns and rows. Each cell ofTableLayoutPanel
can host a control. -
DataRepeater
You can use aDataRepeater
control to create a row template and show a list of rows using that template.
Example 1 - DatGridView
If you want to use data binding and show specific controls including TextBox
, Label
, CheckBox
, ComboBox
, Image
, Button
, Link
a row, DataGridView
is great. It's customize-able and you can add some other different column types or customize painting of the grid or benefit from wide range of useful events for validating and so on.
In following image you can see a DataGridView
with RowHeaderVisible
and ColumnHeaderVisible
set to false
to act like a List of fields without header:
Example 2 - UserControl
If you need custom control to host more complicated controls or having more control on components or show them in a different layout than columns, you can create a UserControl
hosting your components, then:
- If you only want top-down flow, Use a
Panel
and add your user control to it withDock
property of control set toTop
. - If you may want flows other than top-down Use a
FlowLayoutPanel
to add instances of your control to it.
Create a UserControl
Add instances of it to your Panel
or FlowLayoutPanel
You could use the TableLayoutPanel
container.