массив текстовых полей с одним событием

Я работаю над проектом приложения windows form с c# и пытаюсь создать массив TextBox с тем же действием события. Я имею в виду, что требуется N текстовых полей (N отличается от назначенного Пользователем), в то время как все события “TextBox_TextChanged “ одинаковы. Я был бы признателен, если бы вы помогли мне.

3 ответа

  1. Найти ниже

            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)
            {
    
            }
    
  2. Пожалуйста, попробуйте это.

        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)
     {
     }
    
  3. Я только что столкнулся с подобной проблемой, как ваш, и я могу подробно мое решение:

    объявите массив как поле в своем классе:

    private TextBox() yourArrayOfTextboxes;
    

    Добавьте это в метод to loop и заполните содержимое массива:

    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");
    }
    

    Вы можете использовать позицию в массиве, если у вас есть какой-то случай, когда вы должны заполнить содержимое в Панели Управления компоновкой таблицы (та же строка), что и я.