J'ai un formulaire qui obtient le nom de l'un de ses étiquettes à partir d'un fichier texte. Cela fonctionne très bien au démarrage de l'application. Mais à partir d'un autre formulaire, ce fichier texte change et je voudrais que Label change en conséquence. Cette actualisation a lieu lorsque le formulaire qui a fait ces modifications de fichiers texte s'est fermé. Je pensais que Rafraîchir ferait la même chose que ce qui se passe quand j'utilise MainForm_Load. Mais je suppose que non. Pourrais-je faire quelque chose de mal ou simplement me méprendre sur ce que Refresh fait? MerciMainForm.Refresh(); ne fait pas ce que je pensais qu'il ferait
Répondre
La méthode Refresh
appelle uniquement la méthode Invalidate
, il provoque juste repeindre des contrôles avec leurs données actuelles.
Placez le code qui extrait les données du fichier texte dans une méthode distincte, de sorte que vous puissiez l'appeler à la fois depuis le gestionnaire d'événements Load
et depuis n'importe quel code qui doit provoquer le rechargement. Pour autant que je sache, Form.Load est levé une fois lors de la création d'une instance du formulaire.
C'était ce dont j'avais besoin Guffa! Merci. – JimDel
Votre message est un peu confus, mais essayez MainForm.Invalidate (true) au lieu de MainForm.Refresh() ...
Pour que la logique qui met à jour l'étiquette soit réexécutée, elle doit être appelée ailleurs à chaque fois que l'étiquette a été mise à jour
Une possibilité consiste à refactoriser le code de mise à jour d'étiquette en une méthode, puis à utiliser un FileSystemWatcher pour recevoir un événement lorsque le contenu des modifications du fichier, puis exécutez la méthode de mise à jour en réponse
Toute la méthode Refresh sur un formulaire n'est Invalider la forme appelle ensuite mise à jour (qui se résume à un appel UpdateWindow)
One façon de résoudre votre problème consiste à utiliser l'objet FileSystemWatcher pour surveiller votre fichier texte pour les modifications. Lorsqu'un changement est détecté, il peut alors appeler votre code qui ouvre le fichier et envoie les données à votre étiquette.
FileSystemWatcher fsw = new FileSystemWatcher();
fsw.Path = @"c:\temp"; // path to file
fsw.Filter = "yourfile.txt";
fsw.Changed += fsw_Changed;
fsw.EnableRaisingEvents = true;
Ensuite, dans votre événement a changé que vous venez de définir
void fsw_Changed(object sender, FileSystemEventArgs e)
{
updateLabelFromTextFile();
}
private void updateLabelFromTextFile()
{
var fs = File.OpenText(@"c:\temp\yourfile.txt");
string sContent = fs.ReadToEnd();
fs.Close();
fs.Dispose();
if (label1.InvokeRequired)
{
MethodInvoker mi = delegate { label1.Text = sContent; };
this.BeginInvoke(mi);
}
else
label1.Text = sContent;
}
Notez que les événements FileSystemWatcher sont tirés dans un thread séparé, donc la nécessité de BeginInvoke.
Voici un lien vers un example (faites simplement une recherche sur FileSystemWatcher et vous trouverez des tonnes d'autres exemples).
Wow! J'aime ce site! Jamais entendu parler de FSW. Merci de m'apprendre quelque chose de nouveau. Un exemple de code ET un lien vers un autre. Impressionnant. Merci encore Harpua. – JimDel
FSW est une bonne chose. Il y a des trucs que vous devez faire attention et travailler, mais une bonne chose à avoir dans votre boîte à outils. – Harpua
- 1. Est-ce que PartialView fait ce que je pense qu'il devrait (mais ne fait pas)?
- 2. Object littéral + document.body.onclick ne fait pas ce que j'attends
- 3. Que ferait ce code? (Gestion de la mémoire)
- 4. Que fait ce javascript
- 5. Débutant Django Question: Je ne trouve pas de données Je pensais que je prédéfinis dans un formulaire
- 6. Flex profiler ne me montre pas ce que je m'attends ... Est-ce que je me trompe?
- 7. Que fait ce code? (2)
- 8. Que fait ce code Javascript?
- 9. Je pensais que le tas géré a augmenté dynamiquement?
- 10. Que fait ce code javascript?
- 11. Que fait @ dans ce php?
- 12. E4X: Expression ne pas retourner ce que je m'attendais
- 13. PHP - Code de fait presque ce que je veux à
- 14. OleDB ne retourne que DbNull, qu'ai-je fait de mal?
- 15. Has_many nom de la classe ne fonctionne pas comme je le pensais?
- 16. Que fait ce morceau de code C++?
- 17. LoadLibraryW ne fonctionne pas pendant que LoadLibraryA fait le travail
- 18. Est-ce que log10f() ne fait pas partie de la bibliothèque mathématique standard?
- 19. Que peut faire ce que sed ne peut pas faire?
- 20. Pourquoi ne puis-je pas exécuter ce code? Pourquoi ne puis-je pas exécuter ce code?
- 21. Est-ce que mysqldump --password fait vraiment ce qu'il dit?
- 22. Est-ce qu'un ORM s'intègre aux applications existantes ou est-ce que je ne comprends pas?
- 23. ce que fait cette php regex?
- 24. Je suis concerné ce code ne fait pas ce que je veux à cause de la façon dont les objets sont utilisés
- 25. Pourquoi est-ce que je ne peux pas piéger un clic de souris dans IE?
- 26. Pourquoi JRuby ne reconnaît pas BigNums pendant que Ruby le fait?
- 27. S'il vous plaît expliquer ce que ce code jquery fait
- 28. Est-ce que SqlDbType.DateTime ne stocke pas les secondes?
- 29. Je ne sais pas si je comprends ce qu'une vue indexée fait dans les coulisses, dans SqlServer
- 30. Erreur MySQL 1064, je ne sais pas ce que je fais mal ici
Pendant quel événement remplissez-vous les étiquettes du fichier texte? –
A l'origine, il obtient le texte pendant le MainForm_Load – JimDel