De workaround werkt prima.
Alleen nu heb ik een probleem met het updaten van de tekst in de statusbar.
Om een statusbar met een gekleurde achtergrond te krijgen heb ik er dus een panel ingezet, en deze handmatig gekleurd. Ik teken de string erin, afhankelijk van statusBar1.Text....
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| private void statusBar1_DrawItem(object sender, System.Windows.Forms.StatusBarDrawItemEventArgs sbdevent)
{
Graphics g = sbdevent.Graphics;
StatusBar sb = (StatusBar)sender;
RectangleF rectf = new RectangleF(sbdevent.Bounds.X, sbdevent.Bounds.Y, sbdevent.Bounds.Width, sbdevent.Bounds.Height);
g.DrawRectangle(p, sbdevent.Bounds);
sbdevent.Graphics.FillRectangle(Brushes.Red, sbdevent.Bounds);
g.DrawString( statusBar1.Text, sb.Font, brYellowFontBrush, rectf);
}
private void button1_Click(object sender, System.EventArgs e)
{
statusBar1.Text = "nieuwe tekst";
// drawitem firen
} |
Alleen als ik de statusBar1.Text property wijzig (mbv klik op button1), moet deze natuurlijk ook redrawed worden.
Dus ik moet op een of andere manier drawItem weer invoken.
Ik heb al geprobeerd om de code in een functie te stoppen en nogmaals aan te roepen, maar dan krijg ik sbdevent niet goed mee.
Ook dacht ik het te kunnen realiseren met Invalidate( ), zodat er automagisch gerepaint wordt, maar daar ben ik ook nog mee aan het prutsen.