lelouch_vi 2 Ответов: 2

Как очистить числовой элемент управления updown и сохранить значение привязанной к нему метки?


Здравствуйте, у меня есть числовой элемент управления updown в моей форме и метка, которая изменяет значение в зависимости от события изменения числового значения updown. У меня также есть кнопка Очистить, которая очищает числовое обновление, и кнопка Сохранить, потому что моя форма подключена к базе данных.

Что происходит, когда я нажимаю кнопку up in numeric updown control, значение метки уменьшается и наоборот. Это работает так, как я и хотел. Теперь я пытаюсь сделать следующее: всякий раз, когда я нажимаю кнопку Очистить, я хочу, чтобы последнее значение метки было сохранено . Допустим, последнее значение метки равно 80, и я изменил значение числового updown на 20, так что значение метки теперь равно 60, когда я нажимаю кнопку clear, я хочу, чтобы значение метки снова было 80 и очистил элемент управления numeric updown, так как я не нажимал кнопку save, я просто очистил элемент управления numeric updown.

Что я уже пробовал:

Ниже приведен мой код для изменения числового значения updown. Пожалуйста помочь.

Static num As Integer = 100
        Static oldvalue As Integer


        If numCategory.Value > oldvalue Then

            num -= 1

            lblpoints.Text = num.ToString


        ElseIf numCategory.Value < oldvalue Then
            num += 1
            lblpoints.Text = num.ToString


        Else

            lblpoints.Text = ""

        End If

        oldvalue = numCategory.Value


это код для кнопки clear, но проблема с этим заключается в том, что после нажатия кнопки save он запускает мой оператор if выше, поэтому после сохранения он увеличивает метку на единицу.

numCategory.Value = nothing


Поэтому я использовал это вместо этого
numCategory.ResetText()

2 Ответов

Рейтинг:
6

lelouch_vi 2

После нескольких недель и дней поиска решения я уже нашел это:
Я просто оставлю это здесь для тех, кто ищет то же самое решение, что и мое.

Теперь это код, который я использую для СОБЫТИЕ NUD_VALUECHANGED:

Shered num As Integer = 100

Private Sub numCategory_ValueChanged(sender As Object, e As EventArgs) Handles numCategory.ValueChanged



        lblpoints.Text = (num - numCategory.Value).ToString



    End Sub


Ниже приведен код для моего СОХРАНИТЬ кнопка, потому что мой проект подключен к базе данных.
То, что он делает, это то, что он сохраняет ценность ЭТИКЕТКА и изменил значение самого NUD к 0 опять же в то время как ЭТИКЕТКА остается на том уровне, который он имеет до того, как СОХРАНИТЬ кнопка нажата
Static oldvalue As String
     oldvalue = lblpoints.Text
     numCategory.Value = 0
     lblpoints.Text = oldvalue
     num = Convert.ToInt32(oldvalue)


и для моего ПОНЯТНО кнопка:
Если пользователь просто хочет вернуть NUD к его значению по умолчанию.
numCategory.Value = numCategory.Minimum


Рейтинг:
0

OriginalGriff

Вы не можете сделать это без фаффинга - когда вы очищаете NumericUpDown, значение изменяется, и это запускает обновление.

Что вы могли бы сделать, так это иметь две переменные уровня класса (не используйте статические, это совсем не то, что вам нужно) целое число, которое хранит последнее значение, и логическое значение, которое "переопределяет" значение.
Затем в событии изменения проверьте переопределение: если оно установлено, очистите его и используйте сохраненное значение. Если это не так, используйте значение из NumericUpDown.
Когда вы хотите очистить элемент управления, сначала установите сохраненное значение и переопределение, а затем очистите элемент управления.


lelouch_vi 2

еще раз здравствуйте. Ты снова здесь, чтобы спасти меня. С тех пор как вы опубликовали этот ответ, я действительно изо всех сил стараюсь понять, что вы имели в виду под этим переопределением. Я могу, по крайней мере, понять, что вы пытаетесь объяснить, но проблема в том, что я не знаю, с чего начать. Я попытался объявить переменную, подобную тому, что вы сказали на уровне класса, как логическое значение. и это все. Я не знаю, что мне делать дальше. Я беспомощен.

OriginalGriff

В обработчике используйте оператор If, чтобы узнать, является ли логическое значение переопределения истинным или ложным. Я уверен, что ты знаешь, как это сделать, если перестанешь паниковать!

lelouch_vi 2

ха-ха, спасибо за моральную поддержку, может быть, я просто упускаю из виду кое-что здесь. Я дам вам знать, когда у меня уже будет прогресс.

lelouch_vi 2

Привет, я действительно заблудился. Я не знаю, что делать дальше.

Моя проблема заключается в следующем, скажем, например, я увеличиваю значение NUD до 20, так что метка должна стать 80, и я получил ее работу, но если я нажму кнопку "Очистить", которая имеет этот код numCategory.ResetText() для очистки NUD метка остается на уровне 80. Я хочу, чтобы он также был сброшен до любого значения, которое он имеет перед событием numCategory_ValueChanged, а не до его исходного значения, потому что я использую значение NUD в качестве точек, которые будут вставлены в базу данных, и я использую метку в качестве отображения того, сколько точек осталось для пользователя.

OriginalGriff

Внимательно прочитайте то, что я сказал в своем первоначальном ответе!

lelouch_vi 2

Привет, OriginalGriff мне удалось обойти мою проблему здесь. Честно говоря, я не знаю, как выполнить ваши предложения, и мне очень жаль.

Я сделал еще одну кнопку с именем capture, чтобы захватить значение метки до того, как NUD сможет изменить это значение.
Это код, который я использую для захвата значения метки.

retainedValue = Convert.ToInt32(lblpoints.Text)


и в кнопку Очистить я добавил этот код

numCategory.Value = 0lblpoints.Text = retainedValue.ToString()


Теперь он работает так, как я намеревался, но мне нужно нажать кнопку захвата, прежде чем я смогу сделать что-то еще с NUD. Я попытался вставить код в различные события NUD только для того, чтобы сначала не нажимать кнопку "Захват".
Пожалуйста, помоги мне еще раз. Я хочу избежать нажатия кнопки "захват".