Pour une raison quelconque après mon SaveFileDialog, mon application ne montrera jamais la messagerie-matières. Y a-t-il quelque chose qui me manque? Ou est-ce un problème de filetage?
i Exécutez l'application en tant qu'application de formulaire Windows utilisant VS 2010 Express. P>
Je ne reçois aucune exception. P>
à ajouter: quand je Trouvez tout le code, tout semble aller bien. Qui est bizarre, alors je crois que c'est un problème de synchronisation. P>
a souligné par Larstech et d'autres, les messages-types font apparaître, mais l'accent est parti; En d'autres termes, la boîtebox est poussée derrière d'autres fenêtres ou minimisées. Ceci est un problème. P>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Globalization; using System.IO; namespace SpeedDating { class Program { [STAThread] static void Main(string[] args) { string filename = "test.test"; // args[0]; string ext = filename.Substring(filename.LastIndexOf('.')); SaveFileDialog dialog = new SaveFileDialog(); dialog.Title = "SpeedDating App"; dialog.RestoreDirectory = true; dialog.CheckFileExists = false; dialog.CheckPathExists = false; dialog.FileName = DateTime.Now.ToString("yyyyMMdd") + ext; DialogResult result = dialog.ShowDialog(); if (result == DialogResult.OK && dialog.FileName != "") { try { FileStream outfs = File.Create(dialog.FileName); FileStream infs = File.Open(filename, FileMode.Open); infs.CopyTo(outfs); infs.Close(); outfs.Close(); } catch (NotSupportedException ex) { MessageBox.Show("Probably removed the original file."); } } else { MessageBox.Show("No path found to write to."); } MessageBox.Show("I came here and all I got was this louzy printline"); } } }
4 Réponses :
J'ai créé un nouveau projet et collé votre code et cela fonctionne pour moi. Assurez-vous d'avoir fait une reconstruction complète avant de courir. De plus, avec cette ligne:
dialog.FileName = DateTime.Now.ToString(format) + "." + ext;
Peut-être que vous devriez peut-être mettre le sauvegardezfiledialog code> dans une utilisation pour assurer sa mise à disposition avant l'appel MessageBox:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.IO;
namespace SpeedDating
{
class Program
{
[STAThread]
static void Main(string[] args)
{
string filename = "test.test"; // args[0];
string ext = filename.Substring(filename.LastIndexOf('.'));
using (SaveFileDialog dialog = new SaveFileDialog())
{
dialog.Title = "SpeedDating App by K.Toet";
dialog.RestoreDirectory = true;
dialog.CheckFileExists = false;
dialog.CheckPathExists = false;
dialog.FileName = DateTime.Now.ToString("yyyyMMdd") + ext;
DialogResult result = dialog.ShowDialog();
if (result == DialogResult.OK && dialog.FileName != "")
{
try
{
FileStream outfs = File.Create(dialog.FileName);
FileStream infs = File.Open(filename, FileMode.Open);
infs.CopyTo(outfs);
infs.Close();
outfs.Close();
}
catch (NotSupportedException ex)
{
MessageBox.Show("Probably removed the original file.");
}
}
else
{
MessageBox.Show("No path found to write to.");
}
}
MessageBox.Show("I came here and all I got was this louzy printline");
}
}
}
Essayez ceci pour votre boîte de message.
MessageBox.Show(this,"Probably removed the original file.");
Cela fonctionne si je crée un formulaire montré avec le spectacle (). Sinon, il ne présentera pas le message de la messagerie. Toutefois, si je crée une nouvelle forme et montrez-le, j'aurai une fenêtre vide de la forme que je ne veux pas.
Je viens de faire une modification fondamentalement, vous souhaitez indiquer à la messagerie que son propriétaire est le formulaire actuel de votre part, de sorte qu'il se fera à l'avant, essayez-le avec cela. Au lieu de la nouvelle forme. Je postais mon désordre de console. J'ai oublié que vous avez dit que vous couriez comme une application WinForms.
Le "ceci" serait invalide car il est à l'intérieur du principal statique ().
Il a dit qu'il fonctionne comme une application de formulaires Windows non une console. Si c'est une application WinForms, cela serait correct. Pour une demande de console Non, il aurait besoin de créer le nouveau formulaire comme une autre réponse affichée, ou comment ma réponse a été postée auparavant lorsque je pensais la console.
J'ai essayé celui-ci et j'ai montré tout de suite:
MessageBox.Show(new Form() { WindowState = FormWindowState.Maximized, TopMost = true }, "You clicked Cancel button", "Cancel");
C'est proche de ce que j'ai finalement fait; Création d'un formulaire avec les paramètres ci-dessus, mais une forme pour les gouverner tous.
Vous êtes sûr qu'il ne jette pas une autre exception, jamais?
Ouais j'ai couru ce code et ça a fonctionné, y a-t-il autre chose qui vient?
Confirmez @ BearCat9425 Les messages de messagerie apparaissent toutefois derrière l'éditeur Visual Studio.
J'exécute des écrans Dual, mon éditeur était donc sur un écran et l'application courut sur l'autre alors ils ont bien fonctionné pour moi, mais oui, je pouvais voir sur un seul écran qui se produit. @Larstech trouve-t-il ce que votre problème est?
Essayez d'ajouter
attrape (exception ex) code> S'il n'y a pas d'autre exception, cela devrait la couvrir .. aussi si j'étais vous, j'ajouterais si j'ajouterais les conditions de si dans les freins ->
si ((résultat == dialogresult.ok) && (dialog.filename! = "")) Code> juste pour être sûr ...
Avez-vous essayé de la mettre d'abord séparément dans une situation non filetée juste pour confirmer s'il s'agit d'un problème de filetage?
@Edper: Comment ferais-je cela? C'est actuellement une seule application filetée (Stathread), alors je pense que cela revient à la même chose.
@Larstech: pourrait très bien être, pourrait ne pas être un véritable gros problème alors.
Les messages de messagerie affichent effectivement mais sont cachés, également en version publiée.
C'est pourquoi MessageBox.show () a des surcharges acceptant une dispute window i>. Qui garantit que la boîte est toujours au-dessus de cette fenêtre. Laissant-le jusqu'à MessageBox pour trouver une fenêtre peut être sifefy dans certains cas. Comme celui-ci où vous n'avez pas avoir i> une fenêtre. Il est certainement préférable d'éviter de bonder une interface utilisateur sur un programme qui n'en possède pas.
Juste pour confirmer avec d'autres que j'ai essayé et ça marche. Bien que vous ne puissiez pas le voir (au moins les deux messages de la boîte), pas avant de cliquer sur la barre des tâches. J'ai vu les messages "Aucun chemin trouvé pour écrire à." Et "je suis venu ici et tout ce que j'ai eu était cette expression Louzy" lorsque j'ai annulé la boîte de dialogue.
Ce que HAN a affiché est la réponse i>, même s'il manquait la boîte de réponse de quelques centimètres. Vous vous demandez toujours comment vous allez mettre en œuvre une vitesse datant d'un fichier.
@Cody Grey: Ouais, je sais. Je lui ai soulevé-le si cela vous rassure. La fréquentation de la vitesse datant d'un fichier prend une intrigue et une sortie de sortie et on écrit à un autre. Oh, je suis tellement vulgaire.