Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用按钮的正确方式是什么;点击事件?_C#_Visual Studio_Button_Compact Framework_Windows Ce - Fatal编程技术网

C# 调用按钮的正确方式是什么;点击事件?

C# 调用按钮的正确方式是什么;点击事件?,c#,visual-studio,button,compact-framework,windows-ce,C#,Visual Studio,Button,Compact Framework,Windows Ce,这里:,它说,要从另一个按钮调用按钮的单击事件,您可以/应该这样做: button1.PerformClick(); 然而,在我的情况下(VS 2003.NET 1.1),这是不可编译的(无可否认,上面的链接指定了VS 2008,但它没有指向以前版本的相关信息的链接,就像msdn经常做的那样) 这包括: private void btnPrint_Click(object sender, System.EventArgs args) { if (this.recordChanged)

这里:,它说,要从另一个按钮调用按钮的单击事件,您可以/应该这样做:

button1.PerformClick();
然而,在我的情况下(VS 2003.NET 1.1),这是不可编译的(无可否认,上面的链接指定了VS 2008,但它没有指向以前版本的相关信息的链接,就像msdn经常做的那样)

这包括:

private void btnPrint_Click(object sender, System.EventArgs args)
{
    if (this.recordChanged)
    {
        //btnSave.Click();
        btnSave_Click(sender, args);
    }
    . . .

…但我不知道这是否是一种方法。

我会做
btnSave。单击(发件人,参数)。这是MSDN上的页面:

我会做
btnSave。单击(发件人,参数)。这是MSDN上的页面:

将要执行的业务逻辑放在一个单独的方法(例如DoSave())中,然后事件处理程序都可以调用该内部方法,而不是直接相互调用

通过直接调用事件处理程序方法来“伪造”事件很难看,可能会导致错误(将来修改事件处理程序的任何程序员都可能不知道在不同于预期/记录的条件下可以调用它,这可能会导致打印选项行为异常,甚至在尝试执行保存操作时崩溃)


此外,您很可能希望在将来从其他地方执行保存操作,因此最好将业务逻辑与激活它的使用接口分开。

将要执行的业务逻辑放在一个单独的方法(例如DoSave())中,然后,事件处理程序都可以调用该内部方法,而不是直接相互调用

通过直接调用事件处理程序方法来“伪造”事件很难看,可能会导致错误(将来修改事件处理程序的任何程序员都可能不知道在不同于预期/记录的条件下可以调用它,这可能会导致打印选项行为异常,甚至在尝试执行保存操作时崩溃)


此外,您很可能希望在将来从其他地方执行保存操作,因此最好将业务逻辑与激活它的使用接口分开。

编译错误是什么?WinForms?WPF?ASP.NET?对不起;可以说,我现在更改了标签(Windows CE)/WinForms。编译错误为“System.Windows.Forms.Button”不包含“PerformClick”的定义。此链接指定.NET 1.1,因为.NET 1.1中显示了PerformClick(),必须是CE元素阻止它。编译错误是什么?WinForms?WPF?ASP.NET?对不起;可以说,我现在更改了标签(Windows CE)/WinForms。编译错误为“System.Windows.Forms.Button”不包含“PerformClick”的定义。此链接指定.NET 1.1,因为.NET 1.1中显示了PerformClick(),必须是CE元素阻止它。+1,这一点再强调也不过分!做语义正确的事情的另一个原因是在将来的维护和更改中避免WTF;我通常在编写新的代码时会这样做,但在维护现有应用程序并按照添加此功能的说明进行操作时,我改变了我的正常习惯。这是正确的解决方案,不要依赖GUI处理程序来执行业务逻辑。找到一种直接调用业务逻辑的方法。+1,这一点再强调也不为过!做语义正确的事情的另一个原因是在将来的维护和更改中避免WTF;我通常在编写新的代码时会这样做,但在维护现有应用程序并按照添加此功能的说明进行操作时,我改变了我的正常习惯。这是正确的解决方案,不要依赖GUI处理程序来执行业务逻辑。找到一种直接调用业务逻辑的方法。当事件声明为
事件
时,您无法执行此操作,因为
事件
将除
+=
-=
之外的所有事件限制为私有范围。当事件声明为
事件
时,您无法执行此操作,因为
事件
将除
+=
-=
之外的所有范围限制为私有范围。