Cognex Insight SetComment 不持久
Cognex Insight SetComment Not Persisting
我的工作是将单元格位置存储为特定单元格中的注释,但我 运行 遇到 CvsInsight::SetComment 方法无法持续的情况。
我将表单显示为对话框,用户可以在其中更改存储在评论单元格中的单元格位置,当用户单击保存按钮时,我正在创建自定义的新实例 class,将属性设置为新的单元格位置(由用户设置),将 DialogResult 设置为 OK,然后关闭窗体。然后在我调用 ShowDialog 的表单中,我为每个 属性 中的自定义 class 在各自的单元格上调用 SetComment 方法。
这就是我在对话框的“保存”按钮中所做的:
Private Sub ButtonSave_Click(sender As Object, e As EventArgs) Handles ButtonSave.Click
' Check if the name, username, password, pass, fail, total, reset, and results are all set
Dim invalidFields As List(Of String) = New List(Of String)()
For Each pair In _requiredFields
If (String.IsNullOrWhiteSpace(DirectCast(Controls.Find(pair.Key, True).FirstOrDefault, TextBox).Text)) Then
invalidFields.Add(pair.Value)
End If
Next
If (invalidFields.Any()) Then
MessageBox.Show($"The following required fields are missing a value: {String.Join(", ", invalidFields)}", "Invalid Form", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' Set the returned object's values, set the dialog result, and then close the dialog
CameraSettings = New CameraSettings() With {
.FailCell = FailCellLocation.Text,
.FocusCell = FocusCell.Text,
.IsVisible = Visibility.Checked,
.PassCell = PassCellLocation.Text,
.ResetCell = ResetCellLocation.Text,
.ResultsCell = ResultsCellLocation.Text,
.TotalCell = TotalCellLocation.Text
}
DialogResult = DialogResult.OK
Close()
End Sub
这就是我在打开对话框的表单中所做的:
Private Sub Settings_Click(sender As Object, e As EventArgs) Handles Settings.Click
Using cameraSettingsDialog As frmCameraSetting = New frmCameraSetting(InsightDisplay.InSight)
With cameraSettingsDialog
If (.ShowDialog = DialogResult.OK) Then
InsightDisplay.InSight.SetComment(New CvsCellLocation(_focusCell), New CvsCellComment(.CameraSettings.FocusCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_passCell), New CvsCellComment(.CameraSettings.PassCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_failCell), New CvsCellComment(.CameraSettings.FailCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_totalCell), New CvsCellComment(.CameraSettings.TotalCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_resultCell), New CvsCellComment(.CameraSettings.ResultsCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_resetCell), New CvsCellComment(.CameraSettings.ResetCell))
GetSettingCells()
End If
End With
End Using
End Sub
发生的事情是代码执行时没有抛出任何异常,但未设置注释。令人沮丧的是,我无法调试,因为每当我尝试在设置注释的过程中访问结果时,CvsInsightDisplay 的 Insight 都会设置为 null。但是,我可以验证 CameraSettings 的属性是否符合我的预期,因为如果我设置 Console.WriteLine
来打印各种属性,它们是正确的。
查看 SDK,我找不到任何文档来说明为什么它不会在不抛出异常的情况下设置值。
对于那些 运行 遇到相同问题的人,问题已解决,因为我试图设置一个超过作业中最大行数的单元格。为了解决这个问题,我不得不将设置注释的单元格更改为行索引较低的单元格。
遗憾的是,Cognex 没有在其任何文档中记录此行为。
我的工作是将单元格位置存储为特定单元格中的注释,但我 运行 遇到 CvsInsight::SetComment 方法无法持续的情况。
我将表单显示为对话框,用户可以在其中更改存储在评论单元格中的单元格位置,当用户单击保存按钮时,我正在创建自定义的新实例 class,将属性设置为新的单元格位置(由用户设置),将 DialogResult 设置为 OK,然后关闭窗体。然后在我调用 ShowDialog 的表单中,我为每个 属性 中的自定义 class 在各自的单元格上调用 SetComment 方法。
这就是我在对话框的“保存”按钮中所做的:
Private Sub ButtonSave_Click(sender As Object, e As EventArgs) Handles ButtonSave.Click
' Check if the name, username, password, pass, fail, total, reset, and results are all set
Dim invalidFields As List(Of String) = New List(Of String)()
For Each pair In _requiredFields
If (String.IsNullOrWhiteSpace(DirectCast(Controls.Find(pair.Key, True).FirstOrDefault, TextBox).Text)) Then
invalidFields.Add(pair.Value)
End If
Next
If (invalidFields.Any()) Then
MessageBox.Show($"The following required fields are missing a value: {String.Join(", ", invalidFields)}", "Invalid Form", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
' Set the returned object's values, set the dialog result, and then close the dialog
CameraSettings = New CameraSettings() With {
.FailCell = FailCellLocation.Text,
.FocusCell = FocusCell.Text,
.IsVisible = Visibility.Checked,
.PassCell = PassCellLocation.Text,
.ResetCell = ResetCellLocation.Text,
.ResultsCell = ResultsCellLocation.Text,
.TotalCell = TotalCellLocation.Text
}
DialogResult = DialogResult.OK
Close()
End Sub
这就是我在打开对话框的表单中所做的:
Private Sub Settings_Click(sender As Object, e As EventArgs) Handles Settings.Click
Using cameraSettingsDialog As frmCameraSetting = New frmCameraSetting(InsightDisplay.InSight)
With cameraSettingsDialog
If (.ShowDialog = DialogResult.OK) Then
InsightDisplay.InSight.SetComment(New CvsCellLocation(_focusCell), New CvsCellComment(.CameraSettings.FocusCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_passCell), New CvsCellComment(.CameraSettings.PassCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_failCell), New CvsCellComment(.CameraSettings.FailCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_totalCell), New CvsCellComment(.CameraSettings.TotalCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_resultCell), New CvsCellComment(.CameraSettings.ResultsCell))
InsightDisplay.InSight.SetComment(New CvsCellLocation(_resetCell), New CvsCellComment(.CameraSettings.ResetCell))
GetSettingCells()
End If
End With
End Using
End Sub
发生的事情是代码执行时没有抛出任何异常,但未设置注释。令人沮丧的是,我无法调试,因为每当我尝试在设置注释的过程中访问结果时,CvsInsightDisplay 的 Insight 都会设置为 null。但是,我可以验证 CameraSettings 的属性是否符合我的预期,因为如果我设置 Console.WriteLine
来打印各种属性,它们是正确的。
查看 SDK,我找不到任何文档来说明为什么它不会在不抛出异常的情况下设置值。
对于那些 运行 遇到相同问题的人,问题已解决,因为我试图设置一个超过作业中最大行数的单元格。为了解决这个问题,我不得不将设置注释的单元格更改为行索引较低的单元格。
遗憾的是,Cognex 没有在其任何文档中记录此行为。