Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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#_Winforms_Events_Compact Framework - Fatal编程技术网

C# 通过物体投掷事件

C# 通过物体投掷事件,c#,winforms,events,compact-framework,C#,Winforms,Events,Compact Framework,我正在用.Net Compact Framework 2.0 SP2和C#开发一个Windows Mobile 5.0或更高版本的应用程序 我有一个Winform(Form1)和一个包含另一个控件(Control2)的控件(Control1)。例如,一个带有面板的winform,在这个面板中有一个按钮,但在我的例子中,Control1和Control2是自定义控件 Control2有一个事件,单击,当用户单击它时会抛出该事件。此单击事件必须由Form1处理。为此,首先我在Control1上处理事

我正在用.Net Compact Framework 2.0 SP2C#开发一个Windows Mobile 5.0或更高版本的应用程序

我有一个Winform(Form1)和一个包含另一个控件(Control2)的控件(Control1)。例如,一个带有面板的winform,在这个面板中有一个按钮,但在我的例子中,Control1Control2是自定义控件

Control2有一个事件,单击,当用户单击它时会抛出该事件。此单击事件必须由Form1处理。为此,首先我在Control1上处理事件,该事件抛出一个在Form1上处理的新事件。这是我的代码:

在控件1上:

public event EventHandler Control2Click;

private void control2_Click(object sender, EventArgs e)
{
    if (Control2Click != null)
    {
        Control2Click(sender, e);
    }
}
private void control1_Control2Click(object sender, EventArgs e)
{
    // Do something interesting.
}
在表格1上:

public event EventHandler Control2Click;

private void control2_Click(object sender, EventArgs e)
{
    if (Control2Click != null)
    {
        Control2Click(sender, e);
    }
}
private void control1_Control2Click(object sender, EventArgs e)
{
    // Do something interesting.
}
有没有更好的方法来处理控件2\u直接在表单1中单击?我不知道我的方式是否有一个坏的表现,这种事件可以处理得更好


谢谢大家!

是什么阻止您直接从Form1连接Control2 Click事件?Control1是否通过属性公开Control2?或者在Control1上公开一个事件,该事件实际上与Control2单击事件挂钩?例如:

// In Control1
// Assuming Control2 is some sort of Save button, for example
public EventHandler SaveClicked
{
    add { control2.Click += value; }
    remove { control2.Click -= value; }
}
请注意:

  • 如果在
    Control1
    中更改
    control2
    的值,事件处理程序将不会被“转移”,这将是不幸的
  • 事件处理程序中的sender参数将引用Control2,而不是Control1

老实说,无论您如何处理,我都不会认为这是一个性能问题——这只是一两次委托调用。

不,您做得对。这是将事件从不能直接从容器控件访问的嵌套控件中冒泡出来的正确方法。您通常会使用PerformClick()方法触发Click事件,但在CF中似乎不可用

性能不是问题,调用委托目标非常快,在桌面计算机上大约需要十几纳秒。点击是一个“人类时间”事件,任何小于20毫秒的时间都被视为“瞬间”