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. strange behaviour of click method

strange behaviour of click method

Scheduled Pinned Locked Moved C#
businessquestion
17 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.
  • R Rob Philpott

    Well, I'm as confused as you. I can't see anything wrong with the code, and particularly not anything which would cause it to return from the function on that line. The only very long shot I can think of is the pdbs are out of date of something and that's causing the debugger to lie to you.

    Regards, Rob Philpott.

    J Offline
    J Offline
    joost versteegen
    wrote on last edited by
    #5

    pdbs??? could you elaborate please?

    R 1 Reply Last reply
    0
    • J joost versteegen

      pdbs??? could you elaborate please?

      R Offline
      R Offline
      Rob Philpott
      wrote on last edited by
      #6

      I really don't think that would be it, but, when you compile your exe it'll produce some .PDB files. These are the 'program database' files and are used by the debugger to map the execution point and variables etc. into the source code. If it gets out of sync then you can see some very weird behaviour. When execution leaves your button handler, does the application carry on?

      Regards, Rob Philpott.

      J 1 Reply Last reply
      0
      • J joost versteegen

        hello, I have a click method for a button and try to iterate through all comboboxes on the form. When I try to access the control through the Controls collection the program jumps out of the method (in the line Control cc = this.Controls[i];). My code is below. Can anyone tell me what I'm doing wrong here?

        public partial class NewTopicCtxCfgElemFrm : Form
        {
        private bool _freeConfig = false;

        public NewTopicCtxCfgElemFrm()
        {
          InitializeComponent();
        }
        
        public void Initialize(Topic topic)
        {
          \_freeConfig = business.TopicFactory.GetTopicTypeIsFreeConfigurable(topic.ID);
          label1.Text = (\_freeConfig) ? "Please select at least one of all." : "Please select all.";
          List list = business.TopicFactory.GetObjTypeForTopic(topic.ID);
          int k = 0;
          foreach (var item in list)
          {
            int y = GetNewLocationTop(k);
        
            // add a label and a combobox to the form 
            Label lbl = new Label();
            lbl.Text = item.ObjTypeName;
            lbl.Location = new Point(10, y);
            lbl.Width = 200;
            this.Controls.Add(lbl);
        
            ComboBox cbx = new ComboBox();
            cbx.Location = new Point(220, y);
            cbx.Width = 200;
            cbx.Tag = item;
            this.Controls.Add(cbx);
        
            // set the datasource
            List objects = business.ObjLinkFactory.GetObjForObjType(item.ObjTypeID);
            cbx.DataSource = objects;
            cbx.SelectedIndex = -1;
        
            // increment indexer
            k++;
          }
          // add an save-button to the form
          Button btn = new Button();
          btn.Text = "Save";
          btn.Location = new Point(10, GetNewLocationTop(k));
          btn.Width = 200;
          this.Controls.Add(btn);
          btn.Click += new EventHandler(btn\_Click);
        }
        
        void btn\_Click(object sender, EventArgs e)
        {
          try
          {
            bool checkRequiredObjTypesOk = !\_freeConfig;
            // check if all required obj types are selected
            for (int i = 0; i < this.Controls.Count; i++)
            {
              Control cc = this.Controls\[i\];
              ComboBox cb = cc as ComboBox;
              if (cb != null)
              {
                if (!\_freeConfig)
                {
                  if (cb.SelectedIndex == -1) { checkRequiredObjTypesOk = false; }
                }
                else
                {
                  if (cb.SelectedIndex > -1) { checkRequiredObjTypesOk = true; }
                }
              }
            }
          }
          catch (Excep
        
        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #7

        You could try a complete rebuild of your project and then put a breakpoint at the beginning of the btn_Click method and run it through your debugger. You should also review what that method is trying to do. As it stands it seems to be setting checkRequiredObjTypesOk randomly to true or false, but never uses that value for any purpose.

        J 1 Reply Last reply
        0
        • J joost versteegen

          hello, I have a click method for a button and try to iterate through all comboboxes on the form. When I try to access the control through the Controls collection the program jumps out of the method (in the line Control cc = this.Controls[i];). My code is below. Can anyone tell me what I'm doing wrong here?

          public partial class NewTopicCtxCfgElemFrm : Form
          {
          private bool _freeConfig = false;

          public NewTopicCtxCfgElemFrm()
          {
            InitializeComponent();
          }
          
          public void Initialize(Topic topic)
          {
            \_freeConfig = business.TopicFactory.GetTopicTypeIsFreeConfigurable(topic.ID);
            label1.Text = (\_freeConfig) ? "Please select at least one of all." : "Please select all.";
            List list = business.TopicFactory.GetObjTypeForTopic(topic.ID);
            int k = 0;
            foreach (var item in list)
            {
              int y = GetNewLocationTop(k);
          
              // add a label and a combobox to the form 
              Label lbl = new Label();
              lbl.Text = item.ObjTypeName;
              lbl.Location = new Point(10, y);
              lbl.Width = 200;
              this.Controls.Add(lbl);
          
              ComboBox cbx = new ComboBox();
              cbx.Location = new Point(220, y);
              cbx.Width = 200;
              cbx.Tag = item;
              this.Controls.Add(cbx);
          
              // set the datasource
              List objects = business.ObjLinkFactory.GetObjForObjType(item.ObjTypeID);
              cbx.DataSource = objects;
              cbx.SelectedIndex = -1;
          
              // increment indexer
              k++;
            }
            // add an save-button to the form
            Button btn = new Button();
            btn.Text = "Save";
            btn.Location = new Point(10, GetNewLocationTop(k));
            btn.Width = 200;
            this.Controls.Add(btn);
            btn.Click += new EventHandler(btn\_Click);
          }
          
          void btn\_Click(object sender, EventArgs e)
          {
            try
            {
              bool checkRequiredObjTypesOk = !\_freeConfig;
              // check if all required obj types are selected
              for (int i = 0; i < this.Controls.Count; i++)
              {
                Control cc = this.Controls\[i\];
                ComboBox cb = cc as ComboBox;
                if (cb != null)
                {
                  if (!\_freeConfig)
                  {
                    if (cb.SelectedIndex == -1) { checkRequiredObjTypesOk = false; }
                  }
                  else
                  {
                    if (cb.SelectedIndex > -1) { checkRequiredObjTypesOk = true; }
                  }
                }
              }
            }
            catch (Excep
          
          L Offline
          L Offline
          Lost User
          wrote on last edited by
          #8

          joost.versteegen wrote:

          the program jumps out of the method (in the lin

          No, it doesn't. It jumps out on the line after that, as your control is not a combo. Using "as" does not throw an exception, the variable is null and ignored.

          Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

          J 1 Reply Last reply
          0
          • L Lost User

            You could try a complete rebuild of your project and then put a breakpoint at the beginning of the btn_Click method and run it through your debugger. You should also review what that method is trying to do. As it stands it seems to be setting checkRequiredObjTypesOk randomly to true or false, but never uses that value for any purpose.

            J Offline
            J Offline
            joost versteegen
            wrote on last edited by
            #9

            That part was not finished yet.

            L 1 Reply Last reply
            0
            • L Lost User

              joost.versteegen wrote:

              the program jumps out of the method (in the lin

              No, it doesn't. It jumps out on the line after that, as your control is not a combo. Using "as" does not throw an exception, the variable is null and ignored.

              Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

              J Offline
              J Offline
              joost versteegen
              wrote on last edited by
              #10

              No, it does realy jump out of the line i specified. The debugger sometimes does not reach the "if (cb != null)" test!

              L 1 Reply Last reply
              0
              • R Rob Philpott

                I really don't think that would be it, but, when you compile your exe it'll produce some .PDB files. These are the 'program database' files and are used by the debugger to map the execution point and variables etc. into the source code. If it gets out of sync then you can see some very weird behaviour. When execution leaves your button handler, does the application carry on?

                Regards, Rob Philpott.

                J Offline
                J Offline
                joost versteegen
                wrote on last edited by
                #11

                How could i put the pdb file back in sync? I already tried a complete rebuild but that didn't help.

                D 1 Reply Last reply
                0
                • J joost versteegen

                  That part was not finished yet.

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

                  OK. However I have just tested your code (modified to fit my sample) and it works fine using both for and foreach. You need to get to work with your debugger to see what is happening. I suspect some out of date code is getting linked in by mistake somewhere.

                  1 Reply Last reply
                  0
                  • J joost versteegen

                    How could i put the pdb file back in sync? I already tried a complete rebuild but that didn't help.

                    D Offline
                    D Offline
                    Dave Kreskowiak
                    wrote on last edited by
                    #13

                    Do a "Clean Project" first, then recompile it.

                    A guide to posting questions on CodeProject

                    How to debug small programs
                    Dave Kreskowiak

                    1 Reply Last reply
                    0
                    • J joost versteegen

                      No, it does realy jump out of the line i specified. The debugger sometimes does not reach the "if (cb != null)" test!

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

                      Add in a Debug.WriteLine to show the names of the controls found. It will only loop the children, not any sub-children btw! The code will SKIP anything that is not directly on the form (IE, any combo that's on a panel).

                      Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                      J 1 Reply Last reply
                      0
                      • L Lost User

                        Add in a Debug.WriteLine to show the names of the controls found. It will only loop the children, not any sub-children btw! The code will SKIP anything that is not directly on the form (IE, any combo that's on a panel).

                        Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                        J Offline
                        J Offline
                        joost versteegen
                        wrote on last edited by
                        #15

                        took your advise and added a number of debug.writeln statements...the code did exactly what it was supposed to do...but the debugger keeps doing strange things. Thanks anyway!!

                        L 1 Reply Last reply
                        0
                        • J joost versteegen

                          took your advise and added a number of debug.writeln statements...the code did exactly what it was supposed to do...but the debugger keeps doing strange things. Thanks anyway!!

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

                          Did you deploy a version to the GAC?

                          Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                          1 Reply Last reply
                          0
                          • J joost versteegen

                            hello, I have a click method for a button and try to iterate through all comboboxes on the form. When I try to access the control through the Controls collection the program jumps out of the method (in the line Control cc = this.Controls[i];). My code is below. Can anyone tell me what I'm doing wrong here?

                            public partial class NewTopicCtxCfgElemFrm : Form
                            {
                            private bool _freeConfig = false;

                            public NewTopicCtxCfgElemFrm()
                            {
                              InitializeComponent();
                            }
                            
                            public void Initialize(Topic topic)
                            {
                              \_freeConfig = business.TopicFactory.GetTopicTypeIsFreeConfigurable(topic.ID);
                              label1.Text = (\_freeConfig) ? "Please select at least one of all." : "Please select all.";
                              List list = business.TopicFactory.GetObjTypeForTopic(topic.ID);
                              int k = 0;
                              foreach (var item in list)
                              {
                                int y = GetNewLocationTop(k);
                            
                                // add a label and a combobox to the form 
                                Label lbl = new Label();
                                lbl.Text = item.ObjTypeName;
                                lbl.Location = new Point(10, y);
                                lbl.Width = 200;
                                this.Controls.Add(lbl);
                            
                                ComboBox cbx = new ComboBox();
                                cbx.Location = new Point(220, y);
                                cbx.Width = 200;
                                cbx.Tag = item;
                                this.Controls.Add(cbx);
                            
                                // set the datasource
                                List objects = business.ObjLinkFactory.GetObjForObjType(item.ObjTypeID);
                                cbx.DataSource = objects;
                                cbx.SelectedIndex = -1;
                            
                                // increment indexer
                                k++;
                              }
                              // add an save-button to the form
                              Button btn = new Button();
                              btn.Text = "Save";
                              btn.Location = new Point(10, GetNewLocationTop(k));
                              btn.Width = 200;
                              this.Controls.Add(btn);
                              btn.Click += new EventHandler(btn\_Click);
                            }
                            
                            void btn\_Click(object sender, EventArgs e)
                            {
                              try
                              {
                                bool checkRequiredObjTypesOk = !\_freeConfig;
                                // check if all required obj types are selected
                                for (int i = 0; i < this.Controls.Count; i++)
                                {
                                  Control cc = this.Controls\[i\];
                                  ComboBox cb = cc as ComboBox;
                                  if (cb != null)
                                  {
                                    if (!\_freeConfig)
                                    {
                                      if (cb.SelectedIndex == -1) { checkRequiredObjTypesOk = false; }
                                    }
                                    else
                                    {
                                      if (cb.SelectedIndex > -1) { checkRequiredObjTypesOk = true; }
                                    }
                                  }
                                }
                              }
                              catch (Excep
                            
                            B Offline
                            B Offline
                            Bernhard Hiller
                            wrote on last edited by
                            #17

                            The debugger is sometimes a little buggy. Set a break point in one of the next lines to be hi. Generally, it will stop then there even if it uses to leave the method to nowhere.

                            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