#wpf #vb.net
#wpf #vb.net
Вопрос:
У меня есть форма, в которой при сохранении / добавлении следующей точки при нажатии кнопки SaveAddNext появляется всплывающее окно, спрашивающее пользователя, хотят ли они заполнить новые поля на основе старых. Это работает отлично.
Однако у меня возникли проблемы с реализацией этого в форме кнопки. Мне также нужна эта ситуация, если пользователь решает выйти из формы, повторно ввести ее, добавить новую точку и хочет автоматически заполнить.
Биты рабочего кода SaveAddNext :
Public Sub New(ByVal Record As Feature,
ByVal previousRecord As Till_NonTillStation,
ByVal SurficialType As enumTillTypes)
MyBase.New(Record, Constants.COL_TILL_CREATED_BY,
Constants.COL_TILL_CREATION_DATE, Constants.COL_TILL_EDITED_BY,
Constants.COL_TILL_EDIT_DATE,
DirectCast(previousRecord.Geometry, Esri.ArcGISRuntime.Geometry.MapPoint))
If MessageBox.Show("Autopopulate fields from last point collected?", "Record Autopopulation", MessageBoxButton.YesNo) = vbYes Then
Me.EXPOSURE_TYPE = previousRecord.EXPOSURE_TYPE
Me.EXPOSURE_HEIGHT = previousRecord.EXPOSURE_HEIGHT
Me.UNIT_THICKNESS = previousRecord.UNIT_THICKNESS
Me.UNIT_TYPE = previousRecord.UNIT_TYPE
Me.TILL_FACIES = previousRecord.TILL_FACIES
Me.PERCENT_CLAY = previousRecord.PERCENT_CLAY
Me.FIRST_LITHOFACIES_TYPE = previousRecord.FIRST_LITHOFACIES_TYPE
Me.CONSISTENCY = previousRecord.CONSISTENCY
Me.COLOUR = previousRecord.COLOUR
Me.CLAST_PROVIDENCE = previousRecord.CLAST_PROVIDENCE
Me.CLAST_ROUNDNESS = previousRecord.CLAST_ROUNDNESS
Me.NOTES = previousRecord.NOTES
End If
Пока что код кнопки. Я делаю вызов подразделу New, он переходит во всплывающее окно, но не считывает никаких данных. Я не уверен, как обращаться к данным :
Private Sub btnAutopopulate_Click(sender As Object, e As RoutedEventArgs) Handles btnAutopopulate.Click
previousRecord = New Till_NonTillStation(Constants.TillNonTillFeatureTable.CreateFeature,
_feature, enumTillTypes.Non_Till)
End Sub
Ответ №1:
В VB.NET Sub new — это конструктор объекта.
Когда вы нажимаете на btnAutopopulate, вы создаете новый экземпляр Till_NonTillStation
, поэтому любые предыдущие данные, сохраненные в других экземплярах, недоступны.
Не используйте (вызов) Sub New(конструктор) . Создайте другую функцию или метод для установки предыдущих данных.
Вот мое предложение, основанное на ваших последних комментариях:
1. Создайте глобальные переменные для хранения ваших данных: например, используйте
Общедоступный общий EXPOSURE_TYPE в виде строки Это отличается от использования Me.EXPOSURE_TYPE, который зависит от экземпляра формы.
Выше приведен простой способ, однако многие программисты не одобряют использование глобальных переменных, поэтому лучший способ — создать класс (вне формы) и сохранить ваши данные внутри него.
Комментарии:
1. Хм — понятно. Создаем новый вспомогательный UsePreviousData(), который будет использовать btnAutopopulate_Click, но я все еще, кажется, натыкаюсь на ту же стену. Не уверен, как ссылаться на данные предыдущей записи в этой функции / без использования подстановки new .
2. Это только первый шаг к использованию кнопки. Вопрос в том, что вы делаете после этого. Где хранятся предыдущие данные? Как насчет того, чтобы попытаться сохранить предыдущие данные в коллекции или классе или даже в массиве, а затем использовать их.
3. Убедитесь, что вы не вызываете Sub new в своем коде. Я обновлю свой ответ.