-1

我在事件上动态创建和跟踪栏,现在我想要一个文本框填充跟踪栏的值。

但我怎么可能做到这一点?因为我会收到一条错误消息,说动态创建的轨迹栏不存在。这是逻辑

这就是我到目前为止所拥有的。

        TrackBar trackBar = new TrackBar();
        trackBar.Name = "TrackbarWidth" + trackbarName++;
        trackBar.Tag = "dispose";
        trackBar.Maximum = 85;
        trackBar.Minimum = 65;
        trackBar.SmallChange = 5;
        trackBar.TickFrequency = 5;
        trackBar.Value = WidthValue;
        trackBar.Location = new Point(175, 440 + (50 * trackbarName));
        trackBar.Size = new System.Drawing.Size(100, 25);
        this.Controls.Add(trackBar);

        TextBox textBox = new TextBox();
        textBox.Name = "TrackbarWidth" + TextboxName++;
        textBox.Text = trackBar.Value.ToString();
        textBox.Tag = "dispose";
        textBox.Location = new Point(300, 440 + (50 * TextboxName));
        textBox.Size = new System.Drawing.Size(30, 25);
        this.Controls.Add(textBox);

        lineWidth += 4;
    }
#endregion
}

private void trackBar1_Scroll(object sender, EventArgs e){
    textBox1.Text = trackBar1.Value.ToString();
}

此解决方案的问题是我无法访问该trackBar1_Scroll方法中的文本框或轨迹栏。

4

2 回答 2

1

sender参数始终是触发事件的控件:

private void trackBar_Scroll(object sender, System.EventArgs e)
{
    // TextBox also dynamic? One way is using ControlCollection.Find
    textBox1 = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox;
    if(textBox1 != null)
        textBox1.Text = trackBar1.Value.ToString();
}

但是,如果您动态创建它,您还必须创建事件处理程序:

TrackBar trackBar = new TrackBar();
trackBar.Scroll += this.trackBar_Scroll;
于 2013-06-19T18:32:15.307 回答
1

这里使用的最简单的解决方案是使用能够关闭您需要的两个变量的匿名事件处理程序。在您完成构建文本框后包含此内容:

this.Controls.Add(textBox);
trackBar.Scroll += (s, args) => {
    textbox.Text = trackbar.Value.ToString();
};
于 2013-06-19T18:37:47.487 回答