.net 为什么在过滤事件时,某些GUI控件的类型intellisense/类型推断存在差异

.net 为什么在过滤事件时,某些GUI控件的类型intellisense/类型推断存在差异,.net,winforms,visual-studio,f#,.net,Winforms,Visual Studio,F#,我观察到,基于控件的类型,VS有时会正确地识别它所属的类型,但有时它只会坚持使用某种通用的EventArgs 这是Winforms/.Net工件吗 例如,在本例中,我在表单(f1)上有一些选项卡。x将正确标识为选项卡ControlEventArgs,我可以在其中添加点 f1.tabControl1.Selected |> Event.filter (fun x -> x.TabPage.Name <> "Tab3") |> Event.add (fu

我观察到,基于控件的类型,VS有时会正确地识别它所属的类型,但有时它只会坚持使用某种通用的
EventArgs

这是Winforms/.Net工件吗

例如,在本例中,我在表单(f1)上有一些选项卡。x将正确标识为
选项卡ControlEventArgs
,我可以在其中添加点

f1.tabControl1.Selected
    |> Event.filter (fun x -> x.TabPage.Name <> "Tab3")
    |> Event.add (fun _ -> f1.comboBox2.Enabled <- false) 

我认为这是因为一些控件传递的事件信息比其他控件多。这是否有特定的原因,或者这只是一个实现细节,取决于某些控件可以做什么,因此,例如,对于tabcontrol,访问其页面是有意义的

这是winforms/.Net工件吗

它并不是特别针对Windows窗体,因为你可以在任何地方看到它。。。它只取决于用于声明事件的委托类型。例如,其类型声明为:

公共委托无效TabControlEventHandler(对象发送方,TabControlEventArgs e)
。。。鉴于声明为类型,声明为:

public委托void EventHandler(对象发送方,EventArgs e)

如果您在自己的代码中执行相同的操作,您将看到完全相同的差异。基本上,当您声明事件时,您可以选择事件处理程序类型的具体程度,控件作者对此采取了不同的方法。当然,对于
CheckBoxChanged
,您可以轻松地询问复选框的新状态。

@GuyCoder这是个好主意!
f1.my2CheckBox.CheckedChanged
    |> Event.filter (fun x ->  not f1.my2CheckBox.Checked)
    |> Event.add (fun x -> f1.comboBox2.Enabled <- false)