27. april 2006 - 19:53Der er
15 kommentarer og 1 løsning
Tegn x antal textboxe
Hejsa..
Jeg er rimelig ny i C#. Jeg skal have lavet et lille program, hvor brugeren kan indtaste et tal i en textBox, og derefter klikke på en ok-knap. Alt efter hvilket antal brugeren har indtastet i textfeltet, skal der laves det antal textboxe og placeres under hinanden.
Havde forestillet mig at det skulle køre i et loop, altså noget ala
private void button1_Click(object sender, EventArgs e) { for (int i = 0; i <= brugerinput; i++) { // Tegn textboxe med navnet værdien af i, sålænge loop'en kører. } }
Tilføjer én textbox til din controls collection. Typisk vil du så have en eller anden form for placeholder eller panel, som du tilføjer textboxe til, så du kan styre hvor de vises. Det er mest praktisk hvis du gemmer dine dynamisk oprettede tekstbokse i et array eller lignende, så du nemt kan få fat på dem igen når brugeren har indtastet noget.
jeg har prøvet det, men problemet er nok at det skal ske før InitializeComponent(); - ellers virker det ikke.. Og det er jo lidt svært når InitializeComponent(); bliver kaldt i public Form1();
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace tester { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { Label test; test = new Label(); test.Text = "test test"; test.Visible = true; test.BackColor = Color.LightGray; test.Font = new Font("Times New Roman", 14); test.Location = new Point(100, 100); this.Controls.Add(test); }
} }
Der sker simpelthen ikke noget når man trykker på knappen.. Men hvis jeg indsætter den samme kode som i button1_Click(); i funktionen Form1() - før - InitializeComponent; virker det fint nok.. Men så bliver der jo bare ikke udført når man trykker på knappen :-)
Det her eksempel laver f.eks. en 10 textboxes under hinanden, og til sidst kan du se hvordan du kan tilgå dem hvis du putter dem i et array, som Driis foreslog.
Det er selvfølgelig mere praktisk at lave dit control-array som en private variabel i klassen, hvis du vil kunne tilgå felterne uden for din button1_Click metode.
private void button1_Click(object sender, EventArgs e) { Controls boxes = new Control[10]; int lastTop = 40; for (int i = 0; i < 10; i++) { TextBox t = new TextBox(); t.Left = 10; t.Top = lastTop; lastTop += 24; t.Text = "Box nr. " + i; boxes[i] = t; this.Controls.Add(boxes[i]); } boxes[4].Text = "Jeg er ændret!"; }
Error 1 'System.Windows.Forms.Control.Controls' is a 'property' but is used like a 'type' Error 2 Cannot apply indexing with [] to an expression of type 'Controls' Error 3 Cannot apply indexing with [] to an expression of type 'Controls' Error 4 Cannot apply indexing with [] to an expression of type 'Controls'
Jeg har prøvet BringToFront(); men det virker ikke.. Kan det måske have noget at gøre med at jeg bruger visualstudio, og normalt "tegner" programmet? For alle mine buttons, labels osv. ligger i en fil for sig.. Men derfor burde man selvfølgelig stadig kunne tilføje..
Det var så lidt, og så undskylder jeg tastefejlen... Tastede i sidste øjeblik linie 3 ind, uden at compile, men det vigtigste er da at du fandt ud af det :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.