Как выполнить автоматическое нажатие кнопки на форме 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