2017-05-06 2 views
1

Étant donné que seuls certains éléments standard (zone de texte, etc.) peuvent être ajoutés à un contrôle ToolStrip au moment du design dans une application Winform, j'ai ajouté dynamiquement un contrôle DateTimePicker comme suit mais je ne suis pas sûr de savoir comment accéder à la valeur datetime de la date sélectionnée dans le contrôleComment accéder aux valeurs d'un élément ToolStrip ajouté dynamiquement

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

J'ai essayé ce qui suit qui fonctionne encore comme ci-dessus mais ne peut pas avoir accès à la valeur de la date choisie du DateTimePicker ajouté:

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

Thi s MSDN tutorial décrit comment ajouter des éléments dynamiquement à ToolStrip mais rien d'autre.

+0

Faites de 'myDateTimePicker' une propriété ou un champ du formulaire pour y avoir toujours accès. Il y a probablement un moyen de nommer l'élément de la bande d'outils et de le trouver, mais ce ne serait pas aussi facile. – Crowcoder

+0

@Crowcoder J'ai déclaré 'public DateTimePicker myDateTimePicker {get; ensemble; } 'dans la classe Form mais pas sûr de l'utiliser dans l'exemple ci-dessus. – nam

Répondre

1

Vous pouvez gérer l'événement ValueChanged du DateTimePicker ainsi:

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()); 
} 

également comme une autre option, vous pouvez trouver le contrôle DateTimePicker dans un autre bouton gestionnaire d'événements, cliquez ainsi:

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()); 
} 

Note: Une meilleure solution serait dérivée de ToolStripControlHost. De cette façon, vous pouvez exposer les propriétés et les événements dont vous avez besoin. Par exemple, vous pouvez exposer la propriété Value et l'événement ValueChanged du contrôle DateTimePicker intégré.

L'exemple MSDN How to: Wrap a Windows Forms Control with ToolStripControlHost vous montre comment créer un contrôle personnalisé pour héberger dans ToolStrip. Vous pouvez simplement utiliser l'exemple pour créer votre contrôle personnalisé ToolStripDateTimePicker.

+0

Merci de m'avoir aidé - cela a fonctionné comme un charme. Merci de l'avoir expliqué aussi. – nam

+0

Vous êtes les bienvenus :) –