1

由于在 Winform 应用程序的设计时只能将一些标准项目(文本框等)添加到ToolStrip控件,因此我动态添加了一个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 教程描述了如何将项目动态添加到 ToolStrip,但仅此而已。

4

1 回答 1

1

您可以通过以下方式处理ValueChanged事件DateTimePicker

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. 这样您就可以公开您需要的属性和事件。例如,您可以公开嵌入式控件的Value属性和ValueChanged事件。DateTimePicker

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

于 2017-05-06T19:43:29.643 回答