Как перенести текст из динамически сгенерированного пользовательского элемента управления в текстовое поле

2

У меня есть форма окна, в которой button1, когда нажимается на usercontrol, динамически добавляется код, это

            int c = 0;
         private void button1_Click(object sender, EventArgs e)
    {
        int v;
        v = c++;
        panel1.VerticalScroll.Value = VerticalScroll.Minimum;
        UserControl1 us = new UserControl1();
        us.Name = "us" + v;
        us.Location = new Point(50, 5 + (30 * v));
        us.Tag = btn;
        panel1.Controls.Add(us);
     }

что usercontrol содержит 4 элемента управления 2 combobox и 2 текстовых поля

i.e combobox1 combobox2 textbox1 textbox2

имеется 4 текстовых поля, которые находятся в том же виде, что

still-textbox1, still-textbox2, still-textbox3, still-textbox4

еще одна кнопка2, там она будет передавать текст в comboboxes и texboxes, который является oldcombobox1 oldcombobox2 oldtextbox1 old textbox2

когда кнопка1 дважды щелкнет, она добавит два пользовательских элемента управления в форму Я хочу передать текст в этом формате

oldcombobox1.text = still-textbox1.text + "," + combobox1.text(который динамически сгенерирован) + "," + combobox1.text(который динамически сгенерирован) и т.д. все combobox1 из пользовательского элемента управления, который динамически добавляется)

oldcombobox2.text = still-textbox2.text + "," + combobox2.text(который динамически сгенерирован) + "," + combobox2.text(который динамически генерируется) и т.д. все combobox2 из пользовательского элемента управления, который динамически добавляется)

oldtextbox1.text = still-textbox3 + "," + textboox1.text(который динамически генерируется) + "," + textbox1.text(который динамически генерируется) и т.д. все текстовое поле1 из пользовательского элемента управления, которое добавляется динамически )

означает, что файл still-textbox1.text = first и когда динамический пользовательский контроль добавляется трижды, он будет содержать 3 раза combobox1, затем

oldcombobox1 должен содержать

Fisrt, combobox1.text, combobox1.text, combobox1.text

Я сделал этот код, но он не работает

  foreach (Control ctrl in panel1.Controls)
   {
     if (ctrl is UserControl)
     {
         UserControl1 myCrl = ctrl as UserControl1;
         oldcombobox1.text = still-textbox1.text + "," + myCrl.comboBox1.Text;
         oldcombobox2.Text =still-textbox2.text + "," + myCrl.comboBox2.Text;
         oldtextbox1.Text = still-textbox3.text + "," + myCrl.textBox1.Text;
         oldtextbox2.Text.Text = still-textbox4.text + "," + myCrl.textBox2.Text;
      }
    }
  • 2
    Создайте общедоступные свойства String в своем классе UserControl1, которые предоставят вам доступ к нужным строкам в элементе управления.
  • 0
    Mithrandir? что ? я не понял, вы можете написать и понять код? тогда я получу то, что ты хочешь сказать
Показать ещё 5 комментариев
Теги:

3 ответа

1
Лучший ответ

Вы должны добавить к вашему классу UserControl1 (отличное имя btw;-)) что-то вроде этого для каждой строки, которую вы хотите получить от другого объекта, в этом случае строка textBox1:

public String FirstTextBoxText 
{
   get { return this.textBox1.Text; }
}

Затем вы можете сказать в своем классе Form:

 if (ctrl is UserControl)
 {
     UserControl1 myCrl = ctrl as UserControl1;
     // ...
     oldtextbox1.Text = still-textbox3.text + "," + myCrl.FirstTextBoxText;
 }

Это все еще ужасный код, но он будет работать.

  • 0
    сэр, но что, когда кнопка нажата четыре раза? этот код перезапустит этот вид шаблона? еще textbox3.text, textbox3.text, textbox3.text, textbox3.text, textbox3.text ??? старый, первый, второй, третий, четвертый?
  • 1
    @shariq_khan: довольно сложно понять, что вы на самом деле хотите сделать, по крайней мере, для меня. Я попытался ответить на ваш вопрос, как «перенести текст из динамически сгенерированного пользовательского элемента управления в текстовое поле». То, что вам нужно сделать, чтобы обработать тексты таким образом, чтобы удовлетворить ваши требования, я, честно говоря, не могу сказать.
Показать ещё 3 комментария
0

Вы можете создать переменную уровня класса:

    private UserControl1 us1;
    private UserControl1 us2;

    private void button1_Click(object sender, EventArgs e)
    {
        int v;
        v = c++;
        panel1.VerticalScroll.Value = VerticalScroll.Minimum;

        if(us == null) 
        {
            //this is the first time the control is created
            us1 = new UserControl1();
            us1.Name = "us" + v;
            us1.Location = new Point(50, 5 + (30 * v));
            us1.Tag = btn;        
            panel1.Controls.Add(us1);
        }
        else if(us2 ==null)
        {
            us2 = new UserControl1();
            //whatever code you want to execute to change second one
            //you can access first control as us1.xxx
            panel1.Controls.Add(us2);

        }
        else
        {
           //3rd 4th etc...
        }


     }
  • 0
    что вы написали, вы поняли вопрос, сэр
  • 0
    @shariq_khan извините, я неправильно понял вопрос и изменил ответ, добавив второй элемент управления
0

Я бы сделал это с событиями.

Создайте класс, который наследуется от EventArgs: (Я предпочитаю VB, вы можете перетащить)

Public Class ControlEventArgs
  Inherits EventArgs

  Public Property Value1 As String = String.Empty
  Public Property Value2 As String = String.Empty
  Public Property Value3 As String = String.Empty
  Public Property Value4 As String = String.Empty

End Class

Затем в вашем элементе управления добавьте событие:

Public Event ValueSubmittal As EventHandler(Of ControlEventArgs)

В вашем обработчике Button2_Click:

RaiseEvent ValueSubmittal(me, new ControlEventArgs With {.Value1=comboBox1.Text, .Value2 = comboBox2.Text, .Value3 = textBox1.Text, .Value4 = textBox2.Text}

И в вашей форме, где вы динамически создаете элементы управления, вам нужно подключить обработчик событий:

AddHandler myNewControl.ValueSubmittal, AddressOf ValueSubmittalHandler

И значение ValueSubmittalHandler:

Private Sub ValueSubmittalHandler(sender as Object, e As ControlEventArgs)
  formControl1.Text = e.Value1
  formControl2.Text = e.Value2
  '  etc...
End Sub
  • 0
    его C # ... не VB .. вы можете сделать в простом коде?
  • 0
    Как указано в ответе .. вы можете перевести.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню