Jak mogę zrobić, żeby wyświetliło się pod sobą x TextBoxów, gdzie x jest podawane na samej górze do TextBoxu? Czyli mam na górze TextBox, do którego trzeba wpisać jakąś liczbę naturalną. A poniżej pojawi się tyle textboxów ile wynosi liczba x. Prosze o pomoc :D
- Rejestracja:ponad 11 lat
- Ostatnio:prawie 9 lat
- Postów:57
0
W wpf byłoby (w windows forms pewnie jednakowo albo bardzo podobnie -> może się przyda)
xaml
<TextBox OnTextChanged="AddTextBoxes"/>
<Grid x:Name="grid" />
code
void AddTextBoxes(sender, event)
{
int count = Convert.ToInt32(((TextBox)sender).Text);
for (int i = 0;i<count;i++)
{
TextBox tb = new TextBox();
grid.Children.Add(tb);
}
}

- Rejestracja:ponad 9 lat
- Ostatnio:10 miesięcy
- Postów:18
0
List<TextBox> textBoxes = new List<TextBox>();
private void textBox1_TextChanged(object sender, EventArgs e)
{
foreach(TextBox tb in textBoxes) // usuwamy stare textboxy
{
tb.Dispose();
}
var textBox = (TextBox)sender;
uint count;
if (uint.TryParse(textBox.Text, out count))
{
for (int i = 0; i < count; i++)
{
var tb = new TextBox();
tb.Parent = this;
tb.Location = new Point(textBox.Location.X, textBox.Location.Y + tb.Size.Height * (i+1));
textBoxes.Add(tb);
}
}
else
{
MessageBox.Show("Musisz podać liczbę naturalną");
}
}
- Rejestracja:ponad 10 lat
- Ostatnio:7 miesięcy
- Postów:194
0
To nie jest takie proste :) Dlaczego ?
Zaraz pojawi się pytanie jak pobierać wartości z takich textbox-ów, jak je pozycjonować. Jak usunąć istniejące textboxy gdy użytkownik podał inną wartość.
Ogólnie sugeruje dodać jakiś listbox/datagrid do którego będziesz dodawać wartości z pojedynczego textbox-a. Zarządzanie widokiem z poziomu code behind to tragiczny pomysł.
Pozdrawiam

- Rejestracja:około 17 lat
- Ostatnio:2 dni
- Lokalizacja:Wrocław
3
Aby ułatwić sobie układanie TextBoxów w kolumnie można użyć kontenera TableLayoutPanel
.
teo215 napisał(a):
Zarządzanie widokiem z poziomu code behind to tragiczny pomysł.
Ale code behind służy właśnie do tego i tylko do tego.

- Rejestracja:ponad 11 lat
- Ostatnio:ponad 4 lata
- Postów:2442
1
@somekind no dokładnie. Tak może zrobić:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Program {
class Program {
static void Main(string[] args) {
var form = new Form();
var layout = new TableLayoutPanel();
layout.Dock = DockStyle.Fill;
var counter = new TextBox();
layout.Controls.Add(counter);
form.Controls.Add(layout);
counter.KeyPress += (sender, e) => {
if (e.KeyChar == (char)Keys.Return) {
try {
int count = Int32.Parse(counter.Text);
for (int i = 0; i < count; i++)
layout.Controls.Add(new TextBox());
}
catch (FormatException) {
MessageBox.Show("Please type a valid number!");
counter.Text = "";
}
}
};
form.ShowDialog();
}
}
}
edytowany 3x, ostatnio: grzesiek51114
grzesiek51114