Вопрос или проблема
У меня ошибка Error BC32013 Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.
в datagridview с vb.net
Цель кода – проверить, пустая ли ячейка или имеет значение 0, или если она пустая и имеет значение 0, то добавление новых строк не допускается
Пожалуйста, помогите мне, чтобы я мог решить эту ошибку
Спасибо
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
If keyData = Keys.Tab AndAlso CBool(Keys.Enter) Then
Dim SelectDgv = GetSELECT()
If Me.DataGridView1.Rows.Count > 0 Then
'ошибка ниже этой строки кода
If Not DataGridView1.CurrentRow.Cells.Cast(Of DataGridViewCell).Any(Function(cell) String.IsNullOrEmpty(cell.FormattedValue?.ToString()) OrElse cell.FormattedValue = 0) Then
BindingSource1.AddNew()
Else
DataGridView1.CurrentCell = DataGridView1.CurrentRow.Cells(1)
DataGridView1.BeginEdit(False)
End If
Else
End If
Return True
ElseIf keyData = Keys.F1 AndAlso CBool(Keys.Enter) Then
DataGridView1.CurrentCell = DataGridView1.CurrentRow.Cells(5)
DataGridView1.BeginEdit(False)
Else
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
Ответ или решение
Ошибка "Option Strict On disallows operands of type Object for operator ‘=’ в DataGridView на VB.NET"
При работе с VB.NET включение Option Strict On
помогает предотвратить ошибки типизации в вашем коде. Ошибка, которую вы получаете:
Error BC32013 Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.
означает, что вы пытаетесь сравнить объекты, которые переданы как тип Object
, с помощью оператора =
. В VB.NET, когда Option Strict
установлен в On
, необходимо использовать оператор Is
для проверки идентичности объектов и привести переменные к необходимому типу перед сравнением.
Решение проблемы в вашем коде
Ваша цель заключается в том, чтобы проверить, нужно ли добавлять новую строку в DataGridView
, если ячейки пустые или имеют значение 0. Следует внести изменения в строку, где выявляется ошибка. Попробуйте следующий подход:
If Not DataGridView1.CurrentRow.Cells.Cast(Of DataGridViewCell)().Any(Function(cell) String.IsNullOrEmpty(cell.FormattedValue?.ToString()) OrElse (Convert.ToInt32(cell.FormattedValue) = 0)) Then
Объяснение изменений
-
Использование
Convert.ToInt32
:
Я изменил частьcell.FormattedValue = 0
наConvert.ToInt32(cell.FormattedValue) = 0
. Это позволяет избежать ошибок приведения типов, поскольку мы явным образом преобразуем значение ячейки вInteger
. -
Проверка на пустоту:
ПроверкаString.IsNullOrEmpty(cell.FormattedValue?.ToString())
остается, поскольку она корректно работает для проверки пустоты на строковом уровне.
Альтернативный способ
Если вы все еще хотите использовать оператор Is
, вот пример того, как это можно сделать:
If Not DataGridView1.CurrentRow.Cells.Cast(Of DataGridViewCell)().Any(Function(cell) String.IsNullOrEmpty(cell.FormattedValue?.ToString()) OrElse (cell.FormattedValue IsNot Nothing AndAlso Convert.ToInt32(cell.FormattedValue) = 0)) Then
Здесь мы добавляем проверку cell.FormattedValue IsNot Nothing
, чтобы убедиться, что значение ячейки не является Nothing
, прежде чем пытаться преобразовать его к Integer
.
Заключение
После внесения указанных изменений вы сможете избежать ошибки, связанной с операцией сравнения, и ваше приложение будет обрабатывать добавление новых строк в DataGridView
корректно. Включение Option Strict On
— это хорошая практика, которая помогает поддерживать типобезопасность, поэтому старайтесь придерживаться его в своих проектах.