?
Solved

Access an Object using a Variable

Posted on 2007-11-15
15
Medium Priority
?
246 Views
Last Modified: 2010-04-15
Just starting out on C# from VB and I want to know since there is no Object Arrays in C# that can I access an object by using a String.

Non Working Example:
TheObject("Button4").visible=false

That is the kind of Functionality I am looking for.

Thanks
0
Comment
Question by:scogger1974
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
15 Comments
 
LVL 7

Expert Comment

by:dctuck
ID: 20290457
If you're wanting to reference controls in the form you can use:
this.Controls["Button4"].Visible = false;
0
 
LVL 1

Author Comment

by:scogger1974
ID: 20290468
I guess the Second Part of this Question would come in ...
Could I also Name an Object Based on a string....
0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20290489

string mystring = "somename";

this.Button1.Location = new System.Drawing.Point(632, 412);
this.Button1.Name = mystring;
this.Button1.Size = new System.Drawing.Size(75, 23);
this.Button1.TabIndex = 41;
this.Button1.Text = "Update db ";
this.Button1.UseVisualStyleBackColor = true;
this.Button1.Visible = false;
this.Controls.Add(this.Button1);
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Author Comment

by:scogger1974
ID: 20290534
Here is the code based on what you said.  but here is whats happening
// Create Button
            Button ButtonA = new Button();
            ButtonA.Location = new Point(7, 146);
            ButtonA.Size = new Size(94, 23);
            ButtonA.Text = "ADD ITEM";
            groupBox4.Controls.Add(ButtonA);
            this.Controls["ButtonA"].Visible = false;

Here is the error it returns
Object reference not set to an instance of an object.
0
 
LVL 1

Author Comment

by:scogger1974
ID: 20290563
vbturbo:
  I know I can chage the Name but I want to be able to use that name to access the Object.
0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20290613
       private void Form1_Load(object sender, EventArgs e)
        {
            Button ButtonA = new Button();
            ButtonA.Location = new Point(7, 146);
            ButtonA.Size = new Size(94, 23);
            ButtonA.Text = "ADD ITEM";
            //groupBox4.Controls.Add(ButtonA);
            this.Controls.Add(ButtonA);
        }

vbturbo
0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20290632
sorry

        private void Form1_Load(object sender, EventArgs e)
        {
            Button ButtonA = new Button();
            ButtonA.Location = new Point(7, 146);
            ButtonA.Size = new Size(94, 23);
            ButtonA.Text = "ADD ITEM";
            this.groupBox1.Controls.Add(ButtonA);
            //this.Controls.Add(ButtonA);
        }
0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20290672
and use for docking the button to always be inside the groupbox

ButtonA.Location = new Point(this.groupBox1.Top + 10, this.groupBox1.Left + 20);
0
 
LVL 1

Author Comment

by:scogger1974
ID: 20291152
If I set the .Name Property ... the Object name remains the same... I want to do something like this
although this doesnt work

Button "SomeString"= new Button();

and then be able to do

Object("Somestring").Visible = false;

0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20291569
Im not quite sure what you mean

but here you create a button array object and add button objects, where you are able to set the properties of the buttons before adding them into the array

Button[] ButtonArray = new Button[9];

    public void AddButtons() {
        for (int x = 0; (x <= 9); x++) {
            ButtonArray[x] = new Button();
            ButtonArray[x] .Tag = x;
            ButtonArray[x].Text = ("Button " + x);
            ButtonArray[x].Size = new Size(60, 20);
            ButtonArray[x].Location = new Point(20, ((x * 20) + 4));
            ButtonArray[x].Parent = this;
            ButtonArray[x].Visible = true;
            .Click +=  new System.EventHandler(this.ButtonHandler);
           
        }
    }
   
private void Button2_Click(object sender, System.EventArgs e)
{
    MessageBox.Show("Button number " + ((Button)sender).Tag + " was clicked");
}

vbturbo
0
 
LVL 18

Accepted Solution

by:
vbturbo earned 2000 total points
ID: 20291720
sorry minor conversion error

        public void AddButtons() {
            for(int x=0;x<9;x++)
   {
            ButtonArray[x] = new Button();
            ButtonArray[x] .Tag = x;
            ButtonArray[x].Text = ("Button " + x);
            ButtonArray[x].Size = new Size(60, 20);
            ButtonArray[x].Location = new Point(20, ((x * 20) + 4));
            ButtonArray[x].Parent = this;
            ButtonArray[x].Visible = true;
            this.ButtonArray[x].Click += new System.EventHandler(this.ButtonHandler);
           
        }
    }

        public void ButtonHandler(object sender, System.EventArgs e)
        {
            MessageBox.Show(("Button number "
                            + (((Button)(sender)).Tag + " was clicked")));
        }
0
 
LVL 1

Author Comment

by:scogger1974
ID: 20291746
Exactly!!
I thought there was not the option to have an object Array in here but I guess I was wrong
Thanks..
0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20291767
just glad it suited you, sorry for the many post's but im getting a bit rusty in c#
0
 
LVL 1

Author Comment

by:scogger1974
ID: 20291798
Its one thing to learn how to do something
but its another to learn how ask the right questions
0
 
LVL 18

Expert Comment

by:vbturbo
ID: 20291826
i suppose so -;)

thanks for the grade
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Ivo
C# And Nullable Types Since 2.0 C# has Nullable(T) Generic Structure. The idea behind is to allow value type objects to have null values just like reference types have. This concerns scenarios where not all data sources have values (like a databa…
Introduction Although it is an old technology, serial ports are still being used by many hardware manufacturers. If you develop applications in C#, Microsoft .NET framework has SerialPort class to communicate with the serial ports.  I needed to…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

801 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question