Avatar billede anders_h Novice
27. april 2006 - 19:53 Der 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.
  }
}

Nogen der kender en løsning..? Bruger VS2005.

Mvh. Anders
Avatar billede driis Nybegynder
27. april 2006 - 20:10 #1
Controls.Add(new TextBox());
Avatar billede driis Nybegynder
27. april 2006 - 20:12 #2
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.
Avatar billede anders_h Novice
27. april 2006 - 20:17 #3
Hej driis,

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

Har du evt. et eksempel :)

Mvh. Anders
Avatar billede anders_h Novice
27. april 2006 - 20:20 #4
Lige lidt kode:

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 toolStripContainer1_ContentPanel_Load(object sender, EventArgs e)
        {

        }

        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 :-)
Avatar billede Spotgun Seniormester
27. april 2006 - 21:21 #5
Kan det være at den ligger skjult bag en anden control? For koden virker egentligt fint nok i mit eksempel...

Prøv evt. at sætte denne linie ind efter du har tilføjet din label:
test.BringToFront();
Avatar billede Spotgun Seniormester
27. april 2006 - 22:04 #6
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!";
        }
Avatar billede anders_h Novice
27. april 2006 - 22:20 #7
Hej spotgun, og tak for svar .. :)

Jeg får følgende fejl i eksemplet:

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..
Avatar billede anders_h Novice
27. april 2006 - 22:27 #8
Jeg har rettet Controls til Control i 3. linje, men det virker stadig ikke... :[
Avatar billede anders_h Novice
27. april 2006 - 22:37 #9
Har fundet fejlen:

            Control boxes = new Control[10];
=
            Control[] boxes = new Control[10];

Men selvom boksene nu sikkert er oprettet, bliver de alligevel ikke vist når jeg trykker på knappen.. :-( Nogen bud?
Avatar billede anders_h Novice
27. april 2006 - 22:40 #10
Wee nu virker det.. Jeg fjernede min placeholder, det var den der blokerede.. Ved nogen hvordan jeg knytter en textbox til en placeholder?

Nå men spotgun, smid et svar! Tak for hjælpen
Avatar billede anders_h Novice
27. april 2006 - 22:46 #11
Placeholder = Panel
Avatar billede morhan Novice
27. april 2006 - 22:50 #12
Hvis du kigger efter, er jeg ret sikker på, at dit panel også har en Controls collection
Avatar billede anders_h Novice
27. april 2006 - 22:56 #13
Ok, kan du give et eksempel?
Avatar billede hmortensen Nybegynder
28. april 2006 - 01:02 #14
Det fungerer på samme måde som hvis du tilføjer til selve formen, du skal blot bruge panelNavn.Controls.Add() i stedet.
Avatar billede Spotgun Seniormester
28. april 2006 - 08:06 #15
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 :)
Avatar billede anders_h Novice
29. april 2006 - 02:03 #16
:-) Tak for hjælpen..
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester