Creer un messageBox personnalisé [Résolu]

Signaler
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
-
Messages postés
108
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
6 décembre 2007
-
Bonjour,

je réalise une application de copie de fichier avec fenetre d'état un peu comme SuperCopier.
Actuellement, lorsque le fichier destination existe, je demande à l'utilisateur si il veux l'ecraser.
Par contre, ca devient très chiant lorsqu'on copie une série de fichier déjà existant.
Je veux donc rajouter à mon MessageBox une checkbox "appliquer à tous".

J'ai pensé créer une classe qui hérite de System.Windows.Form.MessageBox mais soit il m'oblige à créer un constructeur pour ma classe par exemple Toto:
toto() : base()
{}

Soit, si j'en met un, il me dit que le MessageBox n'a pas de constructeur.

Je pensais créer une winform dans laquelle je mettrais les bouttons, textes et ma checkbox mais j'aimerai pouvoir retrouver le principe des MessageBoxButton et MessageBoxIcon.
Pour les bouttons je peux tester la valeur et créer les bouttons qu'il faut mais pour l'icone je ne sais pas comment récupérer l'image pour la mettre dans une pictureBox.

Auriez vous une idée à me proposer pour avoir un messageBox avec une checkbox?

f.colo

5 réponses

Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
Voilà.
En fait, ce n'est pas GetIconInfo(), mais LoadIcon() qu'il faut utiliser. Ça donne quelque chose comme ça :





<hr />

// Déclarer la fonction native permettant de récupérer le handle d'icône

[DllImport("user32.dll")]
private static unsafe extern IntPtr LoadIcon(IntPtr hInstance, void* lpIconName);

// Déclarer la fonction native permettant de libérer le handle d'icône
[DllImport("user32.dll")]
private static extern bool DestroyIcon(IntPtr hIcon);

// Récupérer une icône
private unsafe Icon GetIcon(int iconNumber) {
   // On récupère le handle
   IntPtr IconHandle = LoadIcon(IntPtr.Zero, ((IntPtr)iconNumber).ToPointer());
   // On créé l'icône correspondante
   Icon icon = Icon.FromHandle(iconHandle)
   // On peut libérer le handle
   DestroyIcon(iconHandle);
   return icon;
}





<hr />
Le paramètre iconNumber indique l'icône à récupérer et doit être une des valeurs définies dans le fichier Winuser.h du SDK Windows. Ces valeurs sont 32513 pour l'icône "Erreur", 32514 pour l'icône "Question", 32515 pour l'icône "Exclamation" et 32516 pour l'icône "Information". Pour faciliter les choses, je te conseille de créer une énumération plutôt que d'utiliser ces valeurs directement.
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
Sinon, peut on changer le nom d'affichage d'un boutton, c'est à dire je met un bouton System.Windows.Forms.MessageBoxButtons.YesNoCancel et le Cancel je le renomme en "appliquer à tous" tout en testant DialogResult.Cancel en retour.

f.colo
Messages postés
129
Date d'inscription
mardi 22 novembre 2005
Statut
Membre
Dernière intervention
30 décembre 2007
3
Bonjour,
Tu ne peux dériver de System.Windows.Forms.MessageBox, car cette classe ne possède qu'un seul constructeur privé. Le seul moyen d'obtenir ce que tu veux semble donc effectivement de créer ta propre MessageBox.

Malheureusement, je ne pense pas que tu puisses récupérer et afficher les icônes originales de MessageBox en .NET "pur" (j'entends par là, sans faire appel à P/Invoke) : en effet, la classe System.Windows.Forms.MessageBox elle-même ne manipule pas directement les icônes, elle appelle simplement la méthode MessageBox de l'API Win32.

Il existe une fonction Win32 appelée GetIconInfo() qui devrait permettre de récupérer les icônes nécessaires. J'essaie de  regarder cela de plus près et je reviens.
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
2
Beh je te remercie beaucoup,

je vais me jeter dans le developpement d'une nouvelle classe :).
Si j'y arrive et que ca donne bien, je la mettrais sur le site.

f.colo

PS: Je valide demain après les tests
Messages postés
108
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
6 décembre 2007

Bonjour,

pour celà tu dois rajouter une autre fraime (ta messageBox)

tu rajoutes tes boutons avec les icons que tu veux

puis tu fais appel à cette fraime et en fonction du bouton clické tu lance ton evénement

Voilà

RED1