C# DataGridView, автоматический расчет размера RowHeadersC#

Место общения программистов C#
Ответить
Anonymous
 C# DataGridView, автоматический расчет размера RowHeaders

Сообщение Anonymous »

У меня есть собственный Gridview, унаследованный от DataGrieviw, с автоматически установленным RowHeadersWidthSizeMode.
RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;

Похоже, что окончательное значение RowHeadersWidth вычисляется не во время конструктора, а только позже, примерно во время загрузки элемента управления.

В моем приложении , все пользовательские элементы управления располагаются рядом друг с другом в зависимости от их размера. Кажется, я не могу сделать это в конструкторе, а только потом, после загрузки элементов управления. Есть ли способ принудительно вычислить RowHeadersWidth программно в конструкторе?

Это мой CustomGrid:
class CustomGridView : DataGridView
{
public CustomGridView()
{
RowHeadersVisible = false;
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»