J'ai deux formes. Dites de forma j'ai appelé formb en utilisant
frmb.show (); strong> p>
dans FAXB, j'ai deux textes de texte et une commande ComboBox.
Supposez que l'utilisateur entre dans certaines données dans ces deux boîtes de texte et sélectionné un élément de Combobox dans Form2 et cliqué sur un bouton OK STRY>. P>
Après le clic, je souhaite que ces valeurs entrées par l'utilisateur de TextBoxes, la valeur de l'élément sélectionné ComboBox Retour à Comment puis-je atteindre cet utilisation en C #. P>
9 Réponses :
Une solution sale, mais aussi la plus rapide est de rendre ces contrôles publics. Ceci que vous pouvez faire en ajoutant le mot public dans le fichier de form2.decisgner.cs. Si Forma a une variable de membre ou une variable locale de FAXB, vous pouvez accéder à la commande (Dites textebox1) avec: qui est maintenant accessible à l'extérieur de formulaire. P> p>
ne pas avoir avec votre déclaration simple. S'il vous plaît dites-moi avec le code correctement.
Utilisez-vous des formulaires .NET C #? Chaque formulaire se compose d'au moins deux fichiers, supposons que votre formulaire soit défini dans les fichiers Formb.cs et FormB.Designer.cs. Et supposons que vos boîtes de texte soient appelées TextBox1 et Textbox2. Vérifiez à l'intérieur de votre fichier Formb.Designer.cs pour 'System Systemwindows.Forms.TextBox Textbox1;' ou analogique. Remplacez le travail «privé» avec «public». Maintenant, de partout où vous dites 'frmb.show ()', vous pouvez également dire 'frmb.textbox1.text', qui retournera le texte dans la zone de texte à ce moment-là. Par exemple, vous pouvez dire 'chaîne mytext = frmb.textbox1.text'.
Si c'est sur la même page, vous devriez être capable de le lire directement à partir de vos commandes sous forme de textbox1.text, textbox2.text, comboBox.selectedValue (je suppose) Mais si c'est sur des pages différentes, utilisez des variables de session comme: Session ["Date1"] = textbox1.text; Session ["Date2"] = textbox2.text; Session ["Combalance"] = Combobox.selectedValue; et utilisez-les pour peupler votre formulaire p>
Je travaille sur les applications Web complètes C # WinApps non ASP.NET. Puis-je utiliser des variables de session dans Windows?
Que diriez-vous d'utiliser des événements et des délégués? Voir ce http://colinmackay.scot/2005/ 04/22 / Valeurs de passage - entre-formes-in-net / P>
Cela dépendrait de la façon dont vous concevez normalement vos applications. P>
Tout cela fonctionnerait mais tout dépend de la structure de vos applications. P>
Dans le scénario que vous décrivez, j'appellerais probablement Les avantages de Remarque: lors de la conception de FRMB, vous devez définir la propriété frmb.showdialog () code> plutôt que
frmb.show () code>.
showdialog () code> sont-ils: p>
dialogruresult code> de la commande de bouton OK sur
dialogresult.ok code> pour que le formulaire revienne La boîte de dialogue correcte lorsque ce bouton est enfoncé (vous pouvez également définir
this.dialogresult code> dans le gestionnaire d'événements du bouton OK) p> p>
@sukumar: Avez-vous essayé cette solution ou n'est-il pas approprié d'avoir ouvert FRMB comme boîte de dialogue?
@sukumar: Lorsque vous appelez frnb.showdialog (), le thread de forma ne passe pas immédiatement à l'énoncé suivant, mais attend que le FRMB revient avec une dialogue.
ou vous pouvez transmettre un objet de forma à former et lier ses propriétés aux commandes de Formb. Si vous souhaitez que Forma soit notifié lorsque vous cliquez sur le bouton OK, vous pouvez déclarer un événement dans votre classe de conteneur de données, vous abonner à la forma et le tirer à partir de forma.
Soyez datacontainer une classe que vous définissez P>
public DataContainer Data { get; set; } private void Form2_Load(object sender, EventArgs e) { textBox1.DataBindings.Add(new Binding("Text", Data, "Text1")); textBox2.DataBindings.Add(new Binding("Text", Data, "Text2")); } private void button1_Click(object sender, EventArgs e) { Data.AcceptChanges(); }
Semble un code plus complexe. J'ai besoin d'un code simple pour gérer l'exigence
@sukumar: essayez showdialog () :-)
Vous pouvez créer un événementHandler sur FORMB que forma s'abonnera à. En outre, ajoutez quelques propriétés publiques à FAIPB qui représentent que les données que vous souhaitez que forma puissent utiliser. Ensuite, lorsque FORMB incendie l'événement, le forma saura rafraîchir ses données.
Remarque: Le principe clé dans cet exemple est en train de mettre en place un événementHandler (vous pouvez créer votre propre type de gestionnaire d'événements) qui notifie forma lorsque les données sont prêtes à être rafraîchi / vu / etc. Espérons que cet exemple vous permettra de voir comment vous pouvez implémenter un gestionnaire d'événements pour votre situation particulière. P>
exemple: p>
forma - p>
public partial class FormB : Form { //Event that fires when data is available public event EventHandler OnDataAvailable; //Properties that expose FormB's data public string Text1 { get; private set; } public string Text2 { get; private set; } public FormB() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //Set the exposed properties, then fire off the event. this.Text1 = this.textBox1.Text; this.Text2 = this.textBox2.Text; if (OnDataAvailable != null) OnDataAvailable(this, EventArgs.Empty); } }
Merci JED, exemple agréable et propre.
J'ai approché le moyen simple. Petits embellissements ..
Créer des variables publiques dans votre classe de formulaire I.E. P>
String Publics PassVariable1 = ""; p> blockQuote> li>
Si vous avez des boîtes de texte, accédez à des propriétés, cliquez sur le boulon de foudre et double-cliquez sur l'événement Evénement Textchanged vide. Cela créera un extrait de code dans le code Begind qui est exécuté lorsque le contenu de la zone de texte a changé. Dans ce bloc de code attribue le contenu de la zone de texte à votre variable publique correspondante. P> LI>
I.e. ma variable publique était p>
problème de chaîne publique = ""; p>
vide privé TXTISTISUE_TEXTCHANGED (expéditeur d'objet, evenargs e) { numéro = txtuse.text; } p> blockQuote> li>
Ajoutez un bouton et créez un événement de clic pour ce bouton (double-cliquez simplement sur le bouton du volet de conception). Dans le bloc d'événement de clic, définissez le résultat du dilogue sur OK et cachez le P>
this.dialogresult = dialogresult.ok; p>
this.hide (); p> blockQuote> li>
Dans le code de fenêtre parent Vérifiez sur le résultat de la boîte de dialogue et saisissez les données de formulaire des variables publiques de la forme enfant p> li> ol>
if (f.ShowDialog() == DialogResult.OK) { string b = f.issue; string e = f.year; string f = f.month; };
J'avais le même problème et j'ai eu une idée qui est un peu différente. Dans mon scénario, je fais un programme FlashCard pour mes deux plus jeunes enfants et je voulais pouvoir reporter la réponse fournie à la forme parent (nouveau formulaire enfant pour chaque nouvelle question FlashCard afin que le formulaire parent puisse mettre à jour le nombre de GAUCHE, combien de corrects, combien d'erreurs, etc.) sans avoir à ajouter des valeurs à une base de données. Semble être surchargé pour quelque chose qui devrait être simple. Ce que j'ai fait était de créer une classe avec 3 de chaque type de variable. Je pensais que trois de chaque type seraient suffisants pour la plupart des travaux.
Ceci est un exemple de ma nouvelle classe: p> i Créez une nouvelle valeur de valeur (Ville titulaire VH;) de la forme parent et transmettez-la à la forme de l'enfant. Dans le formulaire enfant, je crée une nouvelle porte-valeurs, puis définissez-la égale à l'objet titulaire de la valeur envoyé dans le constructeur de classe de la forme enfant. Maintenant, lorsque la touche Entrée est enfoncée (réponse donnée), je peux définir VH.IntValue1 égal à ceci.Swerbox.text; ... Eh bien, je dois utiliser Int.tryparse (); Mais vous avez l'idée. Je n'ai alors besoin que de référencer VH.IntValue1 à partir du formulaire parent pour obtenir la valeur saisie. P> Formulaire parent: P> ValueHolder vh;
public ChildClass (ValueHolder vhIncoming)
{
vh = vhIncoming;
}
private void answerBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
vh.intValue1 = 1234;
}
}
Pouvez-vous vérifier vos tags? Est-ce vraiment une question spécifique C # -4? De plus, vos formulaires sont-ils des winforms? Merci
Oui. S'il y a une meilleure solution dans 4.0 c'est bien et bon à savoir.
Comment obtenir le contrôle (point d'exécution de l'exécution) du formulaire aux formulaires.
Avez-vous essayé d'ouvrir le formulaire à l'aide de Showdialog (). Vous avez ignoré cette réponse même après avoir été avancé. Il serait utile que vous puissiez fournir le raisonnement pour la raison pour laquelle cette solution - à votre avis - est insuffisante.