2017-05-22 2 views
0

Comment puis-je stocker le voterid dans une variable globale afin que je puisse l'utiliser dans un autre formulaire? Je vais utiliser ce voterid afin de vérifier si l'électeur a déjà voté.comment stocker dans une variable globale C#

MessageBox.Show("Welcome!"); 
OleDbCommand comd1 = new OleDbCommand(); 
comd1.Connection = connection; 
comd1.CommandText = "SELECT VoterID FROM tbl_voter where Uname='" + 
        txt_user.Text + "' and Pword='" + txt_pass.Text + "'"; 
voterid = Convert.ToString(comd1.ExecuteScalar()); 
MessageBox.Show(voterid); 

connection.Close(); 
connection.Dispose(); 

this.Hide(); 
vote form3 = new vote(); 
form3.ShowDialog(); 
+0

Vous pouvez créer une propriété 'public static' dans la classe que vous traitez. Ensuite, à partir de l'autre forme, vous référeriez 'whateverclass.whateverproperty'. Ce n'est pas un grand design OO cependant. Une meilleure solution serait de transmettre l'information à l'autre forme elle-même ou au moins quelque chose à dire à l'autre d'où obtenir l'information. La solution de propriété statique crée ce qu'on appelle une situation «étroitement couplée» et est généralement désapprouvée. – itsme86

+0

Très vaste question avec de nombreuses solutions. Vous pourriez regarder dans des classes/méthodes statiques pour quelques exemples. –

+0

@ itsme86 merci beaucoup! – Theodore

Répondre

1

Si nous parlons d'une application Windows Forms, et par « global » vous voulez dire « commune à travers le processus », vous pouvez alors utiliser un static variable.

Dans cet exemple, je crée une classe spéciale juste pour contenir des variables statiques, et déclare un champ et une propriété qui sera disponible pour votre programme et qui contiendra une et une seule valeur à travers le processus entier.

static class GlobalVariables 
{ 
    static public string SomeVariable { get; set ; } //As a property 
    static public string SomeOtherVariable;   //As a field 
} 

Notez que si votre programme est multi-thread, il peut être une bonne idée de mettre une section critique autour des variables statiques, comme ceci:

static class GlobalVariables 
{ 
    static private string LockObject = new Object(); 
    static private string _someVariable; 

    static public string SomeVariable 
    { 
     get 
     { 
      lock(LockObject) { return _someVariable; } 
     } 
     set 
     { 
      lock(LockObject) { _someVariable = value; } 
     } 
    } 
} 
+0

Est-ce que chaque membre ne devrait pas avoir le mot-clé static? –

+0

Man vous les gars sont si rapides, j'étais encore au milieu de la dactylographie! Oui tu as raison. –

+0

Mauvaise commande si! –

0

état d'application appartient à l'application objet d'état . Les applications WinForms n'en possèdent pas, mais vous pouvez créer une classe AppState et placer une instance dans une propriété statique de la classe Program. Vous pouvez ensuite définir quel que soit l'état global que vous aimez comme des propriétés de type AppState et les référencer depuis n'importe quel point de votre programme.

Vous pouvez ensuite placer la logique (de) sérialisation dans la classe AppState si vous devez conserver l'état de l'application .

+0

Je ne suis pas sûr que toutes les variables globales doivent être conçues pour faire partie de l'état de l'application. –

+0

Je suis. Les variables tiennent l'état, c'est tout ce qu'elles font. Si ce n'est pas _global_ state alors pourquoi est-ce dans une variable globale? N'hésitez pas à proposer un contre-exemple si vous en pensez. –

+0

Merci à tous les gars, j'apprécie vraiment votre aide! – Theodore