Announcement

Collapse
No announcement yet.

VS2010 Windows Forms: Grafiken transparent in ein Grid zeichnen

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

  • VS2010 Windows Forms: Grafiken transparent in ein Grid zeichnen

    Hallo!

    Ich würde gerne in Visual Studio 2010 C# Windows Forms Grafiken in ein Grid zeichnen können.

    Jetzt hab ich das bisher so probiert, dass ich einfach ein DataGridView hernehme, alle Spalten als "DataGridViewImageColumn" definiere und dort dann einfach die Value Eigenschaft auf das Bild setze. Soweit funktioniert auch alles.

    Nur würde ich jetzt auch gerne das Bild transparent auf die Hintergrundfarbe der Zelle setzen. Also z.B. einen blauen Punkt auf einen roten Hintergrund. Den Punkt zeichne ich in ein Bitmap und fülle den Rest mit weißer Farbe. Die Hintergrundfarbe setze ich über die Zelleneigenschaft "BackColor". Wenn ich jetzt aber den Punkt als Value setze, dass wird er nicht transparent auf den Hintergrund gesetzt, sondern man sieht den weißen Kasten außenrum.

    Wie löst man das Problem? Kann man irgendwie eine Transparenzfarbe definieren?

    Ich konnte nur eine MSDN Anleitung dazu finden, da stand nur im VS Image Editor alles markieren und dann auf "Transparent" setzen, aber das scheint keinen Unterschied zu machen.

  • #2
    Ich glaube nicht alle Bildformate koennen "transparent". In welchem Bildformat speicherst Du das Bild denn? Fuer Photoshop gibt's z.B. ein Tutorial hier: http://www.mediacollege.com/adobe/ph...ackground.html

    Comment


    • #3
      Edit: Aha! Funktioniert ja doch.

      Aber was ist jetzt wenn man mehrere Bilder in eine Zelle zeichnen will? Oder einen Text und daneben ein Icon?

      Comment


      • #4
        Versuch mal das Bitmap nicht mit Weiß (Color.White) sondern explizit mit Transparent (Color.Transparent) aufzufüllen.

        Comment


        • #5
          Custom Drawing? Eigene Column ableiten die das gewünschte Drawing Verhalten implementiert?

          Comment


          • #6
            Ja ich bin gerade neu bei C#, deswegen bin ich halt noch am Rätseln, wie es dort geht. Hab vorher C++ Builder benutzt und da gab es halt einfach ein OnCellDraw Event was man überschreiben konnte und einfach beliebig in ein gegebenes Rectangle zeichnen konnte. Aber kann bei VS2010 C# kein Draw Ereignis finden?

            Ich hab auch das Problem, dass ich anscheinend nicht ausschalten kann, dass ein User in eine Zelle klickt und das dann irgendwie meine Zeichenbefehle übergeht, hab das Grid zwar auf ReadOnly gesetzt und auch alle default-Farben auf Transparent, aber irgendwie geht es trotzdem nicht. Die markierte Zeile wird dann nicht mehr übermalt, sondern behält den vorherigen Farbwert. oO

            Zudem würde ich gerne auf alle Tastatureingaben direkt auf der Form eingehen und nicht bei jedem Control auf der Form erst das überliegende "OnKeyDown" Event aufrufen, geht das?

            Edit: Und es soll auch nicht scrollen wenn man auf die unterste Zeile klickt (hab die Scrollbars bereits ausgestellt).

            Comment


            • #7
              Aber kann bei VS2010 C# kein Draw Ereignis finden?
              Das DataGridView hat einen CellPainting Event.

              Ich hab auch das Problem, dass ich anscheinend nicht ausschalten kann, dass ein User in eine Zelle klickt und das dann irgendwie meine Zeichenbefehle übergeht, hab das Grid zwar auf ReadOnly gesetzt und auch alle default-Farben auf Transparent, aber irgendwie geht es trotzdem nicht. Die markierte Zeile wird dann nicht mehr übermalt, sondern behält den vorherigen Farbwert. oO
              Häh? Hattest du nicht gerade noch gesagt du sucht den Event zum selbst zeichnen noch? Und jetzt fragst du warum dein zeichnen nicht richtig zieht. Also doch gefunden?

              Zudem würde ich gerne auf alle Tastatureingaben direkt auf der Form eingehen und nicht bei jedem Control auf der Form erst das überliegende "OnKeyDown" Event aufrufen, geht das?
              KeyPreview der Form auf true setzen.

              Und es soll auch nicht scrollen wenn man auf die unterste Zeile klickt (hab die Scrollbars bereits ausgestellt).
              Das tut das Grid eigentlich auch nicht. Da mußt du schon an irgegendwas geschraubt haben das das passiert.

              Comment


              • #8
                Häh? Hattest du nicht gerade noch gesagt du sucht den Event zum selbst zeichnen noch? Und jetzt fragst du warum dein zeichnen nicht richtig zieht. Also doch gefunden?
                Nein, ich habe es bisher etwas anders gelöst indem ich einfach bei einer Veränderung des Modells die Hintergrundfarbe oder den Inhalt der Zelle verändere:

                Konnte das Problem "Selektierte Zelle ist unveränderbar" aber jetzt lösen, indem ich vor jeder Veränderung "ClearSelection()" und "CurrentCell = null" mache. Also es klappt schon fast ohne eigene Zeichenmethode, aber eventuell ist es besser es doch in eine Zeichenmethode zu packen, zumindest wenn ich mehrere Bilder gleichzeitig will.

                Das tut das Grid eigentlich auch nicht. Da mußt du schon an irgegendwas geschraubt haben das das passiert.
                Doch das ist standardmäßig so, wenn du jetzt ein Grid mit 8 Zeilen hast z.B. und die letzte Zeile endet genau am letzten Pixel des Grid, dann sieht man plötzlich "grau" wenn ich durch "unten" key press auf die letzte Zeile springe. Konnte das zwar beheben indem ich im KeyPress Ereignis "Handled = true" setze, bin aber nicht so zufrieden mit der Lösung, weil ich dann doch das KeyPress Ereignis des Grids trotz KeyPreview definieren muss.


                Danke für die Hilfe hat mir schon etwas weitergeholfen. :-)

                Comment


                • #9
                  Doch das ist standardmäßig so,
                  Ah ok. Key war das fehlende Stichwort. Ich hatte es gerade mit der Maus ausprobiert da du von 'in unterste Zeile klicken' sprachst

                  Comment

                  Working...
                  X