2015-07-08 8 views
0

это мой первый вопрос о stackoverflow, поэтому ошибки в стиле запроса не являются целенаправленными.Изменить атрибуты ToolStripButtomItem с помощью EventHandler

Я оба, новичок в C# относительно концепции обработки событий, поэтому Я хотел бы знать, если есть возможность изменить значение атрибута ToolStripButtonItem с помощью EventHandler.

контекст состоит в следующем:

Код начинается с инициализации пользовательского интерфейса, который содержит некоторые элементы Windows.Forms-. ToolStripButtomItem, который представляет интерес для меня, имеет Enabled-attribute значение false как значение по умолчанию. Функцией этой кнопки является переход в режим сравнения, как только существует определенный файл ссылки. Это все может быть в случае, когда запускается программа, иначе ссылочный файл может быть создан во время выполнения. Конечно, вы могли бы выполнить

Button.Enabled=System.IO.File.Exists(Reference-File) 

с initilization и чем сделать что-то вроде

CreateFile(ReferenceFile){ 
    ... 
    Button.Enabled = true; 
} 

, но это кажется довольно грубым мне.

Вместо этого я хотел бы что-то вроде:

Button.Enabled = new System.EventHandler(this.EnableButton); 

с

private void EnableButton(Object sender, EventArgs e){ 
    if(System.IO.FileExists(ReferenceFile) 
    Button.Enabled = true; 
} 

То, что я намерен это, чтобы кнопка получить включен, как только справочно-файл existst. Существует несколько способов создания ссылочного файла, и в будущем существует еще одна цель. Чтобы избежать установки значения включения в каждом из этих методов, концепция EventHandling кажется мне очень похожа на сделку.

Программа, которую я пытаюсь запустить, достаточно всеобъемлющая, поэтому «опрос» не является вариантом в этом месте.

ответ

0

Я предлагаю использовать FileSystemWatcher и устанавливать включенное свойство каждый раз, когда это происходит.

private void StartListening(string path) 
    { 
     var watch = new FileSystemWatcher(); 
     watch.Path = path; 
     watch.Filter = "*.*"; 
     watch.Created += UpdateState; 
     watch.Deleted += UpdateState; 
    } 

    void UpdateState(object sender, FileSystemEventArgs e) 
    { 
     MyButton.Enabled = File.Exists(@"C:\Folder\File.txt"); 
    } 

PS: это только некоторые очень простой пример кода, вам необходимо убедиться, что у вас есть ссылка на MyButton и есть правильный путь, там же ...

+0

Эй, спасибо за ответ. Следовательно, программа достаточно полная и выполняет двусторонние изменения в файле-коде и связанной с ним визуализации, было бы интересно узнать, насколько интенсивно используется ваше предложение? Это немного похоже на «опрос» по умолчанию, который я бы вообще хотел избежать. – krouch

+0

Совсем нет, насколько я знаю, это чистый случайный драйвер. Так что никаких опросов. Единственная проблема, с которой вы столкнетесь, заключается в том, что за короткое время произойдет много изменений, потому что тогда вы можете пропустить один. (Изменения буферизируются и обрабатываются один за другим с максимальным количеством 128 элементов в буфере, который я думаю.) Я не знаю деталей, хотя это только то, что я помню ... PS, вам, вероятно, следует использовать 'MyButton. InvokeRequired() 'и' MyButton.Invoke (новое действие (() => UpdateState (sender, e))); 'потому что я думаю, что события могут происходить из другого потока. –

+0

Мне кажется, что 'FileSystemWatcher' довольно нестабилен и, скорее всего, терпит неудачу, что было бы неприемлемо на данный момент. – krouch