У меня есть собственный 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
C# DataGridView, автоматический расчет размера RowHeaders ⇐ C#
Место общения программистов C#
-
Anonymous
1730961210
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79163576/c-sharp-datagridview-automatic-rowheaders-size-calculation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия