如何根据参数执行Windows窗体上的自动按钮单击?c#

本文关键字:按钮 单击 何根 参数 执行 窗体 Windows | 更新日期: 2023-09-27 18:03:25

我创建了一个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,点击也不会自动发生

我无法理解的是解决方案资源管理器中的按钮名称是predict_button,但当我单击按钮时,事件代码是在一个名为button1_click的函数中。是这个原因吗?请帮助。谢谢。

在建议之后,我将事件代码和实际逻辑分离在一个名为prediction的单独方法中。

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

并且我用Scheduler初始化了类的data变量,如下所示。

public string Invoker = "Scheduler";

即使这样,当我加载表单的方法没有被调用。如建议,我纠正了按钮名称和方法名称等之间的连接。谢谢q

令人惊奇的是…(对我来说:-))

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

测试消息正在执行,但之后它只显示表单。那么原因是什么呢?

理解问题,我得到一个异常对象引用没有设置,因为我有一行说

ActiveForm.Text = "Sensex Prediction System ";

此时尚未加载表单,因此无法设置文本。

------>现在的问题是如何在加载表单后自动调用方法?因为该方法的代码会在执行时修改表单。

明白了……使用"显示"事件的形式能够做我想要的。谢谢。

如何根据参数执行Windows窗体上的自动按钮单击?c#

将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()
{
    ...
}

将代码从按钮事件中提取到它自己的方法中,该方法在按钮单击中被调用。现在您只需要调用新的提取方法,而不是尝试调用ui按钮单击。

首先,您可以使用Environment.GetCommandLineArgs()而不是将参数传递给表单的构造函数。
其次,您可能会为click分配错误的事件处理程序。将predict_butn.Click重新分配给正确的事件处理程序,而不是当前的button1_click

双击按钮生成事件处理程序(例如button1_Click(object sender, System.EventArgs e)),然后您想触发该方法只需调用button1_Click(null, null)

当然更好的解决方案是用你的逻辑创建一个函数,然后在按钮点击事件和调用器== "X"时调用该函数。

首先,您检查的不是Invoker == 'X',而是Invoker == 'x'。这可能是问题的一部分。然而,将字符串与==进行比较并不是一个好的做法。你应该使用

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

如果用鼠标单击按钮,操作是否执行?如果是,问题不在于事件处理程序。

如果不执行,则事件处理程序和按钮的事件不连接。您可以在按钮的属性中检查事件处理程序是否附加到按钮的click事件。

如果在设计器中双击按钮会发生什么?是否创建了新的事件处理程序?如果是,将代码从button1_click移动到新的事件处理程序,并删除button1_click事件处理程序。

事件处理程序和控件事件不会自动关联。您需要在控件的属性中执行此操作