Dynamiczne dodawanie nowego elementu na formularz

0

Kolejnym moim problemem który staram się nauczyć, jest dynamiczne dodawanie obiektów klonów.
Na formularzu dodaje pole załóżmy TextBox.
Chciałbym, aby po kliknięciu na te pole poniżej tworzyło się nowe pole, który miałby te same cechy co poprzednik. (Chodzi mi o stworzenie dynamicznego formularza, który pozwoli mi zapisywać słowa wpisane w takim formularzu do pliku. Szkopuł w tym, że nie wiem ile takich słów będzie i każde z założenia ma być w innym TextBox'ie)

Jak coś takiego można zrealizować ?
Proszę o pomoc.

0

Próbowałem coś na styl (tylko tym razem z buttonami, ale podejrzewam że to bez znaczenia):

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        int x, y;
        public Form1()
        {
            InitializeComponent();
            x = button1.Location.X;
            y = button1.Location.Y;
        }
        Button[] B;
        int i = 0;
        

        private void button1_Click(object sender, EventArgs e)
        {
            B[i] = new Button();
            B[i].Location = new System.Drawing.Point(x, y+30);
            B[i].Name = "button_"+i.ToString();
            B[i].Size = new System.Drawing.Size(75, 23);
            B[i].Text = "button_"+i.ToString();
            B[i].UseVisualStyleBackColor = true;
            i += 0;
        }
    }
}

Lecz dostaję błąd: "An unhandled exception of type 'System.NullReferenceException' occurred in WindowsFormsApplication2.exe". Co przekracza już moją wiedzę.
button1 jest już na formie aplikacji.

0

Udało mi się :)

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int x, y;
        public Form1()
        {
            InitializeComponent();
            x = button1.Location.X;
            y = button1.Location.Y;
        }
        
        ArrayList lista = new ArrayList();

        private void button1_Click(object sender, EventArgs e)
        {
            lista.Add(new Button());
            ((Button)lista[lista.Count - 1]).Text = "przycisk";
            y += 30;
            ((Button)lista[lista.Count - 1]).Location = new Point(x, y);
            this.Controls.Add(((Button)lista[lista.Count - 1]));
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            lista.Clear();
        }
    }
}
1

@hubertuss, nie używaj starożytnego typu ArrayList, który wymaga od Ciebie ciągłe rzutowania. Dla własnej wygody użyj List<Button>.
I po co czyścisz kolekcję przycisków przy zamykaniu okna?

0

Jestem zupełnie nowy w c sharp i VS2010. Kiedyś programowałem w C++ Builder 6.
Próbuję się przystosować metodą prób i błędów do nowej rzeczywistości i jakości jaką jest VS2010.
Denerwują mnie te Tutoriale w których ciągle pokazują oczywiste rzeczy np. jak zmieniać właściwości kontrolek, a nie pokazują użytecznych porad.
Ten fakty popychają mnie do odbiegania od sztuki i szukania tu pomocy.
Dzięki za wsparcie :) .

Ale się rozgadałem ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1