Доступ к форме через другой класс - PullRequest
0 голосов
/ 28 июня 2011

Простите, если это немного искажено, я немного новичок в Windows Forms, проведя месяцы в ASP.NET

В основном я использую Quartz.NET в своем приложении Windows Form - при выполнении задания запускается другой файл класса - передаваемые параметры не содержат ссылки на форму, и я не думаю, что может изменить это.

Что я хочу сделать, это обновить сетку на странице после выполнения задания - и единственное место, которое «сообщает» мне, что задание выполнено, - это другие файлы, а не код форм. Я не могу найти способ доступа к методам / объектам в форме без запуска нового экземпляра, что я не хочу делать.

РЕДАКТИРОВАТЬ: Подводя итог, я просто хочу отправить сообщение или что-то в уже открытую форму Main из другого класса

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Почему бы не поднять событие из вашего класса в winform.Это элегантный способ сделать это.Для отправки сообщения вы можете использовать interop для вызова sendMessage, для которого требуется дескриптор окна

0 голосов
/ 28 июня 2011

Самый простой способ - передать экземпляр главной формы классу, использующему событие Quartz.NET, чтобы потребляющий класс мог затем вызывать методы в главной форме. Я предполагаю, что класс в любом случае будет создан где-то в главной форме, так что это будет что-то вроде:

var quartzConsumer = new QuartzConsumer(this);

...
class QuartzConsumer {
    MainForm _form;
    public QuartzConsumer(MainForm form) {
        _form = form;
        ...
    }
    void OnTimer(..) {
        _form.UpdateGrid();
    }
}

РЕДАКТИРОВАТЬ, как говорит @hundryMind, еще одно решение для основной формы подписаться на событие в классе потребления:

class QuartzConsumer {
    public delegate void DataChangedEventHandler();
    public event DataChangedEventHandler DataChanged;
    void OnTimer(..) {
        if (this.DataChanged != null) this.DataChanged();
    }
}

// in MainForm:
var quartzConsumer = new QuartzConsumer(..);
quartzConsumer.DataChanged += this.OnDataChanged;
...
void OnDataChanged() {
    // update the grid
}
0 голосов
/ 28 июня 2011

На самом деле, если члены класса не были static, вы не сможете получить к ним доступ без экземпляра этого класса. Попробуйте обвинить тот же экземпляр класса, к которому применяются ваши действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...