У меня возникли проблемы с динамически добавлять класс элементов управления, которые должны при работе выглядеть следующим образом:Динамически Добавление Класс управления
Когда новый один добавляется он должен появиться в левой панели под инструментальная панель. До сих пор у меня возникли проблемы с их появлением (один в середине - это только тот проект, который я сделал).
Вот код:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Problem Occurs Here
EquationBox[] EquationBoxArray = new EquationBox[12];
for (int x = 0; x < 12; x++)
{
EquationBoxArray[x] = new EquationBox();
ActiveForm.Controls.Add(EquationBoxArray[x].mainPanel);
ActiveForm.Controls.Add(EquationBoxArray[x].colorPanel);
}
}
private void add_line_Click(object sender, EventArgs e) //Add Line
{
}
private void clear_Click(object sender, EventArgs e) //Clear Lines
{
}
}
public class EquationBox
{
public Panel colorPanel = new Panel();
public Panel mainPanel = new Panel();
public TextBox equationBox = new TextBox();
public CheckBox isVisibleBox = new CheckBox();
public EquationBox()
{
mainPanel.Size = new Size(200, 72);
colorPanel.Size = new Size(33, 72);
mainPanel.Location = new Point(50, 50);
colorPanel.Location = new Point(50, 50);
colorPanel.BackColor = Color.Red;
}
}
Проблема возникает здесь:
//Problem Occurs Here
EquationBox[] EquationBoxArray = new EquationBox[12];
for (int x = 0; x < 12; x++)
{
EquationBoxArray[x] = new EquationBox();
ActiveForm.Controls.Add(EquationBoxArray[x].mainPanel);
ActiveForm.Controls.Add(EquationBoxArray[x].colorPanel);
}
Когда я запускаю его, он вернется с:
Additional information: Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.
И даже до того, как это произошло, EqautionBox не появится.
Заранее спасибо, это действительно беспокоит меня.
Для конструктора EquationBox:
public EquationBox()
{
mainPanel.Size = new Size(200, 72);
colorPanel.Size = new Size(33, 72);
mainPanel.Location = new Point(50, 50);
colorPanel.Location = new Point(50, 50);
colorPanel.BackColor = Color.Red;
}
Как выглядит конструктор EquationBox? –
Вы имеете в виду это? 'public EquationBox() { mainPanel.Size = new Размер (200, 72); цветPanel.Size = новый размер (33, 72); mainPanel.Location = new Point (50, 50); colorPanel.Location = new Point (50, 50); цветPanel.BackColor = Color.Red; } ' –
Попробуйте' User Controls': щелкните правой кнопкой мыши ваш проект, выберите Добавить ..., User Control ..., Назовите User Control и нажмите OK. Перетащите TextBox, CheckBox и т. Д. В элемент управления пользователя. Теперь вы можете создать экземпляр и добавить его в форму. –