Jump to content



C#


elenhpop

Recommended Posts

Γράφοντας την πτυχιακή μου σε c# αντιμετώπισα ένα πρόβλημα και ψάχνω μια λύση. Χρησιμοποιώντας το visual studio πρόσθεσα στη φόρμα μου ένα εργαλείο το numericUpDown. Θέλω να το προγραμματίσω με τέτοιο τρόπο ώστε όταν ο χρήστης επιλέξει έναν αριθμό να εισάγει στη φόρμα textboxes. Που μπορώ να ψάξω ώστε να βρω την απάντηση ή αν γνωρίζει κάποιος ας με βοηθήσει. Ευχαριστώ:hm:

Link to comment
Share on other sites

Επειδή γενικά τα dynamic controls είναι μανούρα, μπορείς να κάνεις το εξής:

Αν έχεις κάποιο όριο σε controls (textboxes), τότε τα φτιάχνεις από πριν και τα έχεις invisible. Με την αλλαγή στο numericUpDown, απλά εμφανίζεις αυτά που θέλεις και μετά τραβάς τις τιμές τους.

Αυτό βέβαια είναι πρακτικό αν έχεις 5-10 textboxes. Αν το θέλεις για παραπάνω, πχ 20-30, τότε θα το κάνεις διαφορετικά.

Θα φτιάξεις μια function που επιστρέφει Textbox. Εκεί, θα δημιουργείς ένα με τις παραμέτρους που θέλεις, κυρίως διαφορετικό ID και θα το επιστρέφεις ως μεταβλητή. Απλά εδώ θέλει προσοχή στα πρόσθεσε/αφαίρεσε κλπ, για να έχεις την επιθυμητή συμπεριφορά.

Link to comment
Share on other sites

Εναλλακτικά μπορείς να το κάνεις και έτσι

Κάτω από το numericUpDown βάζεις ένα FlowLayoutPanel (δες το property FlowDirection).

Μετά στο event ValueChanged του numericUpDown

  
//πόσα textBoxes θέλω να βάλω?Όσα μου λέει η επιλεγμένη τιμή του NumericUpDown
int numberOfTextBoxesToAdd = Convert.ToInt16(numberOfTextBoxesNumericUpDown.Value);

//αδειάζω το FlowLayoutPanel από τα Controls που έχει
textBoxFlowLayoutPanel.Controls.Clear();

//αναδρομή για την προσθήκη των TextBoxes
for (int i = 1; i <= numberOfTextBoxesToAdd; i++)
{
//κάνω initialize ένα νέο textBox
TextBox textBoxToAdd = new TextBox();

//βάζω ένα όνομα στο textBox που θα προσθέσω στην περίπτωση μας είναι της μορφής textBox1,textBox2 κτλ
textBoxToAdd.Name = String.Format("textBox{0}",i);

//το προσθέτω στο FlowLayoutPanel
textBoxFlowLayoutPanel.Controls.Add(textBoxToAdd);

}
//αυτό ίσως και να μην χρειάζεται η Refresh αναγκάζει το control να κάνει redraw
textBoxFlowLayoutPanel.Refresh();

Αν θες να δεις ότι δουλεύει βάλε ενα button στην φόρμα κάτω από το FlowLayoutPanel και στο onclick event copy paste


foreach (TextBox textBox in textBoxFlowLayoutPanel.Controls)
{
MessageBox.Show(String.Format("Name of TextBox = {0},Value = {1}", textBox.Name, textBox.Text));
}

Για κάθε TextBox που περιέχεται στο collection των Controls του textBoxFlowLayoutPanel εκτύπωσε το όνομα του και το value που έχει.

Σημείωση ο παραπάνω κώδικας θα χρειαστεί αλλαγή αν προσθέτεις άλλου τύπου controls στο FlowLayoutPanel

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.