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

时间:2011-07-26 11:42:30

标签: 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,也不会自动发生点击。

我无法理解的是解决方案资源管理器中的按钮名称是predict_butn,但是当我单击按钮时,事件代码位于名为button1_click的函数中。这是什么原因? 请帮忙。感谢。

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

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

    }

我用Scheduler初始化了类的数据变量,如下所示。

public string Invoker = "Scheduler";

即使这样,当我加载表单时,也不会调用该方法。 建议我更正按钮名称和方法名称之间的连接等。 谢谢你

令人惊讶的是......(对我而言: - ))

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

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

理解了这个问题。我没有设置异常对象引用。因为我有一行说

ActiveForm.Text = "Sensex Prediction System ";

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

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

得到它...使用“显示”事件表格能够做我想要的。感谢。

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

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

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

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

答案 4 :(得分:0)

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

当然,更好的解决方案是使用您的逻辑创建一个函数,然后在按钮单击事件和Invoker ==“X”时调用该函数。