C# Windows App - "Global" shared variable

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sap0321
    New Member
    • May 2008
    • 1

    C# Windows App - "Global" shared variable

    This should be kindergarten stuff but for some reason I am having trouble with it. I do 99.9% web programming and this is the first windows app i've done in years - probably the first ever in C# ... anyway ...



    Here is what I am trying to do .... Windows app - with a main "navigation " form with 4 linkbuttons on it - each of them open a child form with a task to perform ... on the main form, there is a Label control for the "Active Customer" ... meaning their name and customer ID to display - showing the user which customer they are working with .... It is a sequential process - so when the user opens child form 1 - they fill out a small info page, then a customer ID is generated and I want to be able to store the customer's name in a variable and their customer id in another variable - and be able to access those values from every form in the application until either a new customer is generated overwriting the values - or the user closes the application then it can be lost in memory - or i guess ideally it would be nice to store that somewhere on the user's pc to pull up later - but that's beyond what's needed i guess ...



    I am OK with either of these solutions -

    A) when the ID is generated, populate the Label controls on the main form for Customer Name and Customer ID, which I can then reference throughout the life of the application from all other forms

    B) store the 2 values in "global variables" which everything within the application can read/write to when needed



    Here is what I first came up with - but for some reason I cannot get it to:

    A) keep the stored value once the form that populates it is closed

    B) get the main form to refresh itself and change the Label control values with these values - even when sent directly to it



    Attempt 1:

    I put this in a .cs file in the project
    Code:
    namespace CustomerApp
    
    {
    
         class Cust_Vals
    
         {
    
             public static class ActiveID
    
             {
    
                     private static string str_aid = "";
    
                     
    
                     public static string aid
    
                     {
    
                         get { return str_aid; }
    
                         set { str_aid = value; }
    
                     }
    
             }
    
            public string aid = "";
    
    
    
            public static class ActiveName
    
            {
    
                private static string str_aname = "";
    
               
    
                public static string aname
    
                {
    
                     get { return str_aname; }
    
                     set { str_aname = value; }
    
                }
    
            }
    
            public string aname = "";
    
        }
    
    }

    I set it like this in one form:
    Code:
    Cust_Vals cv = new Cust_Vals();
    
    cv.aname = "x";
    
    cv.aid = "12345";

    Then later try to retrieve it like this from a different form:
    Code:
    Cust_Vals cv = new Cust_Vals();
    
    lblCustomerName.Text = cv.aname;
    
    lblCustomerID.Text = cv.aid;

    When I do so, the values come back blank ... again, I'm sure I'm just doing something incorrectly - it's been a while since I've worked with windows forms and applications ...



    Attempt 2:

    I created a method in my main form to populate the Labels and allow the 2 values to be passed in, then made it public so I can call it from another form ... this works fine, I can step through and see the values come in correctly - but my main form never changes the values visually - I've tried doing a .Refresh() or .Invalidate() .... even tried hiding the form, calling the function, then showing the form with a .Refresh() attached and still - blank Label controls ...


    Code:
    public void ActivateCustomer(string Cust, string ID)
    
    {
    
         lblCustomerName.Text = Cust; 
    
         lblCustomerID.Text = ID;
    
         this.Refresh();
    
    }
    I call it from a different form like this:
    Code:
    frmMain frm = new frmMain();
    
    frm.ActivateCustomer("x", "1");

    The values pass correctly, but the Labels on the form never update ....



    Any help would be greatly appreciated - thanks so much - I know this is probably something stupid!
    Last edited by Plater; May 6 '08, 01:48 PM. Reason: added CODE tags
  • Plater
    Recognized Expert Expert
    • Apr 2007
    • 7872

    #2
    I like to create a public static class (no constructors) to hold various data (and functions) for my projects.

    For example:
    Code:
    public static class GlobalVars
    {
       public static int ClientID=-1;//start out with "no" clientID
       public static string ClientName=""//start out empty
    
    }
    You would reference that anywhere you wanted with:
    Code:
    GlobalVars.ClientName="Jan's Hotdog Stand";
    or
    Code:
    string myClientName=GlobalVars.ClientName;

    Now you can expand upon this idea and create a static class for all your Client-related functions.

    I have a static class called "DBFunction s" in many projects that contains any/all functions that make calls to my database. (that's just an example)

    Comment

    Working...