Как выполнить автоматическое нажатие кнопки на форме Windows на основе параметра? C#

Я создал приложение для Windows с формой и несколькими кнопками. Мне нужно несколько раз автоматически запускать событие нажатия кнопки в зависимости от значения параметра, переданного приложению.

static class SensexPrediction
{
    static void Main(string[] Args)  <---- Modified this so accepting arguments.
    {
       Application.Run(new Sensex_Prediction_Form(Args)); <--- Passing Args to Form.
    }
}

Ниже приведен код для метода Sensex_Prediction_Form.

public Sensex_Prediction_Form(String[] Args)
    {
        InitializeComponent();
        if (Args.Length != 0) //There is atleast one argument.
        {
            this.Invoker = Args[0];  <-----Invoker is the name of the data member of the class.
        }


    }

Теперь при загрузке формы, если Invoker == "X", мне нужно выполнить код события button1_Click. Для этого я написал следующее...

private void Sensex_Prediction_Form_Load(object sender, EventArgs e)
    {
      if(Inovker == "x")
        {
          predict_butn.performclick();
        }
    }

Но щелчок не происходит автоматически, даже если передан аргумент X.

Чего я не мог понять, так это того, что имя кнопки в обозревателе решений - предикат, но когда я нажимаю на кнопку, код события появляется в функции с именем button1_click. Это причина? Пожалуйста помоги. Благодарю.

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

private void Sensex_Prediction_Form_Load(object sender, EventArgs e)
    {
        if (Invoker == "Scheduler")
        {
            prediction();
        }

    }

И я инициализировал переменную данных класса с планировщиком, как показано ниже..

public string Invoker = "Scheduler";

Даже тогда, когда я загружаю форму, метод не вызывается. Как и предполагалось, я исправил связь между именем кнопки и даже именем метода и т. Д. Спасибо q

Удивительно..(для меня:-))

if (Invoker == "Scheduler")
        {
            MessageBox.Show("Testing");
            prediction();
            MessageBox.Show("OK");
        }

Тестовое сообщение выполняется, но после этого оно просто отображает форму. так в чем может быть причина?

Понял проблему.. Я получаю ссылку на объект исключения не установлен.. потому что у меня есть строка, которая говорит

ActiveForm.Text = "Sensex Prediction System ";

На данный момент форма не была загружена, поэтому она не может установить текст.

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

Получил это... используя "показанное" событие для формы, способной сделать то, что я хотел. Благодарю.

5 ответов

Решение

Продвигайте код внутри button1_click для метода. Затем, когда форма загружена и, если параметр соответствует вашему фильтру, вызовите метод.

private void Button1_Click(object sender, EventArgs e)
{
    DoSomething();
}

private void Sensex_Prediction_Form_Load(object sender, EventArgs e)
{
    if(Inovker == "X")
    {
        DoSomething();
    }
}

private void DoSomething()
{
    ...
}

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

Прежде всего, вы не проверяете, Invoker == 'X', но Invoker == 'x', Это может быть частью проблемы. Сравнение строк с == однако, это не очень хорошая практика. Вы должны использовать

if (Invoker.Equals('X', StringComparison.InvariantCulture))

Будет ли выполнено действие, если вы нажмете кнопку мышкой? Если это так, проблема не в обработчике событий.

Если это не выполняется, обработчик события и событие кнопки не связаны. В свойствах кнопки вы можете проверить, подключен ли обработчик события к событию нажатия кнопки.

Что произойдет, если дважды щелкнуть кнопку в конструкторе? Создан новый обработчик событий? Если это так, переместите код из button1_click в новый обработчик событий и удалите button1_click обработчик события.

Обработчики событий и управляющие события не связаны автоматически. Вы должны сделать это в свойствах элемента управления.

Двойной щелчок по кнопке для генерации обработчика события (например, button1_Click(object sender, System.EventArgs e)), а затем вы хотите, чтобы вызвать этот метод просто вызов button1_Click(null, null)

Конечно, лучшим решением будет создать одну функцию с вашей логикой, а затем вызвать эту функцию в событии нажатия кнопки и когда Invoker == "X".

Сначала вы можете использовать Environment.GetCommandLineArgs() вместо передачи аргументов в конструктор формы.
Во-вторых, вы можете назначить неправильный обработчик события для клика. переназначить predict_butn.Click к его правильному обработчику событий вместо текущего button1_click

Другие вопросы по тегам