Ονειρολογίτης Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Γεια σας ! Γραφω ενα προγραμμα στην C#, κι εχω το εξης προβλημα. Θελω να κανω Get απο μια φορμα(Form1) το text απο ενα textBox, και να το μεταφερω σε ενα string σε μια αλλη φορμα(Form2). Αυτο που προσπαθησα ειναι να κανω μια μεθοδο Get στην Form1: public string GetTextBoxText() { return textBox1.Text; } και να την καλεσω με αυτο τον κωδικα στην Form2: Form1 frm = new Form1(); frm.GetTextBoxText() Το θεμα ειναι οτι δεν δουλευει. Μου γυρναει πισω ενα κενο string. Καμια ιδεα τι να κανω ??
Tmark Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Στην Form1: class Form1 { public string GetTextBoxText { get { return textBox1.Text; } } } Στην Form2: var frm1 = new Form1(); string textBox1Form1Value = frm1.GetTextBoxText; 1
albNik Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Εφοσον δεν εμφανιζεις καν την Form1 για να τη συμπληρώσει ο χρήστης ποια τιμή θες να εχει η GetTextBox(). Form1 frm = new Form1(); if(frm.ShowDialog() == DialogResult.Ok) myStr = frm.GetTextBoxText(); 1
Ονειρολογίτης Δημοσ. 11 Μαΐου 2016 Μέλος Δημοσ. 11 Μαΐου 2016 Στην Form1: class Form1 { public string GetTextBoxText { get { return textBox1.Text; } } } Στην Form2: var frm1 = new Form1(); string textBox1Form1Value = frm1.GetTextBoxText; Δυστηχως. Συνεχιζω να μην περνω την τιμη. Δες μερικες φωτογραφιες μπας και δεις τι φταιει: http://prntscr.com/b2s3l2 http://prntscr.com/b2s3y3 Εφοσον δεν εμφανιζεις καν την Form1 για να τη συμπληρώσει ο χρήστης ποια τιμή θες να εχει η GetTextBox(). Form1 frm = new Form1(); if(frm.ShowDialog() == DialogResult.Ok) myStr = frm.GetTextBoxText(); Ποιος ειπε οτι δεν εμφανιζω την Form1 ??
albNik Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Ποιος ειπε οτι δεν εμφανιζω την Form1 ?? H Form1 είναι class και καθε instance εχει τα δικα της data. Το συγκεκριμένο instance της Form1 (το frm) ΔΕΝ το εμφανιζεις. Καποια άλλη μεταβλητή τυπου Form1 εμφανίζεις με Show(), ShowDialog() ή Application.Run(). 1
παπι Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Φτιαχνεις την φορμουλα βου. Αυτη που ζηταει απο τον χρηστη καποια δεδομενα και τα επιστρεφει στο.. οπου θες. namespace TestForm { public partial class AddString : Form { public AddString() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Close(); } public static string ShowDialogGetString() { var form = new AddString(); form.ShowDialog(); return form.textBox1.Text; } } } το button1 ειναι ας πουμε το οκ, το οποιο απλα κλεινει την φορμα. βαζεις και μια static ShowDialogGetString οπου φτιαχνεις ενα instance το δειχνεις με ShowDialog και περιμενεις να γινει close, τοτε επιστρεφεις το αποτελεσμα. στη φορμουλα α, απλα καλεις την static method namespace TestForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { label1.Text = AddString.ShowDialogGetString(); } } } 1
Ονειρολογίτης Δημοσ. 11 Μαΐου 2016 Μέλος Δημοσ. 11 Μαΐου 2016 H Form1 είναι class και καθε instance εχει τα δικα της data. Το συγκεκριμένο instance της Form1 (το frm) ΔΕΝ το εμφανιζεις. Καποια άλλη μεταβλητή τυπου Form1 εμφανίζεις με Show(), ShowDialog() ή Application.Run(). Επιδη δεν το διχνω στον αρχικο κωδικα, δεν σημαινει οτι δεν την εμφανιζω. Καταρχας δεν ειναι ετσι ο κωδικας μου. Ποτε δεν θα αφηνα μια φορμα με το default ονομα. Δηλαδη Form1,Form2 κ.τ.λ. Απλα για να μην σας μπερδεψω ειπα να βαλω τα default. Οσο για την Form1 δεν χρειαζετε να την εμφανισω με καποια εντολη, γιατι ειναι ανοιχτη απο την αρχη του προγραμματος, και δεν κλεινει σχεδον ποτε. Φτιαχνεις την φορμουλα βου. Αυτη που ζηταει απο τον χρηστη καποια δεδομενα και τα επιστρεφει στο.. οπου θες. namespace TestForm { public partial class AddString : Form { public AddString() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Close(); } public static string ShowDialogGetString() { var form = new AddString(); form.ShowDialog(); return form.textBox1.Text; } } } το button1 ειναι ας πουμε το οκ, το οποιο απλα κλεινει την φορμα. βαζεις και μια static ShowDialogGetString οπου φτιαχνεις ενα instance το δειχνεις με ShowDialog και περιμενεις να γινει close, τοτε επιστρεφεις το αποτελεσμα. στη φορμουλα α, απλα καλεις την static method namespace TestForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { label1.Text = AddString.ShowDialogGetString(); } } } Δουλευω σημερα απο το πρωι, και κανω παραλληλες δουλειες, οποτε συγχωρεσε με αν κανω λαθος, αλλα εμενα δεν μου φαινεται να διχνεις κατι πολυ διαφορετικο απο τον Tmark. Απλα εχεις αλλαξει τον κωδικα, + του οτι εχεις προσθεσει ενα .Show() property στην βου. Απο κει και περα κανει ακριβως το ιδιο.
albNik Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Επιδη δεν το διχνω στον αρχικο κωδικα, δεν σημαινει οτι δεν την εμφανιζω. Καταρχας δεν ειναι ετσι ο κωδικας μου. Ποτε δεν θα αφηνα μια φορμα με το default ονομα. Δηλαδη Form1,Form2 κ.τ.λ. Απλα για να μην σας μπερδεψω ειπα να βαλω τα default. Οσο για την Form1 δεν χρειαζετε να την εμφανισω με καποια εντολη, γιατι ειναι ανοιχτη απο την αρχη του προγραμματος, και δεν κλεινει σχεδον ποτε. Τότε είτε το textbox είναι άδειο είτε δεν ζητάς το text της ανοιχτής σου φόρμας. 1
geo1st487 Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Επειδη δεν εχω πολυ χρονο κατι στα γρηγορα. Κανε πρωτα τα TextBoxes στη form2 τα Modifiers (απο τα properties) internal. public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.ShowDialog(); label1.Text = frm.textBox1.Text; label2.Text = frm.textBox2.Text; } } 1
M2000 Δημοσ. 11 Μαΐου 2016 Δημοσ. 11 Μαΐου 2016 Το ζήτημα είναι αν η φόρμα άλφα γράφει στη βήτα, θα πρέπει να έχει ενημερωθεί αν η βήτα είναι φορτωμένη (είναι αδιάφορο αν φαίνεται ή όχι). Που σημαίνει ότι αν η βήτα κλείσει...η άλφα δεν μπορεί να αλλάζει το textbox του βήτα. Άρα χρειάζεται να πάρουμε ένα μήνυμα ότι έκλεισε η βήτα και να αλλάξουμε μια "γενική" μεταβλητή η οποία θα απαγορεύει στην άλφα να γράφει στην βήτα. ένα παράδειγμα έγραψα στην Site: Μ2000 - άσχετο με την c# αλλά σχετικό με την ιδέα. 1
Ονειρολογίτης Δημοσ. 12 Μαΐου 2016 Μέλος Δημοσ. 12 Μαΐου 2016 Τότε είτε το textbox είναι άδειο είτε δεν ζητάς το text της ανοιχτής σου φόρμας. Αδειο δεν ειναι. Δεν γινετε να ειναι αδειο γιατι για να ανοιξει η δευτερη φορμα(Αυτη που δεχεται το string απο την φορμα1) πρεπει το text length να ειναι πανω απο 4. Επειδη δεν εχω πολυ χρονο κατι στα γρηγορα. Κανε πρωτα τα TextBoxes στη form2 τα Modifiers (απο τα properties) internal. public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.ShowDialog(); label1.Text = frm.textBox1.Text; label2.Text = frm.textBox2.Text; } } Φιλος λες ακριβως τα ιδια με τα παιδια ποιο πανω. Απλα δεν εβαλες το form show. Τα αλλαξα τα modifiers σε internal(απο private) αλλα τιποτα.... Το ζήτημα είναι αν η φόρμα άλφα γράφει στη βήτα, θα πρέπει να έχει ενημερωθεί αν η βήτα είναι φορτωμένη (είναι αδιάφορο αν φαίνεται ή όχι). Που σημαίνει ότι αν η βήτα κλείσει...η άλφα δεν μπορεί να αλλάζει το textbox του βήτα. Άρα χρειάζεται να πάρουμε ένα μήνυμα ότι έκλεισε η βήτα και να αλλάξουμε μια "γενική" μεταβλητή η οποία θα απαγορεύει στην άλφα να γράφει στην βήτα. ένα παράδειγμα έγραψα στην Site: Μ2000 - άσχετο με την c# αλλά σχετικό με την ιδέα. Αν καταλαβα καλα, τον "ελεγχο" που λες τον κανω ουτως η αλλος. Οταν προσπαθσω να παρω απο την form1 το TextBox.Text και να το παω σε string στην form2, και οι 2 φορμες ειναι ανοιχτες. Επιβαλεται δηλαδη. Δενγινετε να εχεις την form2 ανοιχτη, και να μην ειναι η form1. Βεβαια, ολα τα "objects" στην form1 τα κανω disable οταν ανοιγει η form2, κι αυτο για να μην γινουν αλλαγες στο textBox στην form1 οταν περασω το text του στο string στην form2. Ουφ.... δεν φτιαχνω βιντεο καλυτερα για να το εξηγισω !!! Παντως παιδια αν δεν βρεθει λυση, μαλλον θα περναω τα string με streamwriter ! Θα φτιαχνω temp files !! Χαχαχαχαχαχα
M2000 Δημοσ. 12 Μαΐου 2016 Δημοσ. 12 Μαΐου 2016 Δηλαδή θες να ανοίξεις modal φόρμα πάνω από φόρμα και να "ενημερώνεται" η φόρμα από κάτω. δες εδώ:΅http://stackoverflow.com/questions/2503079/how-do-i-make-a-form-modal-in-windows-forms Λέει ότι πρέπει να χρησιμοποιήσεις το showdialog() για να είναι Modal η φόρμα σου (άρα δεν κάνεις τίποτα disable, το κάνει αυτόματα το σύστημα - το έχω φτιάξει και στη Μ2000 και μάλιστα με πολλαπλό modal, να ανοίγεις πολλές φόρμες η μία πάνω από την άλλη. ουσιαστικά γίνεται disable η φόρμα, όχι τα controls στην φόρμα, που σημαίνει ότι ανανεώνονται, αλλά δεν στέλνουν events). Για να φορτώσεις την Form2 Θα πρέπει να το κάνεις στο Load Event.. (μια φόρμα μπορεί να φορτωθεί με ότι θες πριν την δείξουμε, αλλά ο τρόπος που την δείχνουμε καθορίζει αν θα είναι Modal η όχι) 1
albNik Δημοσ. 12 Μαΐου 2016 Δημοσ. 12 Μαΐου 2016 Στο OtherTextBox της Form2 θα εχει το κείμενο που εχει το textBox της Form1 private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.OtherTextBox.Text = textBox1.Text frm.ShowDialog(); } 2
M2000 Δημοσ. 12 Μαΐου 2016 Δημοσ. 12 Μαΐου 2016 Α! μπράβο...Η φόρμα φορτώνεται με το που ορίζουμε την frm, μετά γράφουμε αυτό που θέλουμε και ανοίγουμε με Modal τρόπο. 1
Ονειρολογίτης Δημοσ. 12 Μαΐου 2016 Μέλος Δημοσ. 12 Μαΐου 2016 Δηλαδή θες να ανοίξεις modal φόρμα πάνω από φόρμα και να "ενημερώνεται" η φόρμα από κάτω. δες εδώ:΅http://stackoverflow.com/questions/2503079/how-do-i-make-a-form-modal-in-windows-forms Λέει ότι πρέπει να χρησιμοποιήσεις το showdialog() για να είναι Modal η φόρμα σου (άρα δεν κάνεις τίποτα disable, το κάνει αυτόματα το σύστημα - το έχω φτιάξει και στη Μ2000 και μάλιστα με πολλαπλό modal, να ανοίγεις πολλές φόρμες η μία πάνω από την άλλη. ουσιαστικά γίνεται disable η φόρμα, όχι τα controls στην φόρμα, που σημαίνει ότι ανανεώνονται, αλλά δεν στέλνουν events). Για να φορτώσεις την Form2 Θα πρέπει να το κάνεις στο Load Event.. (μια φόρμα μπορεί να φορτωθεί με ότι θες πριν την δείξουμε, αλλά ο τρόπος που την δείχνουμε καθορίζει αν θα είναι Modal η όχι) Ωραιος. Τον modal τροπο δεν τον ηξερα... Στο OtherTextBox της Form2 θα εχει το κείμενο που εχει το textBox της Form1 private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.OtherTextBox.Text = textBox1.Text frm.ShowDialog(); } Ναι, αυτο θα ηταν ετσι αν ηθελα να περασω ενα κειμενο απο textBox στην Form1 σε ενα αλλο textBox στην Form2. Εγω θελω ομως το κειμενο στο textBox να μπει σε string στην Form2. Σε textBox τι να το κανω ? Δεν μου χρειαζεται για τον σκοπο μου.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα