Abgeleitetes DataGridView-Zeichnungsproblem. Zeigt schwarze Bereiche

Späte Bearbeitung Ich habe dies sowohl als C # -Frage als auch als C ++ getaggt, da das Problem sowohl in der Sprache als auch in der Lösung vorliegtob gezeigt würde höchstwahrscheinlich in der C # (die Mehrheit des Marktes) sein.

Ich habe eine Anwendung unter .net 2.0 entwickelt (C ++ um genau zu sein, aber irrelevant).

Diese Anwendung verwendet eine benutzerdefinierte abgeleitete Datengitteransicht. Diese Datagrid-Ansicht weist gelegentlich schwerwiegende Artefaktprobleme in Bezug auf den Bereich des DGV auf, der keine Zellen sowie die Bildlaufleiste enthält.Während einiger Größenänderungsaktionen wird im unteren Bereich der Datenrasteransicht ein schwarzes Rechteck gezeichnet, wodurch die Größe des Rasters begrenzt wird. Die Bildlaufleiste wird auch verkleinert, damit sie in den nicht fehlerbehafteten Bereich passt. Es scheint mir, als ob das System glaubt, dass das DGV die falsche Größe hat und in die falsche Region zieht.

Alternativtext http://img12.imageshack.us/img12/2213/81356991.jpg

Es gibt nur zwei Möglichkeiten, die Symptome zu beheben:
1. Wenn Sie auf eine Spalte klicken, deren Größe geändert werden soll, wird das Raster automatisch korrigiert
2. Durch Aufrufen der Funktion AutoResizeRows () in der DGV wird das Problem behoben (ich glaube jedoch, dass diese Funktion ab Punkt 1 aufgerufen wird).

Einige der Änderungen an der benutzerdefinierten DGV:
1) Konfiguriert für Drag & Drop von mehreren Zeilen.
2) Punkt 1 erforderte, dass OnCellPainting überschrieben wurde, um Ziehlinien zu zeichnen. Funktion kann gebucht werden, wenn es symptomatisch erscheint.
3) Die Probleme treten immer bei einer Größenänderung auf (sowohl manuell als auch automatisch können das Problem verursachen), aber das Größenänderungsereignis enthält keinen benutzerdefinierten Code.

späte Bearbeitung Code für onCellPainting. Andere Funktionen, die in der Rasteransicht überschrieben werden: OnMouseDown, OnCellMouseDown, OnClick, OnMouseMove, OnDragOver, OnDragDrop, OnDragLeave, OnKeyDown, von denen keine als symptomatisch erscheinen

   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

* Weitere Änderungen Keine dieser Funktionen behebt das Problem. Das einzige, was das Problem behebt, NACHDEM das Problem auftritt, ist AutoResizeRows (AllCells) // Nur AllCells behebt das Problem. Es ist sehr langsam und unerwünscht.

Aktualisierung(); UpdateBounds (); Aktualisieren(); Invalidate (); PerformLayout (); ResetBackColor (); ResetBindings (); ResetForeColor (); ResetText (); UpdateStyles ();

Antworten auf die Frage(4)

Ihre Antwort auf die Frage