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. Visual Basic
  4. Converting a string into a method

Converting a string into a method

Scheduled Pinned Locked Moved Visual Basic
csharpdata-structurestestingbeta-testing
28 Posts 6 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.
  • T Offline
    T Offline
    treddie
    wrote on last edited by
    #1

    Hi again. I have a peculiar problem that is somewhat reminiscent of vb6's Eval() function. Let's say I have a TreeView populated with an entire harddrive's directory structure, and I want to select the node that contains a folder I am looking for. If I use the .Find method, the search could take forever, and I may end up with multiple places in the TreeView where this name is located. If I already have the full path to the correct folder, then I need a quick way to get to the node without having to search the entire tree. Now, I actually have a quick way of doing this (at least I am confident it will work), but in the process of getting to that solution, I was experimenting with another idea that harks back to that vb6 Eval() function...Sort of. That other idea revolved around selectively expanding a tree branch and testing inside each child node to make sure that the next folder name in my full path could be found there. If so, it would expand that node and continue until all folders in the full path had been exhausted. Theoretically, I would then be at my desired node, which I could then select in the tree. But the problem is that in order to do that, you start at TreeView1.Nodes(0) and do a Find(). Once that node is selected, it gets expanded and you then do a Find() for the second folder, which gets found at Nodes(0).Nodes(x). Moving along in the same fashion, you get to Nodes(0).Nodes(x).Nodes(y), and so on till the task is completed. I think you can see the problem already...Without explicitly setting up Case blocks or If/Else blocks to handle each succession of methods, Nodes(0) Nodes(0).Nodes(x) Nodes(0).Nodes(x).Nodes(y),... there is no way for the code to handle this problem. And such a folder could lie at the tenth childnode, maybe even the twentieth, or more. The point being, it is a kludge to try to estimate when you should stop providing hard-coded cases and pray that some scenario doesn't exceed that limit. That is when I was thinking if there was a way to build a string programatically to whatever length I needed it to be, like, "TreeView1.Nodes(0).Nodes(x).Nodes(y).Expand" and then convert that string into an actual code statement by having the string "evaluated" as such. Is this possible? As I stated above, I think I found another very elegant solution to my TreeView Find() problem which is simple and quick. But I am curious now, if vb.Net has the ability to turn a string into a code statement, or maybe even multiline text into actual v

    N D L E 4 Replies Last reply
    0
    • T treddie

      Hi again. I have a peculiar problem that is somewhat reminiscent of vb6's Eval() function. Let's say I have a TreeView populated with an entire harddrive's directory structure, and I want to select the node that contains a folder I am looking for. If I use the .Find method, the search could take forever, and I may end up with multiple places in the TreeView where this name is located. If I already have the full path to the correct folder, then I need a quick way to get to the node without having to search the entire tree. Now, I actually have a quick way of doing this (at least I am confident it will work), but in the process of getting to that solution, I was experimenting with another idea that harks back to that vb6 Eval() function...Sort of. That other idea revolved around selectively expanding a tree branch and testing inside each child node to make sure that the next folder name in my full path could be found there. If so, it would expand that node and continue until all folders in the full path had been exhausted. Theoretically, I would then be at my desired node, which I could then select in the tree. But the problem is that in order to do that, you start at TreeView1.Nodes(0) and do a Find(). Once that node is selected, it gets expanded and you then do a Find() for the second folder, which gets found at Nodes(0).Nodes(x). Moving along in the same fashion, you get to Nodes(0).Nodes(x).Nodes(y), and so on till the task is completed. I think you can see the problem already...Without explicitly setting up Case blocks or If/Else blocks to handle each succession of methods, Nodes(0) Nodes(0).Nodes(x) Nodes(0).Nodes(x).Nodes(y),... there is no way for the code to handle this problem. And such a folder could lie at the tenth childnode, maybe even the twentieth, or more. The point being, it is a kludge to try to estimate when you should stop providing hard-coded cases and pray that some scenario doesn't exceed that limit. That is when I was thinking if there was a way to build a string programatically to whatever length I needed it to be, like, "TreeView1.Nodes(0).Nodes(x).Nodes(y).Expand" and then convert that string into an actual code statement by having the string "evaluated" as such. Is this possible? As I stated above, I think I found another very elegant solution to my TreeView Find() problem which is simple and quick. But I am curious now, if vb.Net has the ability to turn a string into a code statement, or maybe even multiline text into actual v

      N Offline
      N Offline
      NeverJustHere
      wrote on last edited by
      #2

      I think you need to look at a recursive method. That is, a method that calls itself. Something like: Find( CurrentNode, SubPath ) where the CurrentNode and SubPath are adjusted on each call to itself. You should be able to find boatloads of examples on here, so I won't go into any more detail.

      T 2 Replies Last reply
      0
      • T treddie

        Hi again. I have a peculiar problem that is somewhat reminiscent of vb6's Eval() function. Let's say I have a TreeView populated with an entire harddrive's directory structure, and I want to select the node that contains a folder I am looking for. If I use the .Find method, the search could take forever, and I may end up with multiple places in the TreeView where this name is located. If I already have the full path to the correct folder, then I need a quick way to get to the node without having to search the entire tree. Now, I actually have a quick way of doing this (at least I am confident it will work), but in the process of getting to that solution, I was experimenting with another idea that harks back to that vb6 Eval() function...Sort of. That other idea revolved around selectively expanding a tree branch and testing inside each child node to make sure that the next folder name in my full path could be found there. If so, it would expand that node and continue until all folders in the full path had been exhausted. Theoretically, I would then be at my desired node, which I could then select in the tree. But the problem is that in order to do that, you start at TreeView1.Nodes(0) and do a Find(). Once that node is selected, it gets expanded and you then do a Find() for the second folder, which gets found at Nodes(0).Nodes(x). Moving along in the same fashion, you get to Nodes(0).Nodes(x).Nodes(y), and so on till the task is completed. I think you can see the problem already...Without explicitly setting up Case blocks or If/Else blocks to handle each succession of methods, Nodes(0) Nodes(0).Nodes(x) Nodes(0).Nodes(x).Nodes(y),... there is no way for the code to handle this problem. And such a folder could lie at the tenth childnode, maybe even the twentieth, or more. The point being, it is a kludge to try to estimate when you should stop providing hard-coded cases and pray that some scenario doesn't exceed that limit. That is when I was thinking if there was a way to build a string programatically to whatever length I needed it to be, like, "TreeView1.Nodes(0).Nodes(x).Nodes(y).Expand" and then convert that string into an actual code statement by having the string "evaluated" as such. Is this possible? As I stated above, I think I found another very elegant solution to my TreeView Find() problem which is simple and quick. But I am curious now, if vb.Net has the ability to turn a string into a code statement, or maybe even multiline text into actual v

        D Offline
        D Offline
        dusty_dex
        wrote on last edited by
        #3

        Is this^ any help?

        T 1 Reply Last reply
        0
        • N NeverJustHere

          I think you need to look at a recursive method. That is, a method that calls itself. Something like: Find( CurrentNode, SubPath ) where the CurrentNode and SubPath are adjusted on each call to itself. You should be able to find boatloads of examples on here, so I won't go into any more detail.

          T Offline
          T Offline
          treddie
          wrote on last edited by
          #4

          I was thinking about recursion, but I could not find a way to get the node depth to "recurse". Until just now maybe (lightbulb). But have to see if it is sound. But I am still curious about my original question...Has someone found a way to turn text into code?

          D 1 Reply Last reply
          0
          • D dusty_dex

            Is this^ any help?

            T Offline
            T Offline
            treddie
            wrote on last edited by
            #5

            dusty_dex wrote:

            Is this^ any help?

            Hi Dusty_dex. Are you referring to the previous post? If so, I'm checking into it. But I am still curious about my original question...Has someone found a way to turn text into code? In general, it would be so cool and useful for so many things.

            D 1 Reply Last reply
            0
            • T treddie

              I was thinking about recursion, but I could not find a way to get the node depth to "recurse". Until just now maybe (lightbulb). But have to see if it is sound. But I am still curious about my original question...Has someone found a way to turn text into code?

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

              You don't need it. Yeah, it's called an IDE and compiler. You have to do about the same thing in your code. Create an instance of the compiler and feed it not a string, not an object graph that represents the code you're creating. I wish it was as easy as a couple lines of code, but no. Far from it. But, doing something like this really is not going to help you to solve your problem.

              A guide to posting questions on CodeProject[^]
              Dave Kreskowiak

              T 1 Reply Last reply
              0
              • D Dave Kreskowiak

                You don't need it. Yeah, it's called an IDE and compiler. You have to do about the same thing in your code. Create an instance of the compiler and feed it not a string, not an object graph that represents the code you're creating. I wish it was as easy as a couple lines of code, but no. Far from it. But, doing something like this really is not going to help you to solve your problem.

                A guide to posting questions on CodeProject[^]
                Dave Kreskowiak

                T Offline
                T Offline
                treddie
                wrote on last edited by
                #7

                Bummer. :( I'm so close to finishing a program I've been working on for a year and the only thing hanging me up is this damn TreeView problem. I just find it so bizarre that MS could not provide some very simple functionality to a TreeView, that I would think would be self-evidently obvious properties and methods to include straight-away. I come up with nifty solutions only to have them dashed by a lack of really basic control methods. So frustrating.

                D 1 Reply Last reply
                0
                • N NeverJustHere

                  I think you need to look at a recursive method. That is, a method that calls itself. Something like: Find( CurrentNode, SubPath ) where the CurrentNode and SubPath are adjusted on each call to itself. You should be able to find boatloads of examples on here, so I won't go into any more detail.

                  T Offline
                  T Offline
                  treddie
                  wrote on last edited by
                  #8

                  NeverJustHere wrote:

                  Something like: Find( CurrentNode, SubPath ) where the CurrentNode and SubPath are adjusted on each call to itself.

                  That is easy in principle, but it does not appear that there is any way to tell vb.Net to restrict a Find() to a starting childnode and a sub path. Without that, recursion is useless. Unless I keep building a new node structure that omits the prior part already searched. If that node structure represents an entire harddrive, that would be slower than watching mountains grow.

                  1 Reply Last reply
                  0
                  • T treddie

                    Hi again. I have a peculiar problem that is somewhat reminiscent of vb6's Eval() function. Let's say I have a TreeView populated with an entire harddrive's directory structure, and I want to select the node that contains a folder I am looking for. If I use the .Find method, the search could take forever, and I may end up with multiple places in the TreeView where this name is located. If I already have the full path to the correct folder, then I need a quick way to get to the node without having to search the entire tree. Now, I actually have a quick way of doing this (at least I am confident it will work), but in the process of getting to that solution, I was experimenting with another idea that harks back to that vb6 Eval() function...Sort of. That other idea revolved around selectively expanding a tree branch and testing inside each child node to make sure that the next folder name in my full path could be found there. If so, it would expand that node and continue until all folders in the full path had been exhausted. Theoretically, I would then be at my desired node, which I could then select in the tree. But the problem is that in order to do that, you start at TreeView1.Nodes(0) and do a Find(). Once that node is selected, it gets expanded and you then do a Find() for the second folder, which gets found at Nodes(0).Nodes(x). Moving along in the same fashion, you get to Nodes(0).Nodes(x).Nodes(y), and so on till the task is completed. I think you can see the problem already...Without explicitly setting up Case blocks or If/Else blocks to handle each succession of methods, Nodes(0) Nodes(0).Nodes(x) Nodes(0).Nodes(x).Nodes(y),... there is no way for the code to handle this problem. And such a folder could lie at the tenth childnode, maybe even the twentieth, or more. The point being, it is a kludge to try to estimate when you should stop providing hard-coded cases and pray that some scenario doesn't exceed that limit. That is when I was thinking if there was a way to build a string programatically to whatever length I needed it to be, like, "TreeView1.Nodes(0).Nodes(x).Nodes(y).Expand" and then convert that string into an actual code statement by having the string "evaluated" as such. Is this possible? As I stated above, I think I found another very elegant solution to my TreeView Find() problem which is simple and quick. But I am curious now, if vb.Net has the ability to turn a string into a code statement, or maybe even multiline text into actual v

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

                    treddie wrote:

                    But I am curious now, if vb.Net has the ability to turn a string into a code statement, or maybe even multiline text into actual vb.Net code?

                    There's various ways to compile code (from your app) and execute it. I don't think it'd be very helpful in finding a TreeNode though.

                    treddie wrote:

                    If I already have the full path to the correct folder, then I need a quick way to get to the node without having to search the entire tree.

                    Start at the left of the folder-string. Find the item in the root-node. Open that node. Find the second part of the path in the current node's children. Repeat until the path is empty.

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

                    T 1 Reply Last reply
                    0
                    • T treddie

                      dusty_dex wrote:

                      Is this^ any help?

                      Hi Dusty_dex. Are you referring to the previous post? If so, I'm checking into it. But I am still curious about my original question...Has someone found a way to turn text into code? In general, it would be so cool and useful for so many things.

                      D Offline
                      D Offline
                      dusty_dex
                      wrote on last edited by
                      #10

                      treddie wrote:

                      But I am still curious about my original question...Has someone found a way to turn text into code?

                      66-666-##-11-22-88-8-##-999-666-88-##-222-2-66-##-4-33-88-##-7777-666-6-33-##-444-66-8-33-777-33-7777-8-444-66-4-##444-3-33-2-7777-11111 :-D

                      T 1 Reply Last reply
                      0
                      • D dusty_dex

                        treddie wrote:

                        But I am still curious about my original question...Has someone found a way to turn text into code?

                        66-666-##-11-22-88-8-##-999-666-88-##-222-2-66-##-4-33-88-##-7777-666-6-33-##-444-66-8-33-777-33-7777-8-444-66-4-##444-3-33-2-7777-11111 :-D

                        T Offline
                        T Offline
                        treddie
                        wrote on last edited by
                        #11

                        Lol! OK, Mr. Blechley Park! :)

                        D 1 Reply Last reply
                        0
                        • L Lost User

                          treddie wrote:

                          But I am curious now, if vb.Net has the ability to turn a string into a code statement, or maybe even multiline text into actual vb.Net code?

                          There's various ways to compile code (from your app) and execute it. I don't think it'd be very helpful in finding a TreeNode though.

                          treddie wrote:

                          If I already have the full path to the correct folder, then I need a quick way to get to the node without having to search the entire tree.

                          Start at the left of the folder-string. Find the item in the root-node. Open that node. Find the second part of the path in the current node's children. Repeat until the path is empty.

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

                          T Offline
                          T Offline
                          treddie
                          wrote on last edited by
                          #12

                          That is where the frustration is. There is no way to set any ARBITRARY node as a "current" node and start the search from there, in a Find() method. Although you can restrict the search to a node and none of its children, you can't programmatically start a search at any node without it being specific. There is no general statement for: = MyNodes(2).Nodes.Find("Hello", True) and = MyNodes(2).My1stChildNodes(3).Nodes.Find("Hello", True)

                          L 1 Reply Last reply
                          0
                          • T treddie

                            That is where the frustration is. There is no way to set any ARBITRARY node as a "current" node and start the search from there, in a Find() method. Although you can restrict the search to a node and none of its children, you can't programmatically start a search at any node without it being specific. There is no general statement for: = MyNodes(2).Nodes.Find("Hello", True) and = MyNodes(2).My1stChildNodes(3).Nodes.Find("Hello", True)

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

                            treddie wrote:

                            There is no way to set any ARBITRARY node as a "current" node and start the search from there, in a Find() method

                            Ano node contains a node-collection that can be searched. If you know what node to start from, that is.

                            treddie wrote:

                            There is no general statement for:

                                    TreeView1.Nodes.Add("Node1", "Node1").Nodes.Add("Sub1", "Sub1").Nodes.Add("Hello", "Hello")
                                    TreeView1.Nodes.Add("Node2", "Node2").Nodes.Add("Sub1", "Sub1").Nodes.Add("Hello", "Hello")
                            
                                    Dim foundNode As TreeNode = TreeView1.Nodes("Node2").Nodes("Sub1") ' .Nodes("Hello")
                            
                                    If foundNode IsNot Nothing Then
                                        TreeView1.SelectedNode = foundNode
                                        TreeView1.Focus()
                                    End If
                            

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

                            T 1 Reply Last reply
                            0
                            • T treddie

                              Lol! OK, Mr. Blechley Park! :)

                              D Offline
                              D Offline
                              dusty_dex
                              wrote on last edited by
                              #14

                              If you're curious about recursive functions/parsing/codifying information, perhaps you should read this book: Godel, Escher & Bach by Douglas E. Hofstadter. also, A New Kind of Science by Stephen Wolfram is pretty interesting too. :)

                              T 1 Reply Last reply
                              0
                              • T treddie

                                Bummer. :( I'm so close to finishing a program I've been working on for a year and the only thing hanging me up is this damn TreeView problem. I just find it so bizarre that MS could not provide some very simple functionality to a TreeView, that I would think would be self-evidently obvious properties and methods to include straight-away. I come up with nifty solutions only to have them dashed by a lack of really basic control methods. So frustrating.

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

                                Just because it's a "simple" method to make your job easier, doesn't mean it's a good thing to put into the framework. The .NET Framework is already too heavy. That's why it has been split into Full and Client Profile versions. Why put more stuff into it that's really not neccessary?

                                A guide to posting questions on CodeProject[^]
                                Dave Kreskowiak

                                T 1 Reply Last reply
                                0
                                • L Lost User

                                  treddie wrote:

                                  There is no way to set any ARBITRARY node as a "current" node and start the search from there, in a Find() method

                                  Ano node contains a node-collection that can be searched. If you know what node to start from, that is.

                                  treddie wrote:

                                  There is no general statement for:

                                          TreeView1.Nodes.Add("Node1", "Node1").Nodes.Add("Sub1", "Sub1").Nodes.Add("Hello", "Hello")
                                          TreeView1.Nodes.Add("Node2", "Node2").Nodes.Add("Sub1", "Sub1").Nodes.Add("Hello", "Hello")
                                  
                                          Dim foundNode As TreeNode = TreeView1.Nodes("Node2").Nodes("Sub1") ' .Nodes("Hello")
                                  
                                          If foundNode IsNot Nothing Then
                                              TreeView1.SelectedNode = foundNode
                                              TreeView1.Focus()
                                          End If
                                  

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

                                  T Offline
                                  T Offline
                                  treddie
                                  wrote on last edited by
                                  #16

                                  Eddy Vluggen wrote:

                                  Ano node contains a node-collection that can be searched. If you know what node to start from, that is.

                                  Eddy, is that a product?...The only thing I found was a site called "Ano Node", a freenet help site.

                                  D 1 Reply Last reply
                                  0
                                  • D dusty_dex

                                    If you're curious about recursive functions/parsing/codifying information, perhaps you should read this book: Godel, Escher & Bach by Douglas E. Hofstadter. also, A New Kind of Science by Stephen Wolfram is pretty interesting too. :)

                                    T Offline
                                    T Offline
                                    treddie
                                    wrote on last edited by
                                    #17

                                    DoH! More book reading for my schedule! :) I'll have to look those up. Thanks!

                                    D 1 Reply Last reply
                                    0
                                    • T treddie

                                      DoH! More book reading for my schedule! :) I'll have to look those up. Thanks!

                                      D Offline
                                      D Offline
                                      dusty_dex
                                      wrote on last edited by
                                      #18

                                      Also take look at Emil Post's stuff on 'productions', circa 1930s. The authors initial was wrong, it's Douglas R. Hofstadter. I need better glasses. :) The NKS book is more along the lines of cellular automata. You might want to get the legs on your coffee table reinforced first. ;P

                                      T 1 Reply Last reply
                                      0
                                      • D Dave Kreskowiak

                                        Just because it's a "simple" method to make your job easier, doesn't mean it's a good thing to put into the framework. The .NET Framework is already too heavy. That's why it has been split into Full and Client Profile versions. Why put more stuff into it that's really not neccessary?

                                        A guide to posting questions on CodeProject[^]
                                        Dave Kreskowiak

                                        T Offline
                                        T Offline
                                        treddie
                                        wrote on last edited by
                                        #19

                                        Only because it has such far reaching and useful consequences. I doubt that .Net will cease to grow and get even more heavy, but this option would serve so many uses where recursion is not an option.

                                        D 1 Reply Last reply
                                        0
                                        • D dusty_dex

                                          Also take look at Emil Post's stuff on 'productions', circa 1930s. The authors initial was wrong, it's Douglas R. Hofstadter. I need better glasses. :) The NKS book is more along the lines of cellular automata. You might want to get the legs on your coffee table reinforced first. ;P

                                          T Offline
                                          T Offline
                                          treddie
                                          wrote on last edited by
                                          #20

                                          Heheh.

                                          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