casting nouveau Système.De Windows.Les formulaires.Objet de contrôle de Système.De Windows.Les formulaires.Zone de texte
- je obtenir une InvalidArgumentException lors de la coulée de Contrôle du Système.De Windows.Les formulaires.Zone de texte:
Impossible de convertir l'objet de type 'System.De Windows.Les formulaires.Contrôle' de type 'System.De Windows.Les formulaires.Champ de texte".
System.Windows.Forms.Control control = new System.Windows.Forms.Control();
control.Width = currentField.Width;
//here comes the error
((System.Windows.Forms.TextBox)control).Text = currentField.Name;
Je le fais, parce que j'ai les différents Contrôles (zone de texte, MaskedTextbox, Datetimepicker...), qui sera dynamiquement être ajouté à un groupe et ont les mêmes propriétés de base (Taille, Localisation... -> Contrôle)
Pourquoi ce n'est pas le casting possible?
Vous devez vous connecter pour publier un commentaire.
La conversion échoue parce que
control
n'est pas unTextBox
. Vous pouvez traiter uneTextBox
comme un contrôle (plus haut dans la hiérarchie de type), mais pas toutControl
comme unTextBox
. Pour le réglage des propriétés communes, vous pouvez simplement traiter tout commeControl
et les mettre en considérant que vous avez à créer des contrôles réels que vous souhaitez utiliser à l'avance:Vous de contrôle est un objet de la classe de Contrôle qui est le parent de la classe. Peut-être plus de contrôles sont hérite de l'objet parent.
Donc un enfant peut être jeté comme parent, mais pas vice-versa.
Au lieu d'utiliser cette
ou
Faire un objet TextBox. Que l'on sera toujours une zone de texte et que vous n'avez pas besoin de vérifier/casting pour elle.
Joey est droit:
votre contrôle n'est pas une zone de texte! Vous pouvez tester les types d'aide:
Toutes vos commandes hériter de Système.De Windows.Les formulaires.De contrôle. Toutefois, une zone de texte n'est pas le même que DateTimePicker, par exemple, de sorte que vous ne pouvez pas les jeter les uns aux autres, seulement pour le parent types. Cela a un sens, comme chaque contrôle est spécialisé pour faire certaines tâches.
Étant donné que vous avez des contrôles de différents types, vous pouvez tester le type de la première:
Vous pouvez aussi éventuellement en fonte pour le texte à l'aide de la " comme ce mot-clé: