Announcement

Collapse
No announcement yet.

Icon in Mitte von Datagridview Header

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Icon in Mitte von Datagridview Header

    Hallo zusammen,

    ich habe ein Icon in die Mitte von einem Datagridview per CellPainting gesetzt. Das Problem ist nun das ich wenn ich das Formular nun in Größe und Form ändere, verschiebt sich das Icon falsch (nicht mehr mittig oder 2 Icons erscheinen). Wo muss ich was eintragen um das CellPainting Event auszulösen, das beim Ändern der Größe des Formulars und betätigen der Scrollbar das Icon immer schön mittig gemalt wird?

    Danke für jeden Hinweis.
    Grüße KASIC

  • #2
    Ich glaube nicht das CellPainting nicht aufgerufen wird sondern eher das du die Zelle nicht vollständig in deinem Event zeichnest. Gerade wenn du doppelte Icons siehst vermute ich eher da du in CellPAinting nur das Icon zeichnest aber nicht den Hintergrund der Zelle und darum alten Mist siehst. Ich habe jetzt keine spezielle Erfahrung mit dem CellPainting Event aber ich gehe mal schwer davon aus das man immer die komplette Zelle zeichnen muß und nicht nur einen Teil.

    Comment


    • #3
      ich bin deiner Idee nachgegangen Ralf und kann das leider ausschließen, schade wäre wirklich das beste gewesen. Noch ne Idee?

      Comment


      • #4
        Nun du könntest mal im Resize Event ein explizites Invalidate am Grid aufrufen. Das sollte ein Neuzeichnen auslösen. Das sollte eigentlich aber auch so schon erfolgen. Wenn das hilft könnte ich mir aber vorstellen das das mit üblem Geflacker einhergeht.

        Comment


        • #5
          man mag es nicht glauben, ich hatte es mit Refresh probiert und es ging nicht, aber mit Invalidate ist zumindest der überflüssige Teil (also der alte Mist) weg. Aber eine Kleinigkeit geht noch immer nicht das Icon wandert in der Spalte mit wenn man Scrollbar(<-- von Formular) betätigt. Gibt es etwas das mir mitteilt wie groß die Spalte ursprünglich groß ist? Mit anderen Worten, das wandern des Icons soll unterbunden werden, Icon soll immer in der Mitte von der Spalte angezeigt werden, nicht wenn die Hälfte von der Spalte (aufgrund von Resizing) sichtbar ist, nur das Icon auf der Hälfte des sichtbaren Bereichs anzeigen?
          @Ralf : Vielen Dank für Invalidate!

          Comment


          • #6
            Wie bestimmst du die Mitte der Spalte? Ich habe es nicht ausprobiert aber die EventArgs von CellPainting enthalten ja einmal die CellBounds aber auch die ClipBounds. Letzteres sollte ja nur der sichtbare Teil der Zelle sein. Wenn du die Mitte per CellBounds bestimmst und dann nur noch über ClipBounds prüft ob der Teil wo das Icon sich befindet sichtbar wäre müstest du nach meiner denke eigentlich immer eine eindeutige Position haben die nicht wandert.

            Comment


            • #7
              Die Spaltenmitte hab ich bis jetzt so bestimmt:

              Code:
              e.Graphics.DrawImage(bmp, (e.CellBounds.Width - 6) / 2 + e.CellBounds.X, Math.Abs(e.CellBounds.Height / (colheaderdepth + 1) - e.CellBounds.Height));
              Dank der Schlüsselwörter vom Ralf konnte ich meine Codezeile ändern in:

              Code:
              e.Graphics.DrawImage(bmp, (e.CellBounds.Width - 6) / 2 + e.CellBounds.X, Math.Abs(e.CellBounds.Height / (colheaderdepth + 1) - e.CellBounds.Height + 1));
              ClipBounds setze ich im Ereignis OnCellPainting ein und siehe da es funktioniert wie es soll! Besten Dank Ralf für deine Hilfe!
              KASIC

              Comment

              Working...
              X