0

トラックバーとラベルを動的に作成しようとしています。ユーザーが 4 のような数字を入力すると、4 つのトラックバーと 4 つのラベルが作成されます。次に、ユーザーが動的に作成されたトラックバーのいずれかを移動すると、それが移動され、関連付けられたラベルが更新されます。次に、すべてのラベルの数値を追加し、別のラベルの呼び出し合計ラベルに格納します。

これを説明する別の方法があります。ユーザーは数字の 3 を入力します。システムは 3 つのトラックバーと 3 つのラベル (トラックバーの隣) を作成します。ユーザーが最初のトラック バーを 5 に移動すると、最初のラベルは自動的に 5 に更新されます。ユーザーが 2 番目のトラック バーを 3 に移動すると、2 番目のラベルは自動的に 3 に更新されます。最後に、ユーザーは 3 番目のトラック バーを位置 9 に移動し、ラベルは自動的に 9 で更新されます。
右側には、17 = (5+3+9) を示す別のラベルがあります。

動的コントロールの作成に関する Web サイトをいくつか見つけましたが、動的に作成されたトラックバーを動的に作成されたラベルにリンクする方法がわかりません。次に、それらの動的に追加されたラベルを追加します。

これはすべて、Windows フォームの C# で行います。

ラベルとトラックバーを作成するときに、以下と非常に似たようなことをしました。

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 
4

1 に答える 1

1

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
}

トラックバーの配列がある場合、すべての値の合計を取得するのは簡単です。

于 2011-09-05T01:02:56.897 に答える