Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας ! Γραφω ενα προγραμμα στην C#, κι εχω το εξης προβλημα. Θελω να κανω Get απο μια φορμα(Form1) το text απο ενα textBox, και να το μεταφερω σε ενα string σε μια αλλη φορμα(Form2).

 

Αυτο που προσπαθησα ειναι να κανω μια μεθοδο Get στην Form1:

public string GetTextBoxText()
{
return textBox1.Text;
}

και να την καλεσω με αυτο τον κωδικα στην Form2:

Form1 frm = new Form1();

frm.GetTextBoxText()

Το θεμα ειναι οτι δεν δουλευει. Μου γυρναει πισω ενα κενο string. Καμια ιδεα τι να κανω ??

Δημοσ.

Στην Form1:

class Form1 
{
    public string GetTextBoxText
    {
        get { return textBox1.Text; }
    }
}

Στην Form2:

var frm1 = new Form1();
string textBox1Form1Value = frm1.GetTextBoxText;
  • Like 1
Δημοσ.

Εφοσον δεν εμφανιζεις καν την Form1 για να τη συμπληρώσει ο χρήστης ποια τιμή θες να εχει η GetTextBox().

Form1 frm = new Form1();
if(frm.ShowDialog() == DialogResult.Ok)
  myStr = frm.GetTextBoxText();
  • Like 1
Δημοσ.

 

Στην 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 ??

Δημοσ.

Ποιος ειπε οτι δεν εμφανιζω την Form1 ??

 

H Form1 είναι class και καθε instance εχει τα δικα της data.

Το συγκεκριμένο instance της Form1 (το frm) ΔΕΝ το εμφανιζεις.

 

Καποια άλλη μεταβλητή τυπου Form1 εμφανίζεις με Show(), ShowDialog() ή Application.Run().

  • Like 1
Δημοσ.

Φτιαχνεις την φορμουλα βου. Αυτη που ζηταει απο τον χρηστη καποια δεδομενα και τα επιστρεφει στο.. οπου θες.

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();
        }
    }
}

  • Like 1
Δημοσ.

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 στην βου. Απο κει και περα κανει ακριβως το ιδιο.

Δημοσ.

Επιδη δεν το διχνω στον αρχικο κωδικα, δεν σημαινει οτι δεν την εμφανιζω. Καταρχας δεν ειναι ετσι ο κωδικας μου. Ποτε δεν θα αφηνα μια φορμα με το default ονομα. Δηλαδη Form1,Form2 κ.τ.λ. Απλα για να μην σας μπερδεψω ειπα να βαλω τα default. Οσο για την Form1 δεν χρειαζετε να την εμφανισω με καποια εντολη, γιατι ειναι ανοιχτη απο την αρχη του προγραμματος, και δεν κλεινει σχεδον ποτε.

 

Τότε είτε το textbox είναι άδειο είτε δεν ζητάς το text της ανοιχτής σου φόρμας. 

  • Like 1
Δημοσ.

Επειδη δεν εχω πολυ χρονο κατι στα γρηγορα. Κανε πρωτα τα 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;
        }
    }
  • Like 1
Δημοσ.

Το ζήτημα είναι αν η φόρμα άλφα γράφει στη βήτα, θα πρέπει να έχει ενημερωθεί αν η βήτα είναι φορτωμένη (είναι αδιάφορο αν φαίνεται ή όχι). Που σημαίνει ότι αν η βήτα κλείσει...η άλφα δεν μπορεί να αλλάζει το textbox του βήτα. Άρα χρειάζεται να πάρουμε ένα μήνυμα ότι έκλεισε η βήτα και να αλλάξουμε μια "γενική" μεταβλητή η οποία θα απαγορεύει στην άλφα να γράφει στην βήτα.

 

ένα παράδειγμα έγραψα στην Link.png Site: Μ2000 - άσχετο με την c# αλλά σχετικό με την ιδέα.

  • Like 1
Δημοσ.

Τότε είτε το 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 του βήτα. Άρα χρειάζεται να πάρουμε ένα μήνυμα ότι έκλεισε η βήτα και να αλλάξουμε μια "γενική" μεταβλητή η οποία θα απαγορεύει στην άλφα να γράφει στην βήτα.

 

ένα παράδειγμα έγραψα στην Link.png Site: Μ2000 - άσχετο με την c# αλλά σχετικό με την ιδέα.

Αν καταλαβα καλα, τον "ελεγχο" που λες τον κανω ουτως η αλλος. Οταν προσπαθσω να παρω απο την form1 το TextBox.Text και να το παω σε string στην form2, και οι 2 φορμες ειναι ανοιχτες. Επιβαλεται δηλαδη. Δενγινετε να εχεις την form2 ανοιχτη, και να μην ειναι η form1. Βεβαια, ολα τα "objects" στην form1 τα κανω disable οταν ανοιγει η form2, κι αυτο για να μην γινουν αλλαγες στο textBox στην form1 οταν περασω το text του στο string στην form2. Ουφ.... δεν φτιαχνω βιντεο καλυτερα για να το εξηγισω !!!

Παντως παιδια αν δεν βρεθει λυση, μαλλον θα περναω τα string με streamwriter ! Θα φτιαχνω temp files !! Χαχαχαχαχαχα

Δημοσ.

Δηλαδή θες να ανοίξεις 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 η όχι)

  • Like 1
Δημοσ.

Στο OtherTextBox της Form2 θα εχει το κείμενο που εχει το textBox της Form1

private void button1_Click(object sender, EventArgs e)
{
  Form2 frm = new Form2();
  frm.OtherTextBox.Text = textBox1.Text
  frm.ShowDialog();         
 }
  • Like 2
Δημοσ.

Α! μπράβο...Η φόρμα φορτώνεται με το που ορίζουμε την frm, μετά γράφουμε αυτό που θέλουμε και ανοίγουμε με Modal τρόπο.

  • Like 1
Δημοσ.

Δηλαδή θες να ανοίξεις 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 τι να το κανω ? Δεν μου χρειαζεται για τον σκοπο μου.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...