Utworzę formant użytkownika, który będzie zawierał etykietę i pole tekstowe, i po prostu utworzy instancje tej kontrolki użytkownika "n" razy. Jeśli chcesz wiedzieć, jak to zrobić i użyć właściwości, aby uzyskać dostęp do wartości Etykieta i Pole tekstowe z poziomu kontroli użytkownika, proszę dać mi znać.
prosty sposób zrobić to byłoby:
int n = 4; // Or whatever value - n has to be global so that the event handler can access it
private void btnDisplay_Click(object sender, EventArgs e)
{
TextBox[] textBoxes = new TextBox[n];
Label[] labels = new Label[n];
for (int i = 0; i < n; i++)
{
textBoxes[i] = new TextBox();
// Here you can modify the value of the textbox which is at textBoxes[i]
labels[i] = new Label();
// Here you can modify the value of the label which is at labels[i]
}
// This adds the controls to the form (you will need to specify thier co-ordinates etc. first)
for (int i = 0; i < n; i++)
{
this.Controls.Add(textBoxes[i]);
this.Controls.Add(labels[i]);
}
}
Powyższy kod zakłada, że masz przycisk btnDisplay
i ma onClick
zdarzenia przypisanego do btnDisplay_Click
obsługi zdarzeń. Musisz także znać wartość n i potrzebować sposobu na ustalenie, gdzie umieścić wszystkie elementy sterujące. Kontrolki powinny również mieć określoną szerokość i wysokość.
Aby to zrobić za pomocą Kontroli użytkownika, wystarczy to zrobić.
Dobra, najpierw idź i utwórz nową kontrolę użytkownika i umieść w niej pole tekstowe i etykietę.
Powiedzmy, że są nazywane txtSomeTextBox
i lblSomeLabel
. W kodzie za dodać ten kod:
public string GetTextBoxValue()
{
return this.txtSomeTextBox.Text;
}
public string GetLabelValue()
{
return this.lblSomeLabel.Text;
}
public void SetTextBoxValue(string newText)
{
this.txtSomeTextBox.Text = newText;
}
public void SetLabelValue(string newText)
{
this.lblSomeLabel.Text = newText;
}
teraz kod do generowania kontrolę użytkownika będzie wyglądać następująco (MyUserControl to nazwa trzeba dać kontrolą użytkownika):
private void btnDisplay_Click(object sender, EventArgs e)
{
MyUserControl[] controls = new MyUserControl[n];
for (int i = 0; i < n; i++)
{
controls[i] = new MyUserControl();
controls[i].setTextBoxValue("some value to display in text");
controls[i].setLabelValue("some value to display in label");
// Now if you write controls[i].getTextBoxValue() it will return "some value to display in text" and controls[i].getLabelValue() will return "some value to display in label". These value will also be displayed in the user control.
}
// This adds the controls to the form (you will need to specify thier co-ordinates etc. first)
for (int i = 0; i < n; i++)
{
this.Controls.Add(controls[i]);
}
}
Oczywiście możesz utworzyć więcej metod w sterowaniu użytkownika, aby uzyskać dostęp do właściwości i je ustawić. Albo po prostu, jeśli masz dostęp do dużo, wystarczy umieścić w tych dwóch zmiennych i można uzyskać dostęp do pola tekstowego i etykiety bezpośrednio:
public TextBox myTextBox;
public Label myLabel;
W konstruktorze kontroli użytkownika to zrobić:
myTextBox = this.txtSomeTextBox;
myLabel = this.lblSomeLabel;
Następnie w programie, jeśli chcesz zmodyfikować wartość tekstową, po prostu zrób to.
control[i].myTextBox.Text = "some random text"; // Same applies to myLabel
Nadzieję, że pomogło :)
PS. Oto link do przykładowego projektu, jeśli.
Dynamic Control Creation
pisownię jest niesamowity twórczy. –
możliwe duplikat [Dynamicznie utworzyć tablicę tekstowych i etykiety WinForm] (http://stackoverflow.com/questions/11157369/dynamically-create-array-of-textboxes-and-labels-winforms) – mbeckish
@UweKeim mój zły ENG, ale myślę, że było naprawdę niesamowicie kreatywne LOL –