Late Edit Я отметил это как вопрос на C#, а также C++, потому что проблема возникает на обоих языках, а решение , если показано, что, скорее всего, будет в C# (большая часть рынка).Исходная задача рисования DataGridView. Показывает черные области
Я разрабатываю приложение под .net 2.0 (C++, чтобы быть конкретным, но неактуальным).
Это приложение использует настраиваемое производное datagridview. Этот datagridview будет иногда иметь проблемы с артефактами в отношении области DGV, которая не содержит ячеек, а также полосу прокрутки. Во время некоторых действий по изменению размера черный прямоугольник будет рисовать нижнюю часть datagridview, что фактически ограничит размер сетки. Полоса прокрутки также становится сжатой, чтобы поместиться внутри необрезанной области. Мне кажется, что система полагает, что DGV - неправильный размер, и втягивается в неправильный регион.
alt text http://img12.imageshack.us/img12/2213/81356991.jpg
Есть только два способа я могу найти, чтобы исправить симптомы:
1. При нажатии на столбец, чтобы изменить размер будет автоматически фиксировать сетку
2. Вызов AutoResizeRows() функции в DGV будет сделайте исправление (но я верю, это то, что вызывается из пункта 1).
Некоторые изменения в пользовательской DGV:
1) Конфигурируется для обработки перетаскивания \ drop из нескольких строк.
2) Точка 1 требуется OnCellPainting для переопределения для рисования линий перетаскивания. Функция может быть опубликована, если она кажется симптоматичной.
3) Проблемы всегда возникают при изменении размера (как вручную, так и автоматически могут возникнуть проблемы), но в событии изменения размера нет специального кода.
поздняя редакция код для onCellPainting. Другие функции переопределены в GridView: OnMouseDown, OnCellMouseDown, OnClick, OnMouseMove, OnDragOver, OnDragDrop, OnDragLeave, OnKeyDown, ни один из которых не кажется, симптоматической
protected: [DebuggerStepThrough()]
virtual System::Void OnCellPainting(DataGridViewCellPaintingEventArgs ^e) override
{
//draws red drag/drop target indicator lines if necessary
if (this->AllowDrop && _DragDropCurrentIndex > -1 && ShowDragLines)
{
System::Drawing::Pen ^p = gcnew Pen(System::Drawing::Color::Navy, 3);
//row drag/drop
if (e->RowIndex == _DragDropCurrentIndex &&
_DragDropCurrentIndex <= this->RowCount)
{
//if this cell is in the same row as the mouse cursor
e->Graphics->DrawLine(
p,
e->CellBounds.Left,
e->CellBounds.Top - 1,
e->CellBounds.Right,
e->CellBounds.Top - 1);
} //end if
if(e->RowIndex == this->Rows->Count - 1 &&
_DragDropCurrentIndex == Int32::MaxValue)
{
e->Graphics->DrawLine(
p,
e->CellBounds.Left,
e->CellBounds.Bottom + 1,
e->CellBounds.Right,
e->CellBounds.Bottom + 1);
}
} //end if
DataGridView::OnCellPainting(e);
} //end OnCellPainting
* Еще редактирует Ни одна из этих работ, чтобы избавиться от этой проблемы, только вещь, которая его исправляет ПОСЛЕ того, что проблема возникает, это AutoResizeRows (AllCells) // Только AllCells исправляет ее. Это очень медленно и нежелательно.
Обновить(); UpdateBounds(); Обновить(); Invalidate(); PerformLayout(); ResetBackColor(); ResetBindings(); ResetForeColor(); ResetText(); UpdateStyles();
Tagged C#, но автор утверждает VC++ - может ли кто-нибудь с достаточным количеством rep retag, пожалуйста? –
Можете ли вы опубликовать код OnCellPainting? Это, безусловно, похоже на кандидата. Если вы просто закомментируете это переопределение, вы все еще видите эту проблему при изменении размера? – MusiGenesis
Оригинальный пост с OnCellPainting. Комментируя переопределенную функцию, все равно не повезло. – greggorob64