2017-05-06 51 views
1

由於在Winform應用程序的設計時只有一些標準項目(文本框等)可以添加到ToolStrip控件中,因此我已經按照以下方式動態添加了DateTimePicker控件但我不知道如何訪問如何訪問動態添加的ToolStrip項目的值

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

我已經試過了還是如上面工作的下面,但無法獲得訪問的選定日期值控制在選定日期的日期時間值dateTimePicker新增:

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

Thi s MSDN tutorial描述瞭如何動態添加項目到ToolStrip,但沒有別的。

+0

使'myDateTimePicker'成爲窗體的屬性或字段,以便您始終可以訪問它。可能有一種方法可以命名工具條項目並找到它,但它不會那麼容易。 – Crowcoder

+0

@Crowcoder我聲明'public DateTimePicker myDateTimePicker {get;組; }在Form類中,但不知道如何在上面的例子中使用它。 – nam

回答

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控件。

+0

謝謝你幫助我 - 它像一個魅力。謝謝你解釋它。 – nam

+0

不客氣:) –