Рейтинг:
10
Maciej Los
Я не уверен, что хорошо вас понимаю, но, похоже, вы хотите отслеживать изменения переменных.
1. Переменные отслеживания грязный для набора причин...
2. Если вы хотите получать информацию об изменениях переменных, используйте Class
и вызовите событие в сеттере, например:
Public Class myVar
Private mValue As Integer
Public Event VariableChanged(ByVal mvalue As Integer)
Public Property Variable() As Integer
Get
Variable = mValue
End Get
Set(ByVal value As Integer)
mValue = value
RaiseEvent VariableChanged(mValue)
End Set
End Property
End Class
Использование:
Public Class Form1
Private WithEvents test As New myVar
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
test.Variable = CInt(TextBox1.Text)
End Sub
Private Sub VariableChanged(ByVal NewValue As Integer) Handles test.VariableChanged
MessageBox.Show(NewValue)
End Sub
End Class
Приведенный выше код исходит от:
vb.net - обнаружение изменения переменной. [Решено] | DaniWeb[
^]
Если я ошибаюсь и вы хотите отслеживать переменные во время отладки, используйте точки останова, см.:
Установка часов для переменных - Visual Studio | Microsoft Docs[
^]
phil.o
Мой 5-й :)
Разве вы не имели в виду точки останова вместо точек торможения?
Maciej Los
О да! Уровень кафе в моем теле слишком низок... Мне нужно заполнить его...
[РЕДАКТИРОВАТЬ]
Спасибо! Измененный ;)
Member 14152690
Это сработало, но я должен вручную отслеживать изменения. Дело в том, что:
Я пытаюсь подражать выражению С-типа.
int a = 100;
int *p;
p = &a;
Что-то вроде этого. Я изучал Си много лет назад, и я не очень хорошо помню его,
но подумайте, что таким образом вы получили адрес памяти, и когда a изменилось, я получил значение в p, независимо от того, сколько раз a изменилось.
Есть ли какой-нибудь способ?. Спасибо, новенький
Maciej Los
Даже если я не уверен, что вы подразумеваете под "отслеживанием вручную изменений", самый короткий ответ: Нет. VB.NET это не С.
Ralf Meier
Что Мацей имеет в виду, когда спрашивает "Почему" :
Возможно, для вас есть возможное решение, если мы поймем, чего вы на самом деле пытаетесь достичь ...
Maciej Los
Святая правда!
Спасибо, Ральф.
Member 14152690
В vb.net, выступает в качестве указателя IntPtr указатель и значение.метод GetHashCode, как адрес. Проблема в том, что gethashcode постоянно меняется. Это я хочу отслеживать, хэш-код переменной.
phil.o
Метод GetHashCode() не имеет ничего общего с адресами памяти :)
Member 14152690
Решение, которое вы мне дали раньше, работает, если я изменяю тип переменных (например, a на wrapper и b на wrapper), но я хочу, чтобы переменная оставалась нетронутой.
Member 14152690
Простите, я имел в виду переменную "а" нетронутой
Member 14152690
dim a как целое число = 100
Дим P в качестве указателя IntPtr
Р = маршал.оператор sizeof(а)
p = a.gethashcode или p = a (в эффектах это одно и то же)
Итак, a = 100 и p = 100
а = 50
Итак, a = 50 и p = 100
Именно это я имею в виду, когда говорю о переменных отслеживания. Я хочу, чтобы р было 50, а не 100.
класс-оболочку
значение публичного свойства в виде целого числа
end класса
Дим, а как новой обертке, б в качестве новой обертке
а.значение = 100
б.значение = а
Если я пишу так, это работает, но я хочу, чтобы переменная 'a' была собственным типом (целочисленным, в данном случае), а не оболочкой. Ах, и забыл об этом (я не уверен, что это происходит с указателями int c) Если я пишу с оболочками, смена б меняет. Я пытаюсь определить, что изменение переменной b при переменной смене, но не переменная изменение переменной изменение, Когда б.
Спасибо
Заранее спасибо
Ralf Meier
Каждый путь, который ты нам показал, говорит одно и то же :
Вы прямо или косвенно присваиваете значение от "А" до "р" - но только в момент инструкции.
То, что вы хотите иметь, - это что - то вроде привязки-каждый раз, когда "а" меняет свое значение, то же самое должно происходить и с "р" - р автоматически получает значение от "А".
Но... для чего тебе это нужно ? Какой в этом скрытый смысл? ..
Пожалуйста, поймите - потому что я не понял смысла, я не в состоянии дать полезный ответ ...
Maciej Los
Честно говоря, я понимаю, что вы хотите использовать 'p' в качестве указателя (адрес переменной 'a' в памяти), но(!) я уже упоминал об этом VB.NET это не С. И строго говоря: VB.NET у него нет указателей (и уж точно не таких, как указатели с).
В этот момент самая близкая мысль, которая пришла мне в голову, - это использовать Делегаты (Visual Basic)[^], которые иногда описываются как типобезопасные указатели функций, поскольку они похожи на указатели функций, используемые в других языках программирования. Но в отличие от указателей на функции, делегаты Visual Basic-это ссылочный тип, основанный на системе классов.Делегат. Делегаты могут ссылаться как на общие методы — методы, которые могут быть вызваны без конкретного экземпляра класса, — так и на методы экземпляра.
Извините, но другого выхода я не вижу...
Member 14152690
У меня просто появилась идея, которая может мне помочь. Но нужна помощь для возвращения.
Общественного Класса Form1
Dim a As Integer = engine(100, a.GetType, p)
Дим P в качестве указателя IntPtr = новый тип IntPtr(а)
Частная суб Form1_Click(отправителя как объект, как система.EventArgs) Обрабатывает Меня.Click
Отлаживать.Print("первый проход")
Отлаживать.Напечатать("а:" &амп; с)
Отлаживать.Печати("б:" &амп; С. Метод toString)
a = двигатель(50, a.GetType, p)
Отлаживать.Печать("второй проход")
Отлаживать.Напечатать("а:" &амп; с)
Отлаживать.Печати("б:" &амп; С. Метод toString)
Конец Подводной Лодки
Частная двигателя функция(бывал вывода Как объект, как byval T как тип, бывал P в качестве указателя IntPtr)
p = ctype(o, t)
Возвращение о'
Конечная Функция
End Класса
Я думаю, что это сработает, и у меня была переменная нетронутой, но я не знаю, как ее вернуть. Это дает мне ошибку в ctype. Может быть, нужны какие-то изменения
Member 14152690
Извините, я не читал предыдущий пост. Спасибо
Maciej Los
Не беспокойся. Взгляните на время публикации ;)