У меня есть форма, которая получает имя одного из своих ярлыков из текстового файла. Это отлично работает при запуске приложения. Но из другой формы изменяется текстовый файл, и я бы хотел, чтобы эта метка изменилась соответствующим образом. Это обновление происходит, когда форма, в которой произошли изменения в текстовом файле, закрывается. Я думал, что Refreshing это будет делать то же самое, что и при использовании MainForm_Load. Но я думаю, нет. Могу ли я делать что-то неправильно или просто неправильно понимать, что делает Refresh? БлагодаряMainForm.Refresh(); не делает то, что я думал, что будет делать
ответ
Refresh
Метод только вызывает метод Invalidate
, поэтому он просто вызывает перерисовку элементов управления с их текущими данными.
Поместите код, который получает данные из текстового файла отдельным методом, так что вы можете вызвать его как из обработчика события Load
, так и из любого кода, который должен вызвать перезагрузку.
Это было то, что мне нужен был Гуффа! Благодарю. – JimDel
Ваш пост немного сбивает с толку, но попробовать MainForm.Invalidate (истина) вместо MainForm.Refresh() ...
Насколько мне известно, Form.Load создается один раз, когда создается экземпляр формы. Для того, чтобы логика, которая обновляет метку для повторного выполнения, должна вызываться из где-либо еще всякий раз, когда метка обновлена.
Одна из возможностей состоит в том, чтобы реорганизовать код обновления метки в метод, а затем использовать FileSystemWatcher для получения событие, когда содержимое файла меняется, а затем выполнить метод обновления в ответ
Все метод Refresh на форме делает Аннулируйте форму затем вызывает Update (которая сводится к UpdateWindow вызова)
One способ решить вашу проблему - использовать объект FileSystemWatcher для отслеживания вашего текстового файла для изменений. Когда обнаружено изменение, он может затем вызвать ваш код, который открывает файл и выводит данные на ваш ярлык.
FileSystemWatcher fsw = new FileSystemWatcher();
fsw.Path = @"c:\temp"; // path to file
fsw.Filter = "yourfile.txt";
fsw.Changed += fsw_Changed;
fsw.EnableRaisingEvents = true;
Затем в измененном случае, если вы только что определили
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;
}
Обратите внимание, что события FileSystemWatcher запускаются в отдельном потоке, таким образом, потребность в BeginInvoke.
Вот ссылка на example (просто выполните поиск по FileSystemWatcher, и вы найдете много примеров).
Вау! Мне нравится этот сайт! Никогда даже не слышал о FSW. Спасибо, что научил меня чему-то новому. Пример кода И ссылка на другую. Потрясающие. Еще раз спасибо Harpua. – JimDel
FSW - отличная вещь. Есть некоторые gotcha, вы должны быть осторожны с ним и работать, но очень хорошо иметь в своем инструменте. – Harpua
- 1. gcc -D опция не делает то, что я думал
- 2. C функция выхода не делает то, что я думал
- 3. OpenCV cvSet2d ..... то, что делает это делать
- 4. Button2 делает то, что button1 должно делать
- 5. что делает @autoreleasepool делать?
- 6. Я думал, что моя кнопка vbscript будет выполняться, но мне может быть что-то не хватает
- 7. Что делает (! Volatile); делать?
- 8. Что делает [:] делать?
- 9. Что делает> * делать?
- 10. Что делает Object ([]); делать?
- 11. pthread_cond_wait не делает то, что я ожидаю
- 12. BASH - Что делает _() {_ | _ &}; _ делать?
- 13. Что делает || = делать?
- 14. Что делает стиль = "..." делать?
- 15. Этот метод делает то, что он говорит, что он будет делать (чтобы страница не кэшировалась)?
- 16. Android regex не действует, поскольку я думал, что это будет
- 17. DbUpdateConcurrencyException стрельба не там, где я думал, что это будет
- 18. Что делает эта функция? Что-то делать с фиксацией ценностей?
- 19. Что делает? ... : ... делать?
- 20. Что делает Rails.application.eager_load! делать?
- 21. Что делает grep * делать?
- 22. Что делает `!: -` делать?
- 23. Что делает #^делать?
- 24. с кодом: если делать/в то время не будет делать то, что я прошу его сделать
- 25. Что делает «докер»? делать?
- 26. Что делает jq '.' делать?
- 27. Что делает greenthread.sleep делать?
- 28. Что делает page.driver.reset! делать?
- 29. Что делает контент: "" делать?
- 30. C++ - что делает [=] делать?
Во время какого события вы заполняете надписи из текстового файла? –
Первоначально он получает текст во время MainForm_Load – JimDel