如何根据参数执行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 ";
此时尚未加载表单,因此无法设置文本。
------>现在的问题是如何在加载表单后自动调用方法?因为该方法的代码会在执行时修改表单。
明白了……使用"显示"事件的形式能够做我想要的。谢谢。
将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
事件处理程序。
事件处理程序和控件事件不会自动关联。您需要在控件的属性中执行此操作