我的GaugeControl
有三个量规。我编写了双击事件处理程序,如下所示:
AddHandler gc.DoubleClick, AddressOf HandleGaugeDoubleClick
Private Sub HandleGaugeDoubleClick(sender As Object, e As EventArgs)
'Gauge Information
End Sub
其中gc被decalred为GaugeControl类型,并且其中添加了三个GaugeControls。
我的问题是,如何获取双击哪个Gauge的信息?
注意这些仪表位于一个 GaugeControl 中,并在其集合中逐个添加。我如何能够获得双击的仪表信息。
修改
第一次,此代码段运行正常,但在点击相同的Gauge时第二次NullReferenceException
。
Dim hi As BasePrimitiveHitInfo = DirectCast(gc, IGaugeContainer).CalcHitInfo(e.Location) ' hi becomes Nothing when double clicked second time on same Gauge
If Not (TypeOf hi.Element Is DevExpress.XtraGauges.Core.Model.BaseGaugeModel) Then
Dim model = DevExpress.XtraGauges.Core.Model.BaseGaugeModel.Find(hi.Element)
If model IsNot Nothing AndAlso model.Owner IsNot Nothing Then
gauge = model.Owner
End If
End If
当双击同一个Gauge时,变量hi
变为null / Nothing第二次。由于hi
变为 Nothing ,因此条件变为false,其余代码生成NullReferenceException
。
请参阅以下代码段:
If (Not (gauge.Scales Is Nothing) And (gauge.Scales.Count > 0)) Then ' Actual exception here
For i As Integer = 0 To gauge.Scales.Count - 1
scaleComponent = gauge.Scales(i)
cGaugeToBeShown.Scales.Add(scaleComponent)
Next
End If
cGaugeToBeShown 为Dim cGaugeToBeShown As New CircularGauge
。
答案 0 :(得分:0)
我建议您使用GaugeControl.MouseDoubleClick事件,如下所示:
using DevExpress.XtraGauges.Base;
using DevExpress.XtraGauges.Core.Primitive;
//...
void gaugeControl1_MouseDoubleClick(object sender, MouseEventArgs e) {
BasePrimitiveHitInfo hi = ((IGaugeContainer)gaugeControl1).CalcHitInfo(e.Location);
if(!(hi.Element is DevExpress.XtraGauges.Core.Model.BaseGaugeModel)) {
var model = DevExpress.XtraGauges.Core.Model.BaseGaugeModel.Find(hi.Element);
if(model != null && model.Owner != null) {
IGauge gauge = model.Owner;
// do something with gauge
}
}
}
Imports DevExpress.XtraGauges.Base
Imports DevExpress.XtraGauges.Core.Primitive
'...
Private Sub gaugeControl1_MouseDoubleClick(sender As Object, e As MouseEventArgs)
Dim hi As BasePrimitiveHitInfo = DirectCast(gaugeControl1, IGaugeContainer).CalcHitInfo(e.Location)
If Not (TypeOf hi.Element Is DevExpress.XtraGauges.Core.Model.BaseGaugeModel) Then
Dim model = DevExpress.XtraGauges.Core.Model.BaseGaugeModel.Find(hi.Element)
If model IsNot Nothing AndAlso model.Owner IsNot Nothing Then
Dim gauge As IGauge = model.Owner
' do something with gauge
End If
End If
End Sub
相关示例:How to provide a custom mouse interaction with the GaugeControl.