Avatar billede Slettet bruger
20. februar 2007 - 13:29 Der er 9 kommentarer og
1 løsning

ProgressBar paint virker ikke

Hej Eksperter

Jeg har en progressbar hvor jeg vil have noget tekst oven på. Derfor har jeg lavet en klasse med min egen, overridet OnPaint og forsøger at tegne teksten. Men det virker ikke.


Jeg tror slet ikke at den kører OnPaint metoden..

PS: Den skal skrive teksten midt på progressbaren












namespace p2p
{
    public class CustomProgressBar : ProgressBar
    {
        protected override void OnPaint(PaintEventArgs e)
        {
            this.Text = "Hej med dig";
           
            Image Bitmap = new Bitmap(this.Width, this.Height);
            Graphics G = Graphics.FromImage(Bitmap);
            Rectangle box = this.ClientRectangle;
            SizeF ss = G.MeasureString(this.Text, this.Font);

            float left = box.X + (box.Width - ss.Width) / 2;
            float top = box.Y + (box.Height - ss.Height) / 2;

            //SolidBrush mShadowBrush = new SolidBrush(Color.FromArgb(150, Color.Black));
            //G.DrawString(this.Text, this.Font, mShadowBrush, left + 1, top + 1);
            //mShadowBrush.Dispose();

            SolidBrush TextBrush = new SolidBrush(Color.Black);
            G.DrawString(this.Text, this.Font, TextBrush, left, top);

            //Draw text
            e.Graphics.DrawImage(Bitmap, e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle, GraphicsUnit.Pixel);

            Bitmap.Dispose();
            G.Dispose();
            TextBrush.Dispose();

            base.OnPaint(e);
        }
    }
}
Avatar billede mh6000 Nybegynder
20. februar 2007 - 13:36 #1
hvad med at flytte: base.OnPaint(e);
op til starten af metoden ??
Avatar billede Slettet bruger
20. februar 2007 - 13:38 #2
Det hjælper ikke. Smider jeg en messagebox derind, kommer den aldrig frem!
Avatar billede mh6000 Nybegynder
20. februar 2007 - 13:44 #3
hvad med base.onPaint += og så din onpaint ????

prøv at lade msgboxen eller et breakpoint blive for at se om du kommer ind i kaldt ??
Avatar billede Slettet bruger
20. februar 2007 - 13:57 #4
public CustomProgressBar()
        {
            base.OnPaint += new PaintEventHandler(this.OnPaint);
               
        }

No overload for 'OnPaint' matches delegate 'System.Windows.Forms.PaintEventHandler
Avatar billede Slettet bruger
20. februar 2007 - 16:24 #5
Nogen der ved hvorfor det ikke virker?
Avatar billede driis Nybegynder
20. februar 2007 - 20:13 #6
ProgressBar kører per default ikke OnPaint, den bliver tegnet af OS'et. Det kan du heldigvis override med SetStyle. Så skal du blot selv tegne den. Heldigvis findes der en klasse, ProgressBarRenderer, der hjælper med det.

Eks
Avatar billede driis Nybegynder
20. februar 2007 - 20:13 #7
using System.Drawing;
using System.Windows.Forms;

namespace SubclassedProgressbar
{
    public class PaintProgressBar : ProgressBar
    {
        public PaintProgressBar()
        {
            Paint += new PaintEventHandler(PaintProgressBar_Paint);
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
        }

        void PaintProgressBar_Paint(object sender, PaintEventArgs e)
        {
            ProgressBarRenderer.DrawHorizontalBar(e.Graphics,ClientRectangle);
            int delta = Maximum - Minimum;
            double progress = (double)Value/delta;
            Rectangle r = ClientRectangle;
            r.Width = (int) (r.Width*progress);
            ProgressBarRenderer.DrawHorizontalChunks(e.Graphics,r);
            e.Graphics.DrawString("Hello, world", Parent.Font, Brushes.Black, 1, 1);
        }
    }
}
Avatar billede Slettet bruger
20. februar 2007 - 21:21 #8
Nice :)

Så er der lige det.. jeg skal bruge marqee style, hehe
Avatar billede driis Nybegynder
20. februar 2007 - 22:01 #9
Hmm, så tror jeg du er ude i at skulle skrive noget kode til selv at tegne det. Lige umiddelbart har jeg ikke nogen idéer til hvordan du ellers skulle gribe dén an.
Avatar billede Slettet bruger
20. februar 2007 - 22:06 #10
hmm, damn :/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester