C#/MonoDevelop: GTK MessageDialogs nécessitent un double-clic pour fermer - pourquoi?
Je suis un débutant programmeur d'écrire un programme dans MonoDevelop en C# et ont un problème avec mon gtk MessageDialogs.
Le bouton fermer dans la fenêtre des pensionnaires de mon GTK Message dialogues besoin d'un double-cliquez pour fermer réellement. Le bouton de fermeture sur le dialogue, son auto fonctionne très bien. Quelqu'un pourrait-il me dire comment je peux résoudre ce problème ci-dessous le code:
if (fchDestination.CurrentFolder == fchTarget.CurrentFolder) {
MessageDialog msdSame = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Close, "Destination directory cannot be the same as the target directory");
msdSame.Title="Error";
if ((ResponseType) msdSame.Run() == ResponseType.Close) {
msdSame.Destroy();
}
return;
}
if (fchTarget.CurrentFolder.StartsWith(fchDestination.CurrentFolder)) {
MessageDialog msdContains = new MessageDialog(this, DialogFlags.Modal, MessageType.Error, ButtonsType.Close, "error");
msdContains.Title="Error";
if ((ResponseType) msdContains.Run() == ResponseType.Close) {
msdContains.Destroy();
}
return;
}
OriginalL'auteur Connel | 2010-04-06
Vous devez vous connecter pour publier un commentaire.
La valeur de la réponse donnée lorsque vous cliquez sur une boîte de dialogue de "fermer la fenêtre" bouton n'est pas
CLOSE
, maisDELETE_EVENT
. C'est pourquoi ladestroy
méthode n'est jamais appelé et le dialogue s'attarde. La deuxième fois que vous le fermez (hors du contexte de larun
méthode), la boîte de dialogue est détruit normalement.En bref, vous devez également vérifier pour
ResponseType.DeleteEvent
.Mise à jour:
Dans le code:
Ou, comme ptomato mentionne, vous n'avez pas besoin de vérifier la réponse, compte tenu de l'utilisateur n'a qu'un seul choix: "fermer".
ResponseType
puisque l'utilisateur n'a le choix qu' "Fermer". Appelez simplementRun()
et puisDestroy()
.J'ai essayé le code suivant mais toujours l'erreur :s où abouts vais-je tort? merci pour votre aide 🙂 MessageDialog msdSame = new MessageDialog(ce, DialogFlags.Modale, MessageType.Erreur, ButtonsType.À proximité, "Vous ne pouvez pas synchroniser deux dossiers qui sont identiques"); msdSame.Title="Erreur"; //si l'utilisateur clique sur fermer, puis fermer la boîte de message si ((ResponseType) msdSame.Run() == ResponseType.Fermer || (ResponseType) msdSame.Run() == ResponseType.DeleteEvent) { msdSame.Destroy(); }
salut ptomato désolé de na pas voir votre commentaire! Je suis un peu nouveau à la programmation :s localisation dois-je appeler le run() et destroy dans mon code? merci
J'ai mis à jour la réponse de l'expliquer dans le code. Vous avez été près correct, mais il vous suffit d'appeler
Run
une fois et de stocker la valeur de retour. Le code qui vous a été fait à l'origine du dialogue à être exécuté deux fois.Salut merci à tous pour votre aide j'apprécie beaucoup 😀 je l'ai eu à travailler en fin de compte à l'aide de ptomato de la méthode, Johannes quand j'ai fatigué de votre code, j'ai obtenu le message d'erreur suivant sur cette ligne ResponseType réponse = msdContains.Run(); Erreur CS0266: Impossible de convertir implicitement le type
int' to
Gtk.ResponseType'. Une conversion explicite existe (vous manque un plâtre?) Je viens de wonndering ce que je peux faire pour corriger ce que dernier dans mon programme, j'voudrez peut-être une boîte de message avec de multiples options afin aimerais comprendre comment cela fonctionne 🙂 merciOriginalL'auteur Johannes Sasongko
Peut être à la fois les conditions se satisfaire et par conséquent, vous obtenez deux msgbox et il semble que vous avez à donner une double cliquez sur fermer
OriginalL'auteur Amsakanna
Un échantillon de classe pourrait être:
La classe en cours d'utilisation:
OriginalL'auteur LUIS ADRIAN