Ne peut pas changer de zone de texte.texte en forme à partir d'autres classes - C# - VS 2010
J'ai un formulaire Form1. J'ai un bouton appelé le Chiffrer. Quand j'appuie sur ce bouton, j'ai appeler une méthode dans une classe différente. Je veux que la méthode pour modifier la valeur de textBox1.le texte, mais rien ne se passe lorsque j'utilise ce code
dans la classe Form1
public string txtbox1
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
dans une méthode dans l'autre classe
Form1 textboxes = new Form1();//creating object of the Form1 class
textboxes.txtbox1= "whatever";
Rien ne change dans la première zone de texte. C'est comme si je n'appuyez pas sur du tout!!!
Toute aide serait très appréciée
Quelle est la définition de la méthode que vous appelez?
OriginalL'auteur RonaDona | 2012-10-14
Vous devez vous connecter pour publier un commentaire.
Dans votre classe, vous avez besoin d'une référence à la Forme sur laquelle le bouton a été cliqué (et que votre texte existant-boîtes), pas un nouveau forme.
Cette nouvelle forme, vous êtes l'instanciation n'est pas celle que vous voyez sur l'écran où vous avez cliqué sur le bouton.
(Je suis en supposant que votre gestionnaire d'événement existe au sein de la classe Form1, et qu'il alors "en avant" de l'information aux autres de la classe de la méthode comme il se doit? Si non... il en faut!)
Le bouton de référence pourra être obtenu par le biais de la
sender
objet et leevent args
passé à votre gestionnaire d'événement. Vous pouvez passer une référence à l'actuelForm1
exemple par l'adoption de lathis
mot-clé pour votre autres de la classe de la méthode. Ou vous pouvez passer lesender
si c'est utile pour vous, ou juste passer une référence explicite à la zone de texte spécifique à votre autre méthode.par exemple, pour passer d'une référence à la forme de votre autre méthode:
par exemple, pour passer d'une référence explicite à la zone de texte à votre autre méthode:
par exemple, pour passer de l'objet d'événement pour votre autre méthode:
Aussi, s'en tenir à un point de rupture sur votre "autre méthode" pour assurer ce code est encore en cours de licenciement. Si non, retournez à votre gestionnaire d'événements, de s'assurer que du feu. Si non, vérifiez votre événement de fil.
Bien que dans tous les cas, vous devez être prudent sur le niveau de protection sur le contrôle que vous souhaitez mettre à jour... vous aurez besoin de le rendre public, interne, ou protégé en fonction de la relation entre votre formulaire et les autres de la classe, si vous voulez le mettre à jour à partir de l'extérieur de votre
Form1
classe.Une meilleure OO approche serait de disposer d'une méthode sur
Form1
qui permet à d'autres classes ditesForm1
de mettre à jour le contrôle pour eux (par exempleupdateTextBox(string newText)
). Parce que ce n'est pas OO meilleures pratiques permettent d'objets extérieurs agissent sur les membres de votre classe directement (ce qui nécessite la connaissance de la structure interne de votre classe... ce qui devrait être encapsulé, de sorte que votre application peut changer sans rupture de l'interface qui existe entre votre classe et le monde extérieur).EDIT:
En fait, sur la re-lecture de votre question, vous n'avez déjà encapsuler vos zones de texte à l'aide de get/set propriétés. Nice. Donc, vous devriez passer la référence de votre Formulaire à votre autre méthode, puis mettre à jour le texte du formulaire via la propriété. Ont ajouté cette méthode pour les exemples ci-dessus.
mon plaisir. Ont ajouté quelques exemples. Tiré de l'extérieur de ma tête ne peut donc pas se porter garant de la syntaxe... mais vous obtenez l'idée qu'il y a quelques différentes façons de la peau du chat 😉 il suffit de choisir celui qui fait le plus de sens pour vous en fonction de la façon dont vous devez utiliser l'information dans l'autre classe.
La légende!!! J'ai utilisé la première. Travaillé et je suis passer à l'étape suivante après l'obtention coincé pour un couple d'heures. Merci beaucoup encore une fois. J'ai vraiment l'apprécier.
Salut à nouveau, réalisé vous avais déjà encapsulé vos zones de texte avec les propriétés, ont donc ajouté un peu plus d'info pour les exemples, que vous devriez vraiment utiliser ce mécanisme à la place. Vous êtes les bienvenus, et merci pour l'acceptation.
OriginalL'auteur Sepster
J'ai trouvé un moyen facile de le faire.
D'abord de Créer une zone de texte dans votre Classe
Il y a un bouton(button1) et une zone de texte(textBox1) dans form1.
ok,maintenant de Copier l'adresse de Votre choix zone de texte Doit être changé
Je l'ai testé,il fonctionne correctement
OriginalL'auteur Arash Mohamadzadeh
Aussi, ce niveau de protection est la classe Form1? C'est là que j'ai souvent des questions... j'oublie que si la classe n'est pas publique, il ne peut être accédé par les classes en dehors d'elle. "Protégés" pourrait également être utile, mais cela dépend de la relation entre les deux classes.
Form
s sont explicitement défini commepublic
(au moins, dans Visual Studio a généré code, qu'ils sont). Ce qui est différent declass
es en général, dont les niveaux de protection ne sont pas explicitement déclarées (automatiquement par VS) et sont donc implicitementinternal
pour onu-classes imbriquées, ouprivate
si la classe est imbriquée dans une autre classe. Mais si aucun modificateur d'accès est explicitement appliqué, puis une classe héritant deForm
va se comporter comme tous les autres de la classe.OriginalL'auteur Jason M. Batchelor
j'ai trouvé dans des situations comme ce passage de l'information à partir de 1 forme à une autre est d'organiser les informations dans un fichier de classe non pas sur la forme de son auto
exemple
Formulaire 1:
puis tout ce que je voudrais faire est sur le 2ème forme appelez simplement sur form_load
de cette façon, vous pouvez appeler le dos de la masse quantités d'informations qu'ils vont tous être stockés à l'intérieur de la classe, et non pas l'physiques, la forme elle-même
dependants
est instancié en tant que membre decustomerHistory:Form
, de sorte que vous ne pouvez pas accéder àdependants
indépendamment decustomerHistory
de toute façon. Vouliez-vous dire pour instancier cette nouvelle classe en tant que pair àcustomerHistory
?OriginalL'auteur Dualz
Vous pouvez également le faire par la création d'événements dans votre classe et votre forme s'abonner à cet événement et transmettre les données à jour de l'INTERFACE utilisateur comme
EventArgs
...OriginalL'auteur dotNETbeginner