Как заставить перебор вписывать все выбранные значения в textbox?

266
15 мая 2018, 08:40
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        List<string> Perebor(GroupBox groupBox)
        {
            List<string> value = new List<string>();
            foreach (Control control in groupBox.Controls)
            {
                if (control.GetType() == typeof(CheckBox))
                {
                    CheckBox checkBox = (CheckBox)control;
                    if (checkBox.Checked == true)
                        value.Add(checkBox.Text);
                }
                else if (control.GetType() == typeof(RadioButton))
                {
                    RadioButton radioButton = (RadioButton)control;
                    if (radioButton.Checked == true)
                        value.Add(radioButton.Text);
                }
            }
            return value;
        }

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (string text in Perebor(groupBox1))
            { textBox1.Text = text; }
        }
    }
}
Answer 1
textBox1.Text = text;

в этой строке вы полностью перезаписываете значение, чтобы не терять то что там уже есть - используйте конкатенацию, например, так:

textBox1.Text += text + ";";

обратите внимание, я добавил еще и запись разделителя (точку с запятой), вы можете убрать его или использовать любой другой разделитель (может вам больше подойдет перевод строки)

Ну и имейте ввиду, что доступ к контролам довольно медленный, поэтому имеет смысл собрать строку в локальную переменную, а поместить значение в свойство контрола один раз в самом конце:

string result = "";
foreach (string text in Perebor(groupBox1))
    result += text + ";";
textBox1.Text = result;

Ну и, конечно, стандартная рекомендация, для конкатенации строк использовать StringBuilder, а не string.

READ ALSO
Значение null при записи из datagridview в xml

Значение null при записи из datagridview в xml

На форме есть пустая DataGridViewСоздаю для неё DataTable

226
Не работает Binding для наследующего класса. WPF

Не работает Binding для наследующего класса. WPF

Пол дня выяснял, почему не биндятся элементы в ListView, но как решить ситуацию - не поймуС WPF работаю совсем немного

276
c# задача коммивояжера

c# задача коммивояжера

Решаю задачу коммивояжера методом ветвей и границВозникла загвоздка, она не столько связана с кодом, сколько с пониманием алгоритма

367