• 0

[c#] pass variable between functions


Question

10 answers to this question

Recommended Posts

  • 0
  On 29/03/2010 at 05:54, Gangsta said:

Meaning access a variable in one from another function? that would be a scope trick. Use a variable declared outside...

if not, I have no idea what you're asking.

I have the variables declared outside of the functions, but I still can't access them. This is just a simple example what I am doing. What I do is click StudentBtt1 and update the variable to ten. Then with StudentBtt2 I want to show that updated variable. When I click StudentBtt2 I still get "1".

public int _var1 = 1;

    public void StudentBtt1_Click(object sender, EventArgs e)
    {
     //update to ten
        _var1 = 5+5;
    }

    public void StudentBtt2_Click(object sender, EventArgs e)
    {
        //show the updated variable
        Literal1.Text = _var1;
    }


  • 0

you need to make the variable static, like..

static int x;   			

protected void Button1_Click(object sender, EventArgs e)
{
    x = x+5;
}

protected void Button2_Click(object sender, EventArgs e)
{
    Label1.Text = x.ToString();
}

however, the limitation with this is that is that a static variable is shared across all instances of the page and may will cause you issues if / when you have multiple users accessing the page.

a slightly better approach would be to use a session variable.. but global variables are not really 'supported' in c# and i think a best method would be to use a class

  • 0

Are you using WinForms/Desktop development, or ASP.NET?

It's quite important, as ASP.NET will require you to somehow persist your variables from one page view to the next, if that is what you need.

Your original solution would work perfectly fine for WinForms development, but not for ASP.NET, as when you view a page in ASP.NET the whole page class is instantiated, thus your variables would be instantiated as well.

Using a static instance as BGM suggested works for ASP.NET, again with the limitations he has expressed.

You could take advantage of either Session of ViewState too.

private int val;

protected void Page_Load(object sender, EventArgs e) {
    if (Session["myVal"] != null)
      val = (int)Session["myVal"];
}

public void StudentBtt1_Click(object sender, EventArgs e) {
  val = 5 + 5;
  Session["myVal"] = val;
}

public void StudentBtt2_Click(object sender, EventArgs e) {
  Literal1.Text = val.ToString();
}

private int val;

protected void Page_Load(object sender, EventArgs e) {
    if (ViewState["myVal"] != null)
      val = (int)ViewState["myVal"];
}

public void StudentBtt1_Click(object sender, EventArgs e) {
  val = 5 + 5;
  ViewState["myVal"] = val;
}

public void StudentBtt2_Click(object sender, EventArgs e) {
  Literal1.Text = val.ToString();
}

For this simple example, I'd recommend using ViewState.

Edited by Antaris
Reworded so I don't sound like a 'tard.
  • 0
  On 29/03/2010 at 05:46, heffer86 said:

I have two functions. How do I pass variables between the two?

    public void StudentBtt1_Click(object sender, EventArgs e)
    {
        _var1 = 5+5;
    }

    public void StudentBtt2_Click(object sender, EventArgs e)
    {
        Literal1.Text = _var1;
    }

Assuming you're using ASP.NET, you could store the variable in the ViewState. For example:

    public void StudentBtt1_Click(object sender, EventArgs e)
    {
        _var1 = 5+5;
        ViewState["_var1"] = _var1;
    }

    public void StudentBtt2_Click(object sender, EventArgs e)
    {
        _var1 = ViewState["_var1"];
        Literal1.Text = _var1;
    }

This allows you to store the contents of "_var1" inside the actual content of the page, and retrieve it on when you click the second button. Do bear in mind that there is a performance cost associated with keeping things inside the ViewState, but in this case, the cost is negligible.

If this is all confusing, then it might be worth reading up on the ASP.NET Lifecycle, since how pages work can be quite strange for those that aren't familiar.

EDIT: Decryptor beat me to it :)

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Since I watch on a lot of devices and use the music service, I enjoy it. Like if I was just on PC then yeah use adblock. But I'm on watching on my phone, iPad, and TV and not always on my WiFi. The price is getting a little nuts at this point though.
    • Happens EVERY TIME a new version of WMP-HC comes out and you download it in the first few days of release. Happens a lot with other program updates that get listed in the software section here as well.
    • Hitman maker's first showcase will reveal its new James Bond game this week by Pulasthi Ariyasinghe IO Interactive is well known for its development of the Hitman series of stealth and assassination games. In a fitting twist, it was revealed back in 2020 that the studio has begun work on a James Bond game, and after years in development, it seems fans are finally getting a look at the project. Announced today, the project now has a title: 007 First Light. The brand-new game will be revealed in an exclusive showcase event. Coming in as the first ever IOI Showcase, it will be held on June 6 at 6pm PDT on the studio's own YouTube channel. "Join us for the first ever IOI SHOWCASE," said the studio in a social media post today. "Set your reminders and don't miss out on the exclusive reveals and information straight from the team!" Aside from 007 First Light information, the showcase will feature new content reveals for Hitman World of Assassination, the IO Interactive-published title MindsEye developed by Build a Rocket Boy, and more. The game is set to follow James Bond in his start as the MI6 special operative that everyone now knows him as. The origin story is said to be inspired by novels of Ian Fleming as well as the movie franchise, but it will be an original narrative by the developer. While we haven't even seen the game in action yet, IO Interactive CEO Hakan Abrak has already said that he hopes the game is successful enough to spawn a trilogy. "I don't want to speak too big about it, but I just hope we'll do a thing that will define James Bond in gaming for years to come," said Abrak last year. "And that is not only one game, but that we create a universe for gamers to own for many years to come that we can grow with that next to the Bond on the movies." While the studio hasn't revealed much more about 007 First Light since its original announcement, it has already been confirmed as coming for the Nintendo Switch 2 console. Other platforms have not been announced just yet, but it should land for PC, Xbox Series X|S, and PlayStation 5 consoles like the studio's other projects.
    • good grief .... first brittney murphy in the first run now him
    • I do not think that Windows 11 will pick up pace as October 2025 draws near. Even though I was a Windows Vista fan back in the day, this really reminds me of the (lack of) transition between Windows XP to Windows Vista. In the end, Microsoft had to backtrack and extend Windows XP support until Windows 7 was adopted.
  • Recent Achievements

    • Week One Done
      Nullun earned a badge
      Week One Done
    • First Post
      sultangris earned a badge
      First Post
    • Reacting Well
      sultangris earned a badge
      Reacting Well
    • First Post
      ClarkB earned a badge
      First Post
    • Week One Done
      Epaminombas earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      160
    2. 2
      ATLien_0
      124
    3. 3
      Xenon
      120
    4. 4
      snowy owl
      109
    5. 5
      +Edouard
      97
  • Tell a friend

    Love Neowin? Tell a friend!