Позднее редактирование Я отметил это как вопрос C #, так и C ++, потому что проблема представлена на обоих языках, и решение , если показанное , скорее всего, будет в C # ( большая часть рынка).
Я разрабатывал приложение под .net 2.0 (точнее, C ++, но не имеет значения).
Это приложение использует пользовательское производное представление данных. Это сетевое представление иногда будет иметь серьезные проблемы с артефактами, касающиеся области DGV, которая не содержит ячеек, а также полосы прокрутки. Во время некоторых действий по изменению размера, черный прямоугольник будет рисоваться в нижней части сетки данных, что фактически ограничит размер сетки. Полоса прокрутки также сжимается, чтобы поместиться в несокруглую область. Мне кажется, поскольку система считает, что DGV имеет неправильный размер и втягивается в неправильный регион.
альтернативный текст http://img12.imageshack.us/img12/2213/81356991.jpg
Есть только два способа исправить симптомы:
1. Щелчок по столбцу для изменения размера автоматически исправит сетку
2. Вызов функции AutoResizeRows () в DGV сделает исправление (но я считаю, что это то, что вызывается из пункта 1).
Некоторые модификации Custom DGV:
1) Настроен для обработки перетаскивания нескольких строк.
2) Точка 1 требует переопределения OnCellPainting для рисования линий перетаскивания. Функция может быть опубликована, если она кажется симптоматической.
3) Проблемы всегда возникают при изменении размера (как ручное, так и автоматическое может вызвать проблему), но в событии изменения размера нет специального кода.
позднее редактирование код для onCellPainting. Другие функции, переопределенные в виде сетки: 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 исправляет это. Это очень медленно и нежелательно.
Refresh ();
UpdateBounds ();
Обновить();
Invalidate ();
PerformLayout ();
ResetBackColor ();
ResetBindings ();
ResetForeColor ();
ResetText ();
UpdateStyles ();