Как вернуть ссылку на элемент управления? [Дубликат]

Попробуйте следующее:

temp3 = set(temp1) - set(temp2)
5
задан supercheetah 21 September 2013 в 00:30
поделиться

1 ответ

Для переменных объекта VB требуется назначить ключевое слово Set. Объектные свойства, которые также являются объектами, также должны быть Set. Ошибка выполнения 91 «объектная переменная не установлена» возникает, когда присвоение не использует это ключевое слово.

Это унаследовано от ключевого слова наследия Let для присвоения значений и Set, чтобы назначить ссылки ; Let в конечном итоге был устаревшим (хотя все еще необходим для определения свойств), а остался Set, оставив синтаксис присваивания значения VB6 / VBA, например [Let] variable = value, где «Let» является необязательным.

In объявление и назначение:

Dim SourceWindow As Window, QACheckWindow As Window
'this is like saying "Let SourceWindow = ActiveWindow":
SourceWindow = ActiveWindow

SourceWindow - объект , назначенный так, как если бы это было значение - следовательно, ошибка.

Эта ошибка также может возникать при доступе к не заданному объекту; эквивалент .net был бы тогда NullReferenceException:

Dim SourceWindow As Window, Dim WindowTitle As String
'"SourceWindow" reference isn't set, the object can't be accessed yet:
WindowTitle = SourceWindow.Caption 

Я собираюсь немного завысить здесь, но устаревший Let оператор не следует путать с предложением Let (в VB.net), которое в синтаксисе запроса LINQ (в VB.net) вычисляет значение и назначает его к новой переменной с запросом (пример из MSDN ):

From p In products 
Let Discount = p.UnitPrice*0.1 '"Discount" is only available within the query!
Where Discount >= 50
Select p.ProductName, p.UnitPrice, Discount

VB.net присваивает значения и , без необходимости указывать Let или Set, потому что в .net это различие является гораздо более тонкой линией, учитывая, как все в конечном итоге происходит от System.Object ... включая System.ValueType. Вот почему ключевое слово Set также устарело в VB.net , а также почему синтаксис VB.net для определения свойств сбросил Let в пользу Set.

11
ответ дан Community 22 August 2018 в 11:47
поделиться
  • 1
    +1 отличное объяснение! – David Zemens 21 September 2013 в 19:56
  • 2
    Благодарю. Исходя из других языков, Set кажется немного излишне подробным. – supercheetah 22 September 2013 в 18:03