如何访问动态添加的 ToolStrip 项的值

How to access values of a ToolStrip item that was added dynamically

因为只有一些标准项目(文本框等)可以动态添加到 ToolStrip control at design time in a Winform app, I've added a DateTimePicker 控件,如下所示,但我不确定如何访问控件中所选日期的日期时间值

var datePicker = new ToolStripControlHost(new DateTimePicker());
toolStrip1.Items.Add(datePicker);

我已经尝试了以下仍然像上面一样工作但无法访问添加的 dateTimePicker 的选定日期值:

DateTimePicker myDateTimePicker = new DateTimePicker();
var datePicker = new ToolStripControlHost(myDateTimePicker);
toolStrip1.Items.Add(datePicker);

MSDN tutorial 介绍了如何将项目动态添加到 ToolStrip,但仅此而已。

您可以这样处理 DateTimePickerValueChanged 事件:

private void Form1_Load(object sender, EventArgs e)
{
    var item = new ToolStripControlHost(new DateTimePicker());
    ((DateTimePicker)item.Control).ValueChanged += ToolStripDatePicker1_ValueChanged;
    item.Name = "ToolStripDatePicker1";
    toolStrip1.Items.Add(item);
}
private void ToolStripDatePicker1_ValueChanged(object sender, EventArgs e)
{
    var datePicker = (DateTimePicker)sender;
    MessageBox.Show(datePicker.Value.ToString());
}

另外,您可以通过以下方式在另一个按钮单击事件处理程序中找到 DateTimePicker 控件:

private void toolStripButton1_Click(object sender, EventArgs e)
{
    var item = ((ToolStripControlHost)this.toolStrip1.Items["ToolStripDatePicker1"]);
    var datePicker = (DateTimePicker)item.Control;
    MessageBox.Show(datePicker.Value.ToString());
}

注意: 更好的解决方案将来自 ToolStripControlHost。这样你就可以公开你需要的属性和事件。例如,您可以公开嵌入 DateTimePicker 控件的 Value 属性 和 ValueChanged 事件。

MSDN 示例 How to: Wrap a Windows Forms Control with ToolStripControlHost 向您展示了如何创建要在 ToolStrip 中托管的自定义控件。您可以简单地使用该示例来创建您的自定义 ToolStripDateTimePicker 控件。