【问题标题】:Can the width of a WinForm automatically adjust to the total width of a DataGridView?WinForm 的宽度可以自动调整为 DataGridView 的总宽度吗?
【发布时间】:2012-05-14 16:18:43
【问题描述】:

我有一个表单,其中一个 DGV 卡在表单的中心。

是否可以将表单设置为自动调整其宽度(最大限制)以适应 DGV - 取决于 DGV 中字段的总宽度。

我是否需要使用与this post 类似的方法,或者这是否可以使用控件属性“开箱即用”?

【问题讨论】:

  • 你使用的是简单的表单还是Mdi Container?
  • WPF 可以自动完成这种事情。
  • 如果您停靠 DGV,您可以使用 Form.AutoSize 和 AutoSizeMode 属性使表单自动调整大小以适应网格。根据列调整网格大小是另一回事。
  • @KendallFrey 也许这是我应该向 SO 提出的一个问题,但是什么时候使用 WPF 而不是 UserForm - WPF 是否更面向 Web?
  • 当您想保持当前技术时,请使用 WPF。 WinForms 没什么问题,但 WPF 更好。如果您在 WinForms 中有一个现有项目,请不要费心转换,但 MS 建议将 WPF 用于所有新的桌面软件开发。

标签: c# .net winforms datagridview


【解决方案1】:

编辑:

public Form1()
{
    InitializeComponent();

    dataGridView1.AutoSize = true;
    dataGridView1.SizeChanged += new EventHandler(dataGridView1_SizeChanged);
    dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
}

void dataGridView1_SizeChanged(object sender, EventArgs e)
{
    Width = dataGridView1.Width + 10;
}

【讨论】:

  • 不会添加列
  • 文本将被输入到其中一个字段的单元格中,并且在某些单元格中,文本可能大于 DGV 的该字段中已有的最大文本字符串
  • 假设当新行添加到 DGV 时我可以选择另一个事件
  • @whytheq 我在发布之前尝试过。但不确定这就是你要找的东西。请注意,它只会在您按 Enter 或单击另一个单元格时调整大小。
【解决方案2】:

您可以通过将“AutoSizeColumnsMode”和“AutoSizeRowsMo​​de”属性设置为“AllCells”来将 DataGridView 设置为适合其内容的大小:

dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
dataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells

从这里,您可以通过使用控件的大小设置表单的大小来调整表单的大小以适应 DataGridView:

this.Height = dataGridView.Height;
this.Width = dataGridView.Width;

所以我想您可以通过处理“ColumnWidthChanged”事件(因为您只关心宽度)来检查是否将内容添加或删除到 DataGridView,并在该处理程序中调整表单大小。

【讨论】:

    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    相关资源
    最近更新 更多