我有一个datagridview,在这个datagridview上面我设置了一个flowlayoutpanel,我想在程序上添加一些文本框,用户可以输入一些searchterms。
我从datagrid中获取列的大小:
int size = dataGridView1.Columns[i].Width;
并且gif文本框的大小相同:
TextBox box = new TextBox();
box.Width = size - 1;
但是文本框的大小与列大小不匹配。 而我看不出有什么问题
代码:
public partial class DataTableFormSearch : Form
{
public DataTableFormSearch()
{
InitializeComponent();
dataGridView1.DataSource = createTable();
fillPanelWithSearch();
}
public DataTable createTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("TestCol1", typeof(String));
dt.Columns.Add("TestCol2", typeof(String));
dt.Columns.Add("TestCol3", typeof(String));
dt.Columns.Add("TestCol4", typeof(String));
dt.Columns.Add("TestCol5", typeof(String));
return dt;
}
public void fillPanelWithSearch()
{
flowLayoutPanel1.AutoSize = false;
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
TextBox box = new TextBox();
box.Margin = Padding.Empty;
this.flowLayoutPanel1.Controls.Add(box);
}
resizeControls();
}
public void resizeControls()
{
if (flowLayoutPanel1.Controls.Count > 0)
{
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
int size = dataGridView1.Columns[i].Width;
flowLayoutPanel1.Controls[i].Width = size;
}
}
}
private void DataTableFormSearch_SizeChanged(object sender, EventArgs e)
{
resizeControls();
}
}
当触发SizeChanged事件时,框会更改为正确的大小,但不会在对话框弹出时
答案 0 :(得分:1)
尝试将您的方法移动到OnLoad覆盖,因为DataGridView控件及其列在构造函数期间尚未正确调整大小:
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
fillPanelWithSearch();
}