J'essaie donc de passer une chaîne locale à un autre formulaire dans un projet c #. Ceci est mon code:
Formulaire 1:
...
Main frm = new Main();
frm.Passvalue = usrTxt.Text;
frm.ShowDialog();
Formulaire 2
...
public string Username;
public string Passvalue
{
get { return Username; }
}
Je reçois l'erreur:
La propriété ou l'indexeur "Main.Passvalue" ne peut pas être affecté à "-" il est en lecture seule
Je n'ai jamais déclaré quoi que ce soit comme ReadOnly
, quelqu'un sait-il quel est le problème ici?
Il n'a pas de setter, ce qui en fait une propriété en lecture seule, remplacez-le par:
public string Passvalue
{
get { return Username; }
set { Username = value; }
}
Incidemment, cela semble un peu superflu, car vous exposez publiquement Username
de toute façon. Il est généralement considéré comme une bonne pratique de rendre les champs de classe privés.
Si vous voulez pouvoir définir votre propriété, vous devez ajouter un gestionnaire set:
public string Passvalue
{
get { return Username; }
set { Username = value; }
}
Il serait cependant plus facile d'utiliser tout de suite les propriétés implémentées automatiquement:
public string Username
{
get;
set;
}
Votre propriété manque de passeur. Changez le en:
public string Passvalue
{
get { return Username; }
set { Username = value; }
}
Le problème est que vous n'avez qu'un getter pour Form2.Passvalue
, mais pas setter. Ajoutez ceci dans Form2
:
public string Passvalue
{
get { return Username; }
set { Username = value; } // add this setter
}
La propriété n'a pas de passeur.
Voici le code que vous pouvez utiliser pour les getters et les setters à implémentation automatique.
public string Username { get; set; }
public string Passvalue { get; set; }
Ou si vous voulez obtenir et définir la valeur de UserName à partir de Passvalue, vous pouvez utiliser
public string Username { get; set; }
public string Passvalue
{
get { return Username; }
set { Username = value; }
}