Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103

    C# -Metodo override OnPaint non invocato

    Ragazzi una cosa
    sapete per caso perché se implemento nella checkbox o combobox il metodo

    protected override OnPaint(PainEventArgs e){
    }


    il metodo non viene visitato chiamato?

    Ho provato ad usare SetStyle(ControlStyles.UserPaint, true)
    e funziona il metodo viene invocato
    peccato che il combobox viene disegnato senza freccetta laterale...per cui non mi serve

    Consigli?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Dove hai inserito quel metodo? Qual è la classe che lo contiene?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103
    Il codice più o meno è


    namespace ----
    {

    public partial class ComboBoxCtrl : ComboBox
    {
    -------
    private void InitializeCtrl()
    {
    }

    public ComboBoxCtrl()
    {
    InitializeCtrl();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
    ---------
    }
    }
    }

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da htiman2008
    Il codice più o meno è [...]
    Nel "più o meno" potrebbe nascondersi l'errore... :master:

    Come mai la classe è definita come partial?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103
    Guarda la classe è definita partial perchè siamo più persone a lavorarci sopra.

    Qui sotto ti scrivo per bene il codice: dimmi cosa ne pensi!

    namespace NCManager.ControlsLib
    {
    public partial class ComboBoxCtrl : ComboBox
    {
    private void InitializeCtrl()
    {
    }

    public ComboBoxCtrl()
    {
    InitializeCtrl();
    }


    protected override void OnPaint(PaintEventArgs e)
    {
    Rectangle BaseRectangle = new Rectangle(0, 0, this.Width - 1 , this.Height - 1);
    Brush Gradient_Brush =
    new LinearGradientBrush(
    BaseRectangle,
    BackColor, Color.WhiteSmoke,
    LinearGradientMode.Vertical);

    e.Graphics.FillRectangle(Gradient_Brush, BaseRectangle);

    Pen forePen = new Pen(ControlPaint.LightLight(Color.Gray), SystemInformation.BorderSize.Height);
    Pen forePenDark = new Pen(ControlPaint.Dark(Color.Black), SystemInformation.BorderSize.Height);
    Point lineLeft = new Point(ClientRectangle.Left + SystemInformation.BorderSize.Width, ClientRectangle.Top);
    Point lineRight = new Point(ClientRectangle.Right, ClientRectangle.Top);

    Point lineTopLeft = new Point(ClientRectangle.Left, lineLeft.Y);
    lineTopLeft.Offset(SystemInformation.BorderSize.He ight, SystemInformation.BorderSize.Height);
    Point lineTopRight = new Point(ClientRectangle.Right, lineRight.Y);
    lineTopRight.Offset(-SystemInformation.BorderSize.Height, SystemInformation.BorderSize.Height);

    Point lineBottomLeft = new Point(ClientRectangle.Left, ClientRectangle.Bottom);
    lineBottomLeft.Offset(SystemInformation.BorderSize .Height, -SystemInformation.BorderSize.Height);
    Point lineBottomRight = new Point(ClientRectangle.Right, ClientRectangle.Bottom);
    lineBottomRight.Offset(-SystemInformation.BorderSize.Height, -SystemInformation.BorderSize.Height);

    if (FlatStyle == FlatStyle.Flat)
    {
    e.Graphics.DrawLine(forePenDark, lineLeft, lineRight);
    e.Graphics.DrawLine(forePenDark, lineBottomLeft, lineBottomRight);
    e.Graphics.DrawLine(forePenDark, lineTopLeft, lineBottomLeft);
    e.Graphics.DrawLine(forePenDark, lineTopRight, lineBottomRight);
    }
    else
    {
    base.OnPaint(e);
    }

    forePenDark.Dispose();
    forePen.Dispose();
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    103
    Salve a tutti,
    vi vorrei dire che purtroppo il metodo OnPaint non viene invocato mentre di migliore utilità in questo caso è il metodo OnDrawItem() [non override ma private].
    Il problema ora si sposta sul fatto che il sistema sembra non riconoscere il ClientRectangle tanto utile nella mia applicazione, per cui alla fine non traccia alcuna riga.
    Grazie

  7. #7
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    forse non viene invocato il base.OnPaint()... :master:
    I got the remedy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.