Печать данных из динамически добавленных полей со списком? - PullRequest
0 голосов
/ 07 июня 2009

Я получил код для работы, так что когда я нажимаю кнопку «Добавить еще», он добавляет дополнительные поля со списком в форму с именами dayBox1, dayBox2 и т. Д.

Это код для этого:

        private void addMoreBtn_Click(object sender, EventArgs e)
    {
        //Keep track of how many dayBoxes we have
        howMany++;

        //Make a new instance of ComboBox
        ComboBox dayBox = new System.Windows.Forms.ComboBox();

        //Make a new instance of Point to set the location
        dayBox.Location = new System.Drawing.Point(Left, Top);
        dayBox.Left = 13;
        dayBox.Top = 75 + dayLastTop;

        //Set the name of the box to dayBoxWhateverNumberBoxItIs
        dayBox.Name = "dayBox" + howMany.ToString();

        //The TabIndex = the number of the box
        dayBox.TabIndex = howMany;

        //Make it visible
        dayBox.Visible = true;

        //Set the default text
        dayBox.Text = "Pick One";

        //Copy the items of the original dayBox to the new dayBox
        for (int i = 0; i < dayBoxO.Items.Count; i++)
        {
            dayBox.Items.Add(dayBoxO.Items[i]);
        }

        //Add the control to the form
        this.Controls.Add(dayBox);

        //The location of the last box's top with padding
        dayLastTop = dayBox.Top - 49;
    }

Как лучше всего распечатать выбранный элемент из полей, добавленных с событием кнопки?

То, как я печатал информацию, которую хотел получить в файл раньше, было таким (из одной коробки):

public void saveToFile()
        {     
            FileInfo t = new FileInfo("Workout Log.txt");
            StreamWriter Tex = t.CreateText();
            Tex.WriteLine("---------------Workout Buddy Log---------------");
            Tex.WriteLine("------------------- " + DateTime.Now.ToShortDateString() + " ------------------");
            Tex.Write(Tex.NewLine);
            if (dayBoxO.Text != "Pick One")
            {
                Tex.WriteLine("Day: " + dayBoxO.Text);
            }
            else
            {
                Tex.WriteLine("Day: N/A");
            }
        }

Я хочу быть в состоянии сделать это для каждого поля, каждого на новой строке. Итак, это будет выглядеть так: День: (текст в рамке1) День: (текст box2) День: (текст box3) и так далее... Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 июня 2009

Два способа сразу увидеть, что вы можете сделать это:

Во-первых, следует поддерживать список ссылок на эти элементы управления при их добавлении.

private List<ComboBox> _comboBoxList = new List<ComboBox>();

...

//Make a new instance of ComboBox
ComboBox dayBox = new System.Windows.Forms.ComboBox();

//Add your combobox to the master list
_comboBoxList.Add(dayBox);

...

Тогда ваш метод saveToFile () будет содержать строку, которая выглядит примерно так:

foreach(var box in _comboBoxList)
{
      Tex.Write(Tex.NewLine);
      if (box.Text != "Pick One")
      {
          Tex.WriteLine("Day: " + box.Text);
      }
      else
      {
          Tex.WriteLine("Day: N/A");
      }
}

Второй способ - сделать так, как указал Майк и пройтись по списку элементов управления в поисках ваших комбинированных списков.

2 голосов
/ 07 июня 2009

Предполагая, что элементы управления находятся в форме, просмотрите все элементы управления в форме:

var boxes =  from Control c in this.Controls
             where c.GetType() == typeof(System.Windows.Forms.ComboBox)
             select c;

StringBuilder sb = new StringBuilder();
foreach (Control c in boxes)
{
    sb.AppendLine(c.Text); // ...
}

Не-Linq подход:

StringBuilder sb = new StringBuilder();
foreach (Control c in this.Controls)
{
    if (c.GetType() == typeof(System.Windows.Forms.ComboBox))
    {
        sb.AppendLine(c.Text); // ...
    }
}

Впрочем, полагаться на коллекцию Controls немного глупо; особенно когда вы начинаете иметь панели и другие группировки. Вы можете рассмотреть возможность добавления элементов управления в свою собственную коллекцию, как предлагает Джош.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...