J'ai une application dans VB.NET qui commence par une sous-fonction fait certaines choses et décidez s'il se présente ou non. Quand il se présente, il le fait en invoquant Lorsque J'aimerais trouver un moyen de masquer temporairement la boîte de dialogue (envoyez-la à la barre système) sans retour de la fonction showdialog (). Cependant, dès que je fais un Je comprends que c'est le comportement attendu. Donc, ma question est de savoir comment puis-je obtenir cet effet? C'est lancé une boîte de dialogue, qui peut être masquée et bloquer jusqu'à ce que l'utilisateur souhaite vraiment quitter l'application. P> dialog.showdialog () code>. P>
dialog.showdialog () code> retourne, l'application fait un peu de nettoyage et de fin. p>
moi.hide () code> dans le code du formulaire, le formulaire est effectivement masqué, mais la fonction de fonction showdialog () et le processus est fermé. P>
5 Réponses :
Vous ne pouvez pas faire ce travail, Showdialog () reviendra toujours lorsque le formulaire est caché. L'astuce consiste à utiliser une forme régulière et un appel normal à l'application.Run () mais pour empêcher de devenir visible immédiatement. Coller ce code dans votre classe: méfiez que votre gestionnaire d'événements de charge ne fonctionnera pas tant que le formulaire devient visible alors assurez-vous de faire une initialisation dans le sous-constructeur sous-constructeur. p> p>
Si vous masquez la boîte de dialogue, vous sera em> retour de showdialog (). Oubliez d'essayer de changer cela, vous ne pouvez pas. Vous pourriez être capable de minimiser la boîte de dialogue. p> ou vous pouvez la positionner hors écran. p> ou vous pouvez le rendre transparent
Assurez-vous que ShowintaskBar = true si vous allez minimiser.
Vous pouvez utiliser un drapeau.
bool fait = false; code> li>
- Ensemble terminé = true quand il est complet (dans l'événement formé). LI>
-
vérifiez le drapeau dans la fonction de l'appelant (est-ce terminé?) P>
bool stilInMyFrm = false;
MyFrm myFrm = new myFrm();
try
{
stilInMyFrm = true;
myFrm.ShowDialog();
while (!myFrm.done)
Application.DoEvents();
}
finally
{
stilInMyFrm = false;
cleanup();
}
Une autre solution de contournement consiste à modifier la propriété d'opacité de la forme modélisée à 0 pour le rendre entièrement transparent.
private void MyModalForm_Load(object sender, EventArgs e)
{
bool isShowing = true;
//Do your thing.
if(!isShowing) this.Opacity = 0.0;
else this.Opacity = 1.0;
}
Opacité est une bonne idée et il ne casse pas le comportement de ShowDialog
J'ai fait cela, Formulaire de code intérieur:
private bool CanAccess()
{
//your condition to access or not
}
private bool AlreadyCreated = false;
protected override void SetVisibleCore(bool value)
{
if (value && !AlreadyCreated && !CanAccess())
{
base.SetVisibleCore(false);
this.Close();
return;
}
AlreadyCreated = true;
base.SetVisibleCore(value);
}
Réduisez-vous au plateau que vous recherchez au lieu de vous cacher? Voir Stackoverflow.com/Questtions/46918/...