Laden...

probleme mit der transparenz bei buttons

Erstellt von erler vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.757 Views
E
erler Themenstarter:in
12 Beiträge seit 2007
vor 16 Jahren
probleme mit der transparenz bei buttons

hallo ,

auf meiner windows forms sind mehre buttons platziert.

Neben den buttons kommen auch pfeile vor, die beziehungen zwischen den buttons darstellen sollen.

es kann manchmal sein , das ein pfeil einen button kreuzt.

da ich den pfeil immer im vordergrund haben möchte, habe ich die eigenschaft des buttons geändert :

this.button.BackColor = Color.Transparent;

funktioniert aber nicht. der pfeil verschwindet dann hinter den button

warum reicht es nicht den button durchsichtig zu machen, damit die pfeile angezeigt werden

ahja , die pfeile erstelle ich in der onpaint methode von winforms mit Graphics.drawLine(...)

1.549 Beiträge seit 2004
vor 16 Jahren

versuch mal die OnPaint zu überschreiben und die orginal onpaint vor deinem eigenen zeichen aufzurufen.

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo erler,

durch ein transparentes Control sieht man wohl nur den Hintergrund des Containers, der das Control enthält. Eine gute Lösung habe ich nicht parat, außer dass du die Button nicht als Controls platzierst, sondern stattdessen "nur" zeichnest: ButtonRenderer.

herbivore

E
erler Themenstarter:in
12 Beiträge seit 2007
vor 16 Jahren

hallo S.H.-Teichhof,

genauso mache ich es , funktioniert aber leider nicht.

hat sonst irgendjemand noch einen tipp ?

1.134 Beiträge seit 2004
vor 16 Jahren
  1. Subclasse von Button

  2. erstelle dir einen Graphics path der genau zu dem passt was sichtbar sein soll.

  3. Ändere im Load des Controls die Region des Buttons auf den sichtbaren bereich.

Also so inder Art (ungetestet)

System.Drawing.Drawing2D.GraphicsPath newPath = new System.Drawing.Drawing2D.GraphicsPath();
            newPath.AddString(this.button1.Text,this.button1.Font.FontFamily,....)
            Region newButtonRegion = new Region(newPath);
            this.Region = newButtonRegion;

Der Button hätte in diesem fall nur die Ausdehnung des Schrift. und wenn man irgendwo anders als auf die schrift hinclickt geht der click "hindurch" und alles ausserhlab der Schrift ist durchsichtig

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

1.134 Beiträge seit 2004
vor 16 Jahren

Sehe gerade dass du den button an sich in siner normalen form noch brauchst.... dann bringt dir meine Idee leider nicht so viel.

Aber vielleciht bringt es dich ja auf eine passende Idee

Ansonsten ist u.U. die reihenfolge in der du zeichnest entscheiden und ggf. kannst du wenn du den button als control hast in einfach in den Hintergrund verschieben ?

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

1.549 Beiträge seit 2004
vor 16 Jahren

legdoch ein Transparentes Control über alle anderen auf dem du dann Zeichnest

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

5.742 Beiträge seit 2007
vor 16 Jahren

Original von S.H.-Teichhof
legdoch ein Transparentes Control über alle anderen

Das funktioniert leider nicht - die Transparenz wird nur simuliuert, was zur Folge hat, dass die Controls hinter diesem "Transparenten" Control nicht sichtbar sind.

2.760 Beiträge seit 2006
vor 16 Jahren

Hier hatte jemand das gleiche (ist es das gleiche?) Problem:

Fehler in Ebenentransparenz in Verbindung mit DrawLine

Es wurde gelöst indem (in deinem Fall der Button) abgeleitet wird und dann die Linien die er verdeckt selber zeichnet.

E
erler Themenstarter:in
12 Beiträge seit 2007
vor 16 Jahren

erstmal vielen dank für die vielen antworten ,

ich muss jetzt erstmal schauen, mit welchen ratschlag ich am besten weiter komme.

eine frage hätte ich noch:

gibt es eigentlich ein steuerelement für den pfeil.

bei mir ist es ja so , dass ich meinen pfeil mit hilfe der paint methode male.

also mit graphics.drawline(.....)

falls ich später mal auf die idee kommen sollte , einen pfeil als aktives objekt haben zu müssen ( also das ich einen pfeil beispielsweise anklicke und dann mit der maus verschiebe ), hab ich ja mit der lösung überhaupt keine chance oder ?

2.760 Beiträge seit 2006
vor 16 Jahren

LineCaps / CustomLineCaps (haben einen Bug wenn du sie ausgefüllt zeichnen willst), die kannst du aber auch nur im paint zeichenen.

Anklicken/Verschieben entweder mit einem GraphicsPath oder einen eigenen HitTest bauen.

[EDIT]
Siehe: StartCap EndCap vergrößern
und
[Tutorial] Gezeichnete Objekte mit der Maus verschieben

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo erler,

Pfeile solltest du nicht als eigene Controls programmieren (eigene Objekt kann und sollten die Pfeile aber durchaus sein. Das macht nur Probleme. Wie ich schon vorschlug könnte es hier sogar sinnvoll sein, die Buttons selber zu zeichnen. Was beides das verschieben nicht behindert, eher im Gegenteil ... wie der Link von jaensen zeigt.

herbivore