s95*_*163 3 .net f# visual-studio winforms
我观察到,根据控件的类型,VS有时会正确识别它所属的类型,但有时候它只会坚持一些EventArgs.
这是一些Winforms/.Net工件吗?
例如,在这种情况下,我在表单上有一些选项卡(f1).x将被正确识别为TabControlEventArgs,我可以插入其中.
f1.tabControl1.Selected
|> Event.filter (fun x -> x.TabPage.Name <> "Tab3")
|> Event.add (fun _ -> f1.comboBox2.Enabled <- false)
Run Code Online (Sandbox Code Playgroud)
但在下面的例子中,x只会显示EventArgs,我必须明确标识属性:
f1.my2CheckBox.CheckedChanged
|> Event.filter (fun x -> not f1.my2CheckBox.Checked)
|> Event.add (fun x -> f1.comboBox2.Enabled <- false)
Run Code Online (Sandbox Code Playgroud)
我认为这是因为某些控件传递的事件信息比其他控件更多.是否存在特定原因,或者这只是一个实现细节,基于某些控件可以执行的操作,因此例如对于tabcontrol,访问其页面是有意义的.
这是一些winforms/.Net工件吗?
嗯,它并不是特别针对Windows Forms,因为你可以在任何地方看到它...它只取决于使用哪个委托类型来声明事件.例如,是声明为TabControl.Selected的类型TabControlEventHandler:
public delegate void TabControlEventHandler(object sender, TabControlEventArgs e)
Run Code Online (Sandbox Code Playgroud)
...而CheckBox.Changed声明为type EventHandler,声明为:
public delegate void EventHandler(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)
如果你在自己的代码中做同样的事情,你会看到完全相同的差异.基本上,当您声明一个事件时,您可以选择事件处理程序类型的具体方式,并且控件作者采用了不同的方法.对于CheckBoxChanged,您当然可以轻松地向复选框询问其新状态.