RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
Похоже, что окончательное значение RowHeadersWidth вычисляется не во время конструктора, а только позже, примерно во время загрузки элемента управления.
В моем приложении , все пользовательские элементы управления располагаются рядом друг с другом в зависимости от их размера. Кажется, я не могу сделать это в конструкторе, а только позже, после загрузки элементов управления.
[img]https: //i.sstatic.net/pgv7W8fg.png[/img]
Это результат расположения элементов управления в конструкторе.

Перестановка после события загрузки дает правильный результат.
Есть ли способ принудительно вычислить RowHeadersWidth программно в конструкторе?
Это мой CustomGrid:
class CustomGridView : DataGridView
{
public CustomGridView()
{
RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
this.RowHeadersWidthChanged += CustomGridView_RowHeadersWidthChanged;
ScrollBars = ScrollBars.None;
InitGridView(3);
}
public void InitGridView(int numRows)
{
this.ColumnCount = 1;
this.RowCount = numRows;
for (int row = 0; row < numRows; row++) {
Rows[row].HeaderCell.Value = "R" + (row+10).ToString();
Rows[row].Cells[0] = new DataGridViewTextBoxCell();
}
Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
this.Height = this.RowCount * this.RowTemplate.Height + 4;
this.Width = RowHeadersWidth + 45;
// Unfortunately, RowHeadersWidth does not yet have the final value here at contructor time
}
private void CustomGridView_RowHeadersWidthChanged(object sender, EventArgs e)
{
// RowHeadersWidth is updated later, around the time the control is loaded
this.Width = RowHeadersWidth + 45;
}
}
А это моя основная форма:
public partial class Form1 : Form
{
private List cGridViews = new List();
private int gvWidth1;
private int gvWidth2;
private Point GridViewLocation;
public Form1()
{
InitializeComponent();
GridViewLocation = new Point(10, 10);
AddCustomGrid(new CustomGridView());
AddCustomGrid(new CustomGridView());
gvWidth1 = cGridViews[0].Width;
this.Load += Form1_Load;
}
private void AddCustomGrid (CustomGridView cGridView)
{
cGridView.Location = GridViewLocation;
this.Controls.Add(cGridView);
cGridViews.Add(cGridView);
GridViewLocation.X += cGridView.Width + 5;
}
private void Form1_Load(object sender, EventArgs e)
{
// CustomGridView now has the correct size
gvWidth2 = cGridViews[0].Width;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... alculation
Мобильная версия