У меня есть форма окна, в которой 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;
}
}
Вы должны добавить к вашему классу 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;
}
Это все еще ужасный код, но он будет работать.
Вы можете создать переменную уровня класса:
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...
}
}
Я бы сделал это с событиями.
Создайте класс, который наследуется от 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