Массив текстовых полей с тем же событием
Я работаю над проектом приложения формы Windows с помощью C# и пытаюсь создать массив TextBox с тем же действием события. Я имею в виду, что требуются N TextBox (N отличается от назначения пользователя), в то время как все события "TextBox_TextChanged" одинаковы. Я был бы признателен, если бы вы мне помогли.
3 ответа
Пожалуйста, попробуйте это.
private void frmMain_Load(object sender, EventArgs e)
{
int userPermittedCount = 4 // You can add user defined permission no : of text box count here;
int pointX = 30;
int pointY = 40;
for (int i = 0; i < userPermittedCount; i++)
{
TextBox txtBox = new TextBox();
txtBox.Location = new Point(pointX, pointY);
this.Controls.Add(txtBox);
this.Show();
pointY += 20;
txtBox.TextChanged += txtAdd_TextChanged;
}
}
private void txtAdd_TextChanged(object sender, EventArgs e)
{
}
Ищите ниже
TextBox t1 = new TextBox();
TextBox t2 = new TextBox();
TextBox t3 = new TextBox();
TextBox t4 = new TextBox();
TextBox t5 = new TextBox();
TextBox t6 = new TextBox();
private void Form1_Load(object sender, EventArgs e)
{
TextBox[] tBoxes = { t1, t2, t3, t4, t5, t6 };
foreach (TextBox item in tBoxes)
{
item.TextChanged += text_Changed;
}
}
private void text_Changed(object sender, EventArgs e)
{
}
Я только что столкнулся с подобной проблемой, как ваша, и я могу подробно описать свое решение:
объявите массив как поле в вашем классе:
private TextBox() yourArrayOfTextboxes;
Добавьте это в метод для зацикливания и заполнения содержимого массива:
yourArrayOfTextboxes=new TextBox [howManyTextboxesYouWishInTheArray];
for (int i=0,i<howManyTextboxesYouWishInTheArray, i++)
//note arrays' indexes start from 0
{
yourArrayOfTextboxes[i]=new TextBox() {Text="some Text",ForeColor=Color.SomeColor,BackColor=Color.SomeColor,Name="TextBox"+i};
someControl.Controls.Add(yourArrayOfTextboxes[i]);
//"someControl" is a name of a control which will be the parent of the newly generated TextBox member, in case you have none (could be a Panel control, or a Table Layout Panel, or a groupBox whatever
if(yourArrayOfTextboxes[i]!=null)
{
yourArrayOfTextboxes[i].TextChanged+=theNameOfYourMainForm_TextChanged;
}
}
Затем заполните само событие _TextChanged:
//appeal to the TextBox which fired up the event by (sender as TextBox)
private void theNameOfYourMainForm_TextChanged(object sender,EventArgs e)
{
int intArrayPosition=int.Parse((sender as TextBox).Name.Substring((sender as TextBox).Name.Length-1)); //in case you need the position in the array where it fired up;
MessageBox.Show((sender as TextBox).Name+"fired up the TextChanged event");
}
Вы можете использовать позицию в массиве, если у вас есть случай, когда вам нужно заполнить содержимое в элементе управления Layout Panel (та же строка), как и я.