La transmission de valeurs entre une classe et une forme
Je suis assez novice en C# -, mais tout s'est bien passé à ce point.
Je commence avec une forme et une classe qui n'a plus de travail (non statique et dans la partie de programme). J'instancie un objet de la classe dans le formulaire 1 et faire un journal dans.
Puis-je passer à la prochaine formulaire form2. En fait, la classe n'a que. J'ai une méthode, qui contient la ligne:
this.f2 = new Form2();
et puis:
f2.Show();
f2 est un membre de la classe du type de Form2 - le tout fonctionne très bien jusqu'à ce point.
Ce Form2 se compose d'une grande zone de texte dans laquelle je veux afficher des événements de réseau. Le gestionnaire d'événement fonctionne très bien - mais la référence à la forme ne semble tout simplement pas de travail. Si je ne
f2.tetBox1.Text = "Some text";
il ne peut pas modifier le texte dans la zone de texte.
Ce que je fais mal ici?
Voici une description plus détaillée de ce que je fais:
Form1
passe quelques informations de connexion à myProg
, étant une instance de MyClass
. Si la connexion a réussi, Form1 appels myProg.makeForm();
C'est ce que la méthode de MyClass ressemble:
public void makeForm() {
this.f2 = new Form2();
f2.Show();
this.sendString("start f2");
}
C'est MyClass.sendString()
:
private void sendString(string text) {
SystemSounds.Beep.Play();
this.f2.setTextBox(text);
}
De ces appels, comme vous le voyez, setTextBox()
de Form2
- dont j'ai mis en place, comme proposé ici. La chose étrange est, que jusqu'à ce moment, tout fonctionne bien. La Form2 obtient montré un textBox1 contient "démarrer f2" - comme prévu. Mais lorsqu'un événement arrive, le texte dans textBox1 ne change pas. le bip obtenir joué tous les droit - de sorte que la méthode sendString() est appelée bien.
Une chose que j'ai observé: Si le bip est posé après l'appel à this.f2.setTextBox(text);
, il n'est pas joué si la méthode est appelée par le gestionnaire d'événements.
f2
, btw., est un membre privé de MyClass
:
private Form2 f2;
- Qu'entendez-vous par
doesn't seem to work
. Est-il compiler? Pensez-vous réellement obtenir un message d'erreur? EsttetBox1
un membre du public deform2
? - S'il vous plaît montrer le code, mais pas de vidage de deux formes'
.cs
fichiers. - double possible de le partage de données entre les formulaires
- Pour ton edit: ce qui est le gestionnaire d'événement que vous vous abonnant à? Si ce n'est pas déclenché dans le thread de l'INTERFACE utilisateur, alors c'est votre problème.
- Le gestionnaire d'événement fait partie d'une bibliothèque que j'utilise (openmetaverse). Je ne comprends pas tout ce que vous dites ici. Tout se passe dans MyClass et le gestionnaire d'événement appelle la fonction - il émet un bip.
Vous devez vous connecter pour publier un commentaire.
Tout contrôle créé par le concepteur (par exemple, a chuté à partir de la boîte à outils au moment de la conception) est automatiquement défini comme privé. Par conséquent, vous ne pouvez pas y accéder à partir d'un autre formulaire.
Vous ne voulez pas commencer à jouer avec le designer, au lieu de créer une propriété sur votre
Form2
qui vous permettra de modifier le texte de la Textbox deForm1
.Un court exemple est quelque chose comme ceci:
Form2:
Puis, dans Form1:
Text
. Tout d'abord,Control
a déjà unText
bien ce serait de l'ombre, et c'est...pas souhaitable, et dans tous les cas, il doit juste être le plus descriptif à ce que le texte représente. (Évidemment, seul l'OP sait ce qui est dans son cas).Par défaut d'une zone de texte est privée lorsque vous passez par le concepteur, ce qui signifie que vous ne pouvez pas accéder à textBox1 de l'extérieur de Form2 (c'est seulement "visible" pour le code au sein de la classe Form2). Vous pourrait modifier la zone de texte pour être interne ou public (qui vous permettent d'effectuer les opérations suivantes (à partir de Form1):
MAIS qui serait d'exposer les pièces de Form2 qui seulement Form2 doit vraiment connaître...donc ce n'est pas la solution la plus propre (même si ce serait probablement le moyen le plus rapide))
Une meilleure solution pourrait être de créer une méthode ou d'une propriété (interne ou public) dans Form2 qui donnera de la valeur de texte. E. g.:
Que la méthode (ou des biens) réside dans la Form2, il a accès à la zone de texte, il peut définir la valeur tout en textBox1 est encore privé.
Il est plus sûr d'exposer cette méthode de "externes" code (par opposition à la prise de la zone de texte visible) que tout ce qu'ils peuvent faire est de changer le texte tandis que d'exposer l'ensemble de la zone de texte pourrait permettre aux appelants d'essayer de changer la couleur de fond, etc.