8
votes

Création d'une image d'image dans l'application WinForms .NET

J'essaie de créer un bouton dans ma application WinForms .NET 4.0 à Visual Studio 2010, ce n'est qu'une image. J'ai une fenêtre sans frontière et a une image de fond qui constitue ma peau personnalisée pour cette application. Pour les boutons Fermer / Minimiser en haut à droite de la fenêtre, je voulais créer 2 boutons simples qui sont des images uniquement qui ressemblent aux boutons Type Windows Fermer / Minimiser.

Je vais peut-être sur cette conception, alors si Je suis s'il vous plaît laissez-moi savoir. Jusqu'à présent, j'ai déterminé que j'ai besoin de créer une sous-classe pour le bouton qui ne fait que rendre l'image. La mise en œuvre finale doit rendre des images différentes pour chaque état du bouton (normal, survol, cliqué, etc.). Voici ce que j'ai jusqu'à présent: xxx

À ce stade, en supposant que cette conception soit appropriée, je dois savoir comment appeler SetClientsizecore () de manière appropriée. L'appelant dans le constructeur soulève une exception. Je suppose que c'est parce que le contrôle n'a pas eu la chance de l'initialiser. Je ne suis pas sûr de la fonction de remplacement qui me permettra de changer la taille de mon bouton pour s'adapter à l'image après avoir été initialisée par .NET. Des idées à ce sujet?


1 commentaires

Je viens de tenter cela moi-même, mais réalisa qu'une solution de contournement plus simple serait d'utiliser une commande Picturebox à la place, car il a un événement de clic, et il n'y avait rien d'autre dont j'avais besoin particulièrement de l'objet Button.


3 Réponses :


8
votes

dans le constructeur, arrière-planimage est null .

Vous devez définir la taille lorsque BackgroundImage est modifié en remplaçant la propriété.

Vous devez également ombre de la propriété de la propriété et ajoutez [designerserializationVisibilty (designerserializationVisibily.Choriz)] Pour empêcher la taille d'être enregistrée par le concepteur.


5 commentaires

Surtout l'élément designerserializationVisibilité ... Je suis sûr que beaucoup manquent cette partie.


Lorsque vous dites «Shadow ', la propriété Taille, vous voulez dire ré-implémentez-la et envoyez-le à la base. Ce n'est pas virtuel, donc je ne peux pas le remplacer en utilisant les mêmes moyens que l'arrière-planImage.


@BOB: Oui, en utilisant le modificateur Nouveau .


Très utile. BTW, TYPO sur l'attribut de concepteur; devrait être: [Ivisibilité de Designerserialization (DesignerserialisationVisibi Lity.Choriz)]


@Slaks Je voulais juste attirer l'attention sur le fait qu'il y a toujours une faute de frappe dans ce post. Il devrait être [désignalisateurVisibilité (designerserializationVisibi Lity.Chorizing)] . Notez l'ajout du dernier i dans la première occurrence de visibilité (le changement ne signifie pas assez de caractères pour que je puisse le modifier moi-même).



1
votes

Attendez que la propriété arrière-planImage soit attribuée afin que vous sachiez quelle taille vous avez besoin. Remplacer la propriété comme ceci: xxx


0 commentaires

0
votes

Si vous souhaitez utiliser imagebuttons code>, je recommanderais d'utiliser Bunifuui comme il a imagebuttons code>.

Si vous ne voulez pas utiliser Bunifuui, vous pouvez Utilisez une boîte à images car elle a également un événement de clic. Exemple: P>

private void pictureBox1_Click(object Sender, EventArgs e) {
   webBrowser1.Navigate("https://www.google.com");
}


0 commentaires