Динамически создаваемые трекбары и метки и связывающие их вместе в C # - PullRequest
0 голосов
/ 05 сентября 2011

Я пытаюсь динамически создавать трекбары и метки. В котором, если пользователь вводит число, подобное 4, он создает 4 трекбара и 4 метки. Затем, если пользователь перемещает любой из динамически созданных трекбаров, он перемещается и обновляет связанную с ним метку. Затем добавляет номера во все метки и сохраняет их в другой метке общего вызова.

Вот еще один способ объяснить это. Пользователь вводит номер 3. Система создает 3 трекбара и 3 метки (рядом с трекбарами). Пользователь перемещает первую полосу трека на 5, первая метка автоматически обновляется на 5. Пользователь перемещает вторую полосу трека на 3, вторая метка автоматически обновляется на 3. Наконец, пользователь перемещает третью полосу трека в положение 9 и ярлык автоматически обновляется до 9.
На правой стороне есть еще одна метка, которая показывает 17 = (5 + 3 + 9).

Я нашел несколько веб-сайтов, создающих динамически управляющие элементы, но я не знаю, как связать динамически созданный трекбар с динамически созданным ярлыком. Затем добавьте эти динамически добавленные метки.

ВСЕ это в C # в форме Windows.

Я сделал нечто очень похожее на приведенное ниже при создании моих ярлыков и трекбаров.

for (int i = 0; i < 10; i++)
{
    Label label = new Label();
    label.Text = i.ToString();
    PlaceHolder1.Controls.Add(label);
}

Спасибо заранее

------------------------ Обновление -----------------

void CreateLabeledTrackBars (управляющий хост, int n)

как мне это использовать, я надеялся, что когда начну новую форму

что все, что мне нужно было бы, это ... таким образом, форма уже имеет in n, но, похоже, не работает .. я запутался в том, как работает элемент управления. не могли бы вы объяснить

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {

     public static Form2 myNewForm = new Form2();

           private TrackBar[] _trackBars;
           private Label[] _labels;
   public Form3(int n)
         {
CreateLabeledTrackBars(new Label (), n);
}

//Then the rest of the code 

1 Ответ

1 голос
/ 05 сентября 2011

Вам нужно обработать ValueChanged событие каждого TrackBar, которое вы создаете. Чтобы вычислить сумму всех значений, сохраните созданные элементы управления в массивах.

private TrackBar[] _trackBars;
private Label[] _labels;

void CreateLabeledTrackBars(Control host, int n)
{
    const int trackBarWidth = 150;
    const int minValue = 0;
    const int maxValue = 10;
    const int defaultValue = 0;

    _trackBars = new TrackBar[n];
    _labels = new Label[n];
    int y = 0;
    for(int i = 0; i < n; ++i)
    {
        var label = new Label()
        {
            Top     = y,
            Left    = trackBarWidth,
            Text    = defaultValue.ToString(),
            Parent  = host,
        };
        var trackBar = new TrackBar()
        {
            Top     = y,
            Width   = trackBarWidth,
            // save associated label
            Tag     = label,
            Minimum = minValue,
            Maximum = maxValue,
            Value   = defaultValue,
            Parent  = host,
        };
        // handle ValueChangedEvent
        trackBar.ValueChanged += OnTrackBarValueChanged;
        // apply vertical offset for next trackbar
        y += trackBar.Height;
        _trackBars[i] = trackBar;
        _labels[i] = label;
    }
}

void OnTrackBarValueChanged(object sender, EventArgs e)
{
    // get trackbar, which generated event
    var trackBar = (TrackBar)sender;
    // get associated label
    var associatedLabel = (Label)trackBar.Tag;
    associatedLabel.Text = trackBar.Value.ToString();
    // recalculate sum of all values and update other label here
}

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

...