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.
  • 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