Как я могу вызвать (веб) Button.Click in c #? - PullRequest
1 голос
/ 13 ноября 2008

Как видно из названия, я нахожусь в одной части моего кода, и я хотел бы вызвать любые методы, которые были добавлены в обработчик Button.Click.

Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 13 ноября 2008

Вы имеете в виду, что вам нужен доступ к нему из другого места в вашем коде? Может быть, идея изменить этот раздел на собственный метод, а затем вызывать этот метод всякий раз, когда вам нужно получить к нему доступ (включая событие Click)

4 голосов
/ 13 ноября 2008

ИЗБЕЖАТЬ. В самом деле. Похоже, вы обрабатываете важную логику прямо в обработчике событий.

Переместите логику из обработчика.

2 голосов
/ 13 ноября 2008

Вы можете сделать это с помощью отражения ..

    Type t = typeof(Button);
    object[] p = new object[1];
    p[0] = EventArgs.Empty;
    MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
    m.Invoke(btnYourButton, p);
1 голос
/ 13 ноября 2008

Вам понадобится событие, чтобы действовать как прокси, но вам гораздо лучше просто рефакторинг вашего кода.

    private EventHandler ButtonClick;

    protected override void CreateChildControls()
    {
        base.CreateChildControls();

        m_Button = new Button{Text = "Do something"};

        m_Button.Click += ButtonClick;

        ButtonClick += button_Click;

        Controls.Add(m_Button);

    }

    private void MakeButtonDoStuff()
    {
        ButtonClick.Invoke(this, new EventArgs());
    }

    private void button_Click(object sender, EventArgs e)
    {

    }

Не делайте этого, если вам это действительно не нужно. Это испортит ваш код.

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