Tengo un Formulario y un DataGridView. Rellenar DataGridView en tiempo de ejecución, por lo que quiero saber cómo cambiar el tamaño del formulario de forma dinámica de acuerdo con el tamaño de DataGridView? ¿Hay algún tipo de propiedad o método? ¿O tengo que determinar el tamaño yo mismo y actualizar en consecuencia?C# Auto Resize Form al tamaño de DataGridView
Respuesta
Normalmente, los controles adaptan sus tamaños al tamaño del formulario que los contiene. Para ajustar el tamaño de su formulario al tamaño de su DataGridView, usted do tiene que determinar el tamaño usted mismo y luego establecer el tamaño del formulario para que coincida, recordando tener en cuenta el tamaño adicional requerido por la banda de menú del formulario y/o barras de herramientas, barras de estado u otros controles.
En su caso, probablemente sería mejor no cambiar el tamaño del formulario para que coincida con el control de vista de cuadrícula. Lo más probable es que tenga muchas más filas en la vista de cuadrícula que las que caben en su pantalla de Windows, y no desea tener un formulario que se extienda debajo del área de escritorio visible. En términos generales, este tipo de situación es exactamente la razón por la que desea tener una vista de cuadrícula desplazable: para ver más datos de los que pueden caber en la pantalla a la vez.
"Para ajustar el tamaño de su formulario al tamaño de su DataGridView, usted mismo debe determinar el tamaño" ¿Hay alguna manera de hacerlo? ¿Por favor? My DataGridView solo tiene algunas celdas y solo lectura. Cambiar el tamaño de la forma para que quepa no es ningún problema, excepto que no sé cuántos píxeles necesita la DGV. Muchas gracias. – billpg
Puede encontrar el ancho real por el ancho de Columnas de conteo.
No olvide que su formulario puede ser más complejo y debe contar con otros controles.
public class YourForm : Form
{
public YourForm()
{
DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill};
Controls.Add(_dgv);
}
public void CorrectWindowSize()
{
int width = WinObjFunctions.CountGridWidth(_dgv);
ClientSize = new Size(width, ClientSize.Height);
}
DataGridView _dgv;
}
public static class WinObjFunctions
{
public static int CountGridWidth(DataGridView dgv)
{
int width = 0;
foreach (DataGridViewColumn column in dgv.Columns)
if (column.Visible == true)
width += column.Width;
return width += 20;
}
}
Iría en la otra dirección y dimensionaría la cuadrícula al formulario. (algunos usuarios pueden tener baja resolución) Establezca la propiedad 'WindowState' de la forma => maximizada. (opcional) Establezca la propiedad 'ancla' de DGV => 'Arriba, abajo, izquierda, derecha'.
Puede hacer uso de la propiedad PreferredSize
(MSDN PreferredSize entry). Para los controles DataGridView
, encontré que el ancho y la altura preferidos eran aproximadamente 20 unidades más grandes de lo que esperaba. Supongo que el control podría estar calculando su tamaño preferido teniendo en cuenta las barras de desplazamiento.
Otra advertencia que descubrí es que el cálculo PreferredSize
no será preciso inmediatamente después de agregar o cambiar elementos en la tabla. Para evitar esto hice un controlador para el evento RowHeadersWidthChanged
.
Esto es lo que funcionó para mí:
class GridToy {
private DataGridView grid;
public GridToy(DataGridView dgv) {
grid = dgv;
grid.RowHeadersWidthChanged += AdjustWidth; // Event handler.
Layout();
}
public void Layout() {
// Just do some arbitrary manipulation of the grid.
grid.TopLeftHeaderCell.Value = "Some Arbitrary Title";
}
public void AdjustWidth() {
Control horizontal = grid.Controls[0]; // Horizontal scroll bar.
Control vertical = grid.Controls[1]; // Vertical scroll bar.
grid.Width = grid.PreferredSize.Width - vertical.Width + 1;
grid.Height = grid.PreferredSize.Height - horizontal.Height + 1;
}
}
No estoy seguro de si RowHeadersWidthChanged es el mejor evento para escuchar, pero parece hacer el trabajo. – amacleod
Hmm. La experimentación adicional revela que 'PreferredSize' también tiene en cuenta el ancho de los encabezados de fila, incluso si' RowHeadersVisible' es falso. Parece que juntar el tamaño de la suma a mano será más confiable. – amacleod
dataGridView1.AutoResizeColumns (DataGridViewAutoSizeColumnsMode.AllCells);
Espero que esto ayude :)
int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
this.Width = dgv_width;
this.Height = dgv_height;
this.Width
cambia el tamaño de este ancho de formularios.
Por supuesto, debe agregar valores fijos (por ejemplo, margen, longitud del título del formulario, ecc). Con las pruebas que he alcanzado los valores de trabajo para mí (no pregunte por qué ...):
this.Width = dgv_width + 147;
this.Height = dgv_height + 47;
También podemos establecer la "altura" de la propiedad de automóviles en la forma después de clasificar o el uso de un ID y esto debería hacerlo,
Acabo de intentarlo ...Y funcionó
#form1{
background-color:white;
height:auto;
width:1500px;
border-top:medium solid #3399FF;
margin-top:100px;
margin-left:30px;
display: inline-block;
text-align: center;
float: none;
}
Sólo estoy poniendo exactamente lo que hice en caso de que se perdió .. No se preocupe por las otras propiedades allí para mi diseño.
Conjunto AutoSizeColumnsMode :Fill
en Propiedades de cuadrícula
- 1. CSS, auto resize div?
- 2. C# Hide Resize Cursor
- 3. Ordenar las columnas de dataGridView en C#? (Windows Form)
- 4. WinForms DataGridView tamaño de fuente
- 5. wpf resize complete
- 6. ¿Enlazar un diccionario al DataGridView en C#?
- 7. Textarea resize vertical en ie
- 8. Textarea resize
- 9. Ocultando el tamaño del textarea resize handle en Safari
- 10. cómo obtener una altura de fila UITableView para auto-tamaño al tamaño de la UITableViewCell?
- 11. C# - Transparente Form
- 12. Javascript Image Resize
- 13. QWidget resize signal?
- 14. C# Force Form Focus
- 15. C# Application.Run without Form
- 16. MapView IOS MapView resize
- 17. C# Programming Unminimize form
- 18. DataGridView Autosize pero restringe el tamaño máximo de columna
- 19. C# - DatagridView y ContextMenu
- 20. Resize UIImageView en UITableViewCell
- 21. iText Image Resize
- 22. C# Shuffling DataGridView Filas
- 23. Multi "columna" DataGridView C#
- 24. C#: Seleccionar fila de DataGridView
- 25. filas de orden C# datagridview?
- 26. Incrustar PowerPoint Viewer en C# Win Form
- 27. WinForms C# DataGridView force refresh
- 28. Inicializando C# auto-propiedades
- 29. jQuery Mobile cuadrícula con imágenes auto-cambio de tamaño
- 30. Datagridview causando IndexOutOfRangeException al hacer clic en
¿Cómo se "determinan el tamaño de mi mismo", por favor? Solo necesito saber cuántos píxeles quiere "DGV". (Puedo establecer límites razonables para evitar que el formulario se vuelva demasiado grande). – billpg