[.Net] Eigen Buttonklasse met OnPaint override probleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • zezke
  • Registratie: September 2006
  • Laatst online: 12-09 08:32
Hallo luitjes,

ik ben momenteel aan het proberen een knop te maken met daarop geen tekst, maar een pijl omhoog of omlaag zoals bij een scrollbar. Mijn plan was om een eigen klasse te maken, deze laten overerven van de klasse Button en vervolgens de OnPaint-methode overriden om mijn eigen tekenfunctionaliteit toe te voegen.Hierbij zou ik echter wel wensen dat de knop de look en feel heeft van de standaard Microsoftknop, dus vandaar dat ik Button extend en niet ButtonBase.

De knoppen zien er echter zo uit:

Afbeeldingslocatie: http://users.telenet.be/3azaluger/problem.png

Verder vertoont de knop ook nog het probleem dat het bovenste stuk groen kleurt als de muis boven deze control hangt. Mijn code ziet er momenteel zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ArrowButton : Button
{

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;
            g.DrawLine(new Pen(Color.Black), 0, 0, this.ClientSize.Width, this.ClientSize.Height);
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {

        }
}


Zien jullie wat er fout gaat? Ik heb al vanalles geprobeerd: eerst base.OnPaint, laatst base.OnPaint, OnPaintBackground override en leeglaten of gewoon zo laten... Niets lijkt te helpen.

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Het is me een beetje onduidelijk in je screenshot welke knoppen je bedoelt. Ook snap ik niet waar die dikke zwarte/groene randen vandaan komen.

Als ik jou code gebruik krijg ik gewoon dit als verwacht:
Afbeeldingslocatie: http://i39.tinypic.com/2qurcwm.png

Verder zou ik niet OnPaintBackground overriden en dan niets doen, zet dan op z'n minst de base call erin, of laat het gewoon weg. Voor een button lijkt het niet uit te maken, maar voor andere classes kan het wel verschil maken.


Heb je misschien wat properties op je button gezet? Flatstyle ofzo...?

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • zezke
  • Registratie: September 2006
  • Laatst online: 12-09 08:32
Oeps het is inderdaad wat moeilijk om te zien over welke knoppen ik het heb. Het zijn die 2 knoppen onder en boven de scrollbar rechts van de lijst. Ze staan boven de normale knoppen van de scrollbar kan dit problemen geven?

Qua properties heb ik enkel Visible en Enabled aangepast zodat deze pas verschijnen wanneer de lijst te vol zit om in 1 keer te tonen. Verder heb ik er nog een EventHandler aan toegevoegd.

Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 17:01

Rhapsody

In Metal We Trust

Als je een arrow wilt hebben, kun je dan niet beter een afbeelding instellen of het font bijvoorbeeld wijzigen in Wingdings?

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • zezke
  • Registratie: September 2006
  • Laatst online: 12-09 08:32
Ik werk met het compact framework en daar is het niet mogelijk om zomaar een afbeelding op een knop te plaatsen. Voor een pijl heb je WingDings 3 nodig en deze is niet zomaar beschikbaar op Windows CE.

Momenteel heb ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
public class ArrowButton : Button
{

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
        }

}


Dit levert de volgende situatie op:

Afbeeldingslocatie: http://users.telenet.be/3azaluger/probleem2.png

Ik snap er nu wel redelijk weinig meer van.

[ Voor 47% gewijzigd door zezke op 28-04-2010 11:01 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:18

Reptile209

- gers -

Als ik naar dit voorbeeldje in VB.Net kijk, moet het redelijk rechttoe-rechtaan zijn. Vergelijk dat voorbeeld nog eens met je eigen code?

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Dat is wel heel raar. Als je die hele override nu eens eruit haalt, zodat je eigenlijk alleen dit hebt
code:
1
2
3
public class ArrowButton : Button
{
}

wat zie je dan?

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

Verwijderd

zezke schreef op woensdag 28 april 2010 @ 10:44:
Ik werk met het compact framework en daar is het niet mogelijk om zomaar een afbeelding op een knop te plaatsen. Voor een pijl heb je WingDings 3 nodig en deze is niet zomaar beschikbaar op Windows CE.

Momenteel heb ik de volgende code:

code:
1
2
3
4
5
6
7
8
9
public class ArrowButton : Button
{

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
        }

}


Dit levert de volgende situatie op:

[afbeelding]

Ik snap er nu wel redelijk weinig meer van.
bij het compact framework zitten wel meerdere dingen die niet werken zoals ze zouden moeten werken
onder het normale framework.

ideetje wat je kan doen is 2 plaatjes laten wisselen 1 normaal en 1 ingedrukt, (zo heb ik het onder CE5) opgelost. waar mijn overide het ook niet deed

Acties:
  • 0 Henk 'm!

  • zezke
  • Registratie: September 2006
  • Laatst online: 12-09 08:32
Ik heb het uiteindelijk opgelost door een klasse te maken die usercontrol extend, en daarop vervolgens een knop te plaatsen met daarboven een andere eigen gedefinieerde control met werken OnPaint. Bedankt voor jullie hulp!
Pagina: 1