Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Overridden OnPaint method not called on form

Overridden OnPaint method not called on form

Scheduled Pinned Locked Moved C#
question
16 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    pr1mem0ver
    wrote on last edited by
    #1

    I am trying to override the OnPaint and OnPaintBackground methods for my Application's main form. For some reason neither of the methods are being called EVER. They are completely ignored. What am I doing wrong?

    OriginalGriffO L 2 Replies Last reply
    0
    • P pr1mem0ver

      I am trying to override the OnPaint and OnPaintBackground methods for my Application's main form. For some reason neither of the methods are being called EVER. They are completely ignored. What am I doing wrong?

      OriginalGriffO Offline
      OriginalGriffO Offline
      OriginalGriff
      wrote on last edited by
      #2

      Without seeing the code, we can have no idea whatsoever - heck, we don't even know what environment you are working in - WinForms. WPF, web app - and that can make a difference! So show us the relevant code fragments, tell us how have you tested it, how you know it's never getting called, and what environment it is working in. Help us to help you!

      Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!

      "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
      "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

      P 1 Reply Last reply
      0
      • OriginalGriffO OriginalGriff

        Without seeing the code, we can have no idea whatsoever - heck, we don't even know what environment you are working in - WinForms. WPF, web app - and that can make a difference! So show us the relevant code fragments, tell us how have you tested it, how you know it's never getting called, and what environment it is working in. Help us to help you!

        Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!

        P Offline
        P Offline
        pr1mem0ver
        wrote on last edited by
        #3

        I have no idea what you would want to see. Other than than the fact that I am using a regular System.Windows.Forms form, I have no idea what else matters. All that I should need to do is write an overridden onpaint method... doing this has worked in other applications. that is the only thing that I know is relevant. I have simply written a method override. Here is the content but its all commented out because except for the call to the base method because it wasn't working. Putting a break point in here indicates that the method isn't being executed at all. It is working fine in other applications where I have overwritten the OnPaint method.

        protected override void OnPaint(PaintEventArgs e)
        {
        base.OnPaint(e);
        /*if (designMode)
        base.OnPaint(e);
        else
        {
        switch (DisplayMode)
        {
        case DisplayMode.DesktopWidget:
        if (UseWorkerAPI)
        {
        IntPtr dc = GetDCEx(hWorkerAPI, IntPtr.Zero, (DeviceContextValues)0x403);
        base.OnPaint(new PaintEventArgs(Graphics.FromHdc(dc), e.ClipRectangle));
        }
        break;
        case DisplayMode.WindowWidget:
        base.OnPaint(e);
        break;
        default:
        break;
        }
        }*/
        }

        OriginalGriffO R L P 4 Replies Last reply
        0
        • P pr1mem0ver

          I have no idea what you would want to see. Other than than the fact that I am using a regular System.Windows.Forms form, I have no idea what else matters. All that I should need to do is write an overridden onpaint method... doing this has worked in other applications. that is the only thing that I know is relevant. I have simply written a method override. Here is the content but its all commented out because except for the call to the base method because it wasn't working. Putting a break point in here indicates that the method isn't being executed at all. It is working fine in other applications where I have overwritten the OnPaint method.

          protected override void OnPaint(PaintEventArgs e)
          {
          base.OnPaint(e);
          /*if (designMode)
          base.OnPaint(e);
          else
          {
          switch (DisplayMode)
          {
          case DisplayMode.DesktopWidget:
          if (UseWorkerAPI)
          {
          IntPtr dc = GetDCEx(hWorkerAPI, IntPtr.Zero, (DeviceContextValues)0x403);
          base.OnPaint(new PaintEventArgs(Graphics.FromHdc(dc), e.ClipRectangle));
          }
          break;
          case DisplayMode.WindowWidget:
          base.OnPaint(e);
          break;
          default:
          break;
          }
          }*/
          }

          OriginalGriffO Offline
          OriginalGriffO Offline
          OriginalGriff
          wrote on last edited by
          #4

          And you are right - that should work for WinForms, and a breakpoint should be hit. And I'm sorry if this sounds like you don't know what you are doing, but I can't see your screen, so we need to start with basics. 1) Are you testing under the debugger? 2) Have you checked the OnPaint override is in the right form class? 3) Have you tried handling the Paint event for the form via the designer?

          Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!

          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
          "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

          1 Reply Last reply
          0
          • P pr1mem0ver

            I have no idea what you would want to see. Other than than the fact that I am using a regular System.Windows.Forms form, I have no idea what else matters. All that I should need to do is write an overridden onpaint method... doing this has worked in other applications. that is the only thing that I know is relevant. I have simply written a method override. Here is the content but its all commented out because except for the call to the base method because it wasn't working. Putting a break point in here indicates that the method isn't being executed at all. It is working fine in other applications where I have overwritten the OnPaint method.

            protected override void OnPaint(PaintEventArgs e)
            {
            base.OnPaint(e);
            /*if (designMode)
            base.OnPaint(e);
            else
            {
            switch (DisplayMode)
            {
            case DisplayMode.DesktopWidget:
            if (UseWorkerAPI)
            {
            IntPtr dc = GetDCEx(hWorkerAPI, IntPtr.Zero, (DeviceContextValues)0x403);
            base.OnPaint(new PaintEventArgs(Graphics.FromHdc(dc), e.ClipRectangle));
            }
            break;
            case DisplayMode.WindowWidget:
            base.OnPaint(e);
            break;
            default:
            break;
            }
            }*/
            }

            R Offline
            R Offline
            Ralf Meier
            wrote on last edited by
            #5

            OK ... that doesn't helps ... My questions are : - you work with FORMS ...? - you have created you own customized Form (I call it myForm) which derives from FORM ...? - on that myForm you overrided the Method OnPaint ...? - you have tested how it works with another Form (perhaps called Form1) which derives from myForm ...? - why are the code-parts in your sample code commented out ...? If you answer all of these questions it is perhaps possible to help you ...

            1 Reply Last reply
            0
            • P pr1mem0ver

              I have no idea what you would want to see. Other than than the fact that I am using a regular System.Windows.Forms form, I have no idea what else matters. All that I should need to do is write an overridden onpaint method... doing this has worked in other applications. that is the only thing that I know is relevant. I have simply written a method override. Here is the content but its all commented out because except for the call to the base method because it wasn't working. Putting a break point in here indicates that the method isn't being executed at all. It is working fine in other applications where I have overwritten the OnPaint method.

              protected override void OnPaint(PaintEventArgs e)
              {
              base.OnPaint(e);
              /*if (designMode)
              base.OnPaint(e);
              else
              {
              switch (DisplayMode)
              {
              case DisplayMode.DesktopWidget:
              if (UseWorkerAPI)
              {
              IntPtr dc = GetDCEx(hWorkerAPI, IntPtr.Zero, (DeviceContextValues)0x403);
              base.OnPaint(new PaintEventArgs(Graphics.FromHdc(dc), e.ClipRectangle));
              }
              break;
              case DisplayMode.WindowWidget:
              base.OnPaint(e);
              break;
              default:
              break;
              }
              }*/
              }

              L Offline
              L Offline
              Lost User
              wrote on last edited by
              #6

              Stupid question, but why is all the code commented out?

              1 Reply Last reply
              0
              • P pr1mem0ver

                I have no idea what you would want to see. Other than than the fact that I am using a regular System.Windows.Forms form, I have no idea what else matters. All that I should need to do is write an overridden onpaint method... doing this has worked in other applications. that is the only thing that I know is relevant. I have simply written a method override. Here is the content but its all commented out because except for the call to the base method because it wasn't working. Putting a break point in here indicates that the method isn't being executed at all. It is working fine in other applications where I have overwritten the OnPaint method.

                protected override void OnPaint(PaintEventArgs e)
                {
                base.OnPaint(e);
                /*if (designMode)
                base.OnPaint(e);
                else
                {
                switch (DisplayMode)
                {
                case DisplayMode.DesktopWidget:
                if (UseWorkerAPI)
                {
                IntPtr dc = GetDCEx(hWorkerAPI, IntPtr.Zero, (DeviceContextValues)0x403);
                base.OnPaint(new PaintEventArgs(Graphics.FromHdc(dc), e.ClipRectangle));
                }
                break;
                case DisplayMode.WindowWidget:
                base.OnPaint(e);
                break;
                default:
                break;
                }
                }*/
                }

                P Offline
                P Offline
                pr1mem0ver
                wrote on last edited by
                #7

                Hello all who have made comments. I am replying to my own comment so that I can address all of your comments in one reply. All of you except for OriginalGriff are asking questions that I have already implied or explicitly written answers too: Perhaps some of you don't speak English so I will clarify. This statement implies that the code I provided above is in a class derived from System.Windows.Forms: "Other than than the fact that I am using a regular System.Windows.Forms form" As for why I commented code out, I answered that question with the statement: "Here is the content but its all commented out because except for the call to the base method because it wasn't working." If you don't understand any of the above statements, then ask about that. Otherwise please don't ask questions that I have already answered. It wastes everyone's time. For my part, I probably could have written that second statement better as: "Here is the content but it's all commented out because, except for the call to the base method, because it wasn't working." OriginalGriff: 1. Yes 2. Yes 3. No. I did not want the form drawn normally under certain conditions. EVERYONE: I wrote a test program to both figure this issue out and move forward with my purpose since that test program is working correctly. I have learned that overriding OnPaint will not accomplish what I am currently trying to do (which is to make the application into a desktop widget when the user decides... that means drawing it as part of the desktop). However, I would still like to troubleshoot this in case I need to override OnPaint for another reason... chances are good I may need to since this is a very customized form.

                L 1 Reply Last reply
                0
                • P pr1mem0ver

                  Hello all who have made comments. I am replying to my own comment so that I can address all of your comments in one reply. All of you except for OriginalGriff are asking questions that I have already implied or explicitly written answers too: Perhaps some of you don't speak English so I will clarify. This statement implies that the code I provided above is in a class derived from System.Windows.Forms: "Other than than the fact that I am using a regular System.Windows.Forms form" As for why I commented code out, I answered that question with the statement: "Here is the content but its all commented out because except for the call to the base method because it wasn't working." If you don't understand any of the above statements, then ask about that. Otherwise please don't ask questions that I have already answered. It wastes everyone's time. For my part, I probably could have written that second statement better as: "Here is the content but it's all commented out because, except for the call to the base method, because it wasn't working." OriginalGriff: 1. Yes 2. Yes 3. No. I did not want the form drawn normally under certain conditions. EVERYONE: I wrote a test program to both figure this issue out and move forward with my purpose since that test program is working correctly. I have learned that overriding OnPaint will not accomplish what I am currently trying to do (which is to make the application into a desktop widget when the user decides... that means drawing it as part of the desktop). However, I would still like to troubleshoot this in case I need to override OnPaint for another reason... chances are good I may need to since this is a very customized form.

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #8

                  I just tried something similar (using the code you posted) and it works every time. There must be something else in your form/project that is preventing it calling your OnPaint override.

                  P 1 Reply Last reply
                  0
                  • P pr1mem0ver

                    I am trying to override the OnPaint and OnPaintBackground methods for my Application's main form. For some reason neither of the methods are being called EVER. They are completely ignored. What am I doing wrong?

                    L Offline
                    L Offline
                    Luc Pattyn
                    wrote on last edited by
                    #9

                    Wild guess: your project got corrupted. Try "rebuild all". :)

                    Luc Pattyn [My Articles] Nil Volentibus Arduum

                    P 1 Reply Last reply
                    0
                    • L Luc Pattyn

                      Wild guess: your project got corrupted. Try "rebuild all". :)

                      Luc Pattyn [My Articles] Nil Volentibus Arduum

                      P Offline
                      P Offline
                      pr1mem0ver
                      wrote on last edited by
                      #10

                      LOL. Already tried that. Didn't work.

                      1 Reply Last reply
                      0
                      • L Lost User

                        I just tried something similar (using the code you posted) and it works every time. There must be something else in your form/project that is preventing it calling your OnPaint override.

                        P Offline
                        P Offline
                        pr1mem0ver
                        wrote on last edited by
                        #11

                        Yeah. I know. I tried it again in the newer "test" app (as I mention in my most recent post above). It works fine. I still can't find anything wrong with the project app. I am hoping someone will have an idea of what could possibly get in the way of the override being called.

                        L 1 Reply Last reply
                        0
                        • P pr1mem0ver

                          Yeah. I know. I tried it again in the newer "test" app (as I mention in my most recent post above). It works fine. I still can't find anything wrong with the project app. I am hoping someone will have an idea of what could possibly get in the way of the override being called.

                          L Offline
                          L Offline
                          Lost User
                          wrote on last edited by
                          #12

                          Impossible to guess since we do not have enough information.

                          L 1 Reply Last reply
                          0
                          • L Lost User

                            Impossible to guess since we do not have enough information.

                            L Offline
                            L Offline
                            Luc Pattyn
                            wrote on last edited by
                            #13

                            That is exactly when a guess is required... When all information is available, you can rationally deduce what causes the problem. ;)

                            Luc Pattyn [My Articles] Nil Volentibus Arduum

                            L 1 Reply Last reply
                            0
                            • L Luc Pattyn

                              That is exactly when a guess is required... When all information is available, you can rationally deduce what causes the problem. ;)

                              Luc Pattyn [My Articles] Nil Volentibus Arduum

                              L Offline
                              L Offline
                              Lost User
                              wrote on last edited by
                              #14

                              Luc Pattyn wrote:

                              When all information is available

                              Exactly so; but until then ...

                              P 1 Reply Last reply
                              0
                              • L Lost User

                                Luc Pattyn wrote:

                                When all information is available

                                Exactly so; but until then ...

                                P Offline
                                P Offline
                                pr1mem0ver
                                wrote on last edited by
                                #15

                                Until then... For now I can live without an answer.

                                L 1 Reply Last reply
                                0
                                • P pr1mem0ver

                                  Until then... For now I can live without an answer.

                                  L Offline
                                  L Offline
                                  Lost User
                                  wrote on last edited by
                                  #16

                                  And without providing more information that's how it will remain, I am afraid.

                                  1 Reply Last reply
                                  0
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes


                                  • Login

                                  • Don't have an account? Register

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • World
                                  • Users
                                  • Groups