#c# #winforms
#c# #winforms
Вопрос:
Я работаю над программой инвентаризации и завершил основную функциональность в качестве консольного приложения командной строки. Сейчас я работаю над версией для winforms. Я хочу включить его для динамической генерации группового поля, содержащего несколько текстовых полей. Я бы предпочел не создавать более 50 строк из нескольких текстовых полей. Имейте в виду, что я довольно новичок в программировании, начав с C # год назад. Я почти ничего не знаю о Winforms.
Я пытался использовать dynamic item = new Groupbox();
в качестве аналогичного метода разрешенную генерацию объектов во время выполнения. В приложении командной строки это работает так, что на основе предоставленной информации определенное количество объектов передается в список _AllItems . Я думал о создании групповых полей с помощью:
private void InitializeGroupBox()
{
foreach (Product product in Product._AllItems)
{
dynamic Item = new GroupBox();
}
}
Но у меня такое чувство, что я далек от правильного метода. Спасибо всем, кто помогает.
Комментарии:
1. groupbox — это контроллер контейнерного типа, и обычно в него встроены другие элементы управления. Лучше создать список и поместить его в групповое поле
2. Возможно, вы захотите вместо этого взглянуть на DataGridView . В качестве альтернативы, создайте одну панель FlowLayoutPanel перед циклом, затем динамически создайте текстовые поля внутри цикла и добавьте их в панель FlowLayoutPanel.
3. Ну, начало правильное, но вам также нужно добавить новые элементы управления к родительскому элементу управления, скорее всего, к форме или странице вкладок.:
dynamic Item = new GroupBox(); Item.Parent = thisOrSomeTabPage;
; Также отличная идея добавить их групповые поля в словарь> строка, групповое поле> с красивым именем в качестве ключа, чтобы вы могли ссылаться наих позже, когда вы добавите текстовые поля или что-то еще..4. Вы объединяете динамическую генерацию с динамической типизацией. Вам не нужно использовать динамическую типизацию. Загляните в код .designer.cs для вашей формы, чтобы получить представление о том, как добавлять элементы управления программно — используемые там шаблоны, которые были сгенерированы дизайнером, могут быть записаны в любом другом месте вашей программы для добавления элементов управления «на лету».
Ответ №1:
Вам нужно будет узнать немного больше, но вот что я обычно делаю, чтобы добиться того, о чем вы просили.
internal class DynamicForm : Form
{
private FlowLayoutPanel mFlowLayoutPanel;
public DynamicForm()
{
mFlowLayoutPanel = new FlowLayoutPanel();
mFlowLayoutPanel.Dock = DockStyle.Fill;
// Add to this Form
this.Controls.Add(mFlowLayoutPanel);
InitializeGroupBox();
}
private void InitializeGroupBox()
{
mFlowLayoutPanel.SuspendLayout(); // Performance
for (int i = 1; i <= 20; i ) {
var groupBox = new GroupBox();
groupBox.Text = "GroupBox #" i;
groupBox.Size = new Size(200, 50);
var textBox = new TextBox();
textBox.Dock = DockStyle.Fill;
// Add the TextBox to GroupBox
groupBox.Controls.Add(textBox);
// Add to this Form
mFlowLayoutPanel.Controls.Add(groupBox);
}
mFlowLayoutPanel.ResumeLayout(); // after suspend, resume!
}
}