Pochodny problem z rysowaniem DataGridView. Pokazuje czarne regiony
Późna edycja Oznaczyłem to jako pytanie C #, a także C ++, ponieważ problem występuje w obu językach i rozwiązaniuJeśli pokazany najprawdopodobniej będzie w C # (większość rynku).
Tworzyłem aplikację pod .net 2.0 (C ++ jest specyficzna, ale nieistotna).
Ta aplikacja używa niestandardowego pochodnego widoku datagridview. Ten datagridview może czasami powodować problemy z artefaktami serwera w obszarze DGV, który nie zawiera komórek, a także pasek przewijania.Podczas niektórych operacji zmiany rozmiaru czarny prostokąt zostanie narysowany w dolnej części widoku datagridview, co w efekcie ograniczy rozmiar siatki. Pasek przewijania również ulega zmniejszeniu, aby zmieścił się w obszarze nie zajętym. Wydaje mi się, że system uważa, że DGV ma niewłaściwy rozmiar i przyciąga niewłaściwy region.
alt tekst http://img12.imageshack.us/img12/2213/81356991.jpg
Są tylko dwa sposoby na znalezienie symptomów:
1. Kliknięcie kolumny w celu zmiany rozmiaru spowoduje automatyczne ustawienie siatki
2. Wywołanie funkcji AutoResizeRows () w DGV spowoduje naprawę (ale wierzę, że jest to coś, co nazywa się z punktu 1).
Niektóre modyfikacje Custom DGV:
1) Skonfigurowany do obsługi przeciągania wielu wierszy.
2) Punkt 1 wymagał nadpisania OnCellPainting w celu narysowania linii przeciągania. Funkcję można opublikować, jeśli wydaje się objawowa.
3) Problemy występują zawsze w przypadku zmiany rozmiaru (zarówno problem ręczny, jak i automatyczny może powodować problem), ale w zdarzeniu zmiany rozmiaru nie ma niestandardowego kodu.
późna edycja kod dla onCellPainting. Inne funkcje zastąpiły gridview: OnMouseDown, OnCellMouseDown, OnClick, OnMouseMove, OnDragOver, OnDragDrop, OnDragLeave, OnKeyDown, z których żaden nie wydaje się objawowy
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
* Więcej edycji Żadna z tych czynności nie rozwiązuje problemu, jedyną rzeczą, która naprawia to PO problemie, jest AutoResizeRows (AllCells) // Naprawia to tylko AllCells. Jest bardzo powolny i niepożądany.
Odświeżać(); UpdateBounds (); Aktualizacja(); Unieważnić(); PerformLayout (); ResetBackColor (); ResetBindings (); ResetForeColor (); ResetText (); UpdateStyles ();