Назначение минимального значения в полосе прокрутки вызывает событие изменения полосы прокрутки, но назначение максимального значения не - PullRequest
0 голосов
/ 14 декабря 2018

Я не уверен, почему установка свойства scrollbar.Min вызывает событие, когда я присваиваю ему значение, но свойство scrollbar.Max не запускает событие, когда я присваиваю ему значение.

используемый код приведен ниже:

Me.scrPieces.Min = frmSettings.tbxPiecesLow.Value
Me.scrPieces.Max = frmSettings.tbxPiecesHigh.Value
Me.scrPieces.SmallChange = Application.WorksheetFunction.RoundUp((frmSettings.tbxPiecesHigh.Value - frmSettings.tbxPiecesLow.Value) / 40, 0)
Me.scrPieces.LargeChange = Application.WorksheetFunction.RoundUp((frmSettings.tbxPiecesHigh.Value - frmSettings.tbxPiecesLow.Value) / 8, 0)

Когда я прохожу через Me.scrPieces.Min = frmSettings.tbxPiecesLow.Value и ему присваивается значение, происходит событие scrPieces.Change():

Private Sub scrPieces_Change()
i = Me.scrPieces.Min
j = 0

Me.tbxPiecesD = Me.scrPieces.Value

Do While i <= Me.scrPieces.Max
    ThisWorkbook.Worksheets("Simulation-Chart").Cells(2 + j, 1) = i
    ThisWorkbook.Worksheets("Simulation-Chart").Cells(2 + j, 2) = (CostPerPiece * (Me.scrFoilMarkup.Value / BigNum) + LaborCostPerPiece * (Me.scrLaborMarkup.Value / BigNum)) * (Me.scrQuoteMarkup.Value / BigNum)
    i = i + (Me.scrPieces.Max - Me.scrPieces.Min) / 10
    j = j + 1
Loop

MyChart.Export Filename:=ImgName, FilterName:="GIF"
Me.imgChart.Picture = LoadPicture(ImgName)

End Sub

Но когда я прохожуMe.scrPieces.Max, он не будет активировать событие scrPieces.Change() и просто перейдет к следующей строке.

См. Фотографии ниже:

Пошаговое выполнение кода после назначения значения дляscrPieces.Min, как показано ниже: enter image description here

Событие scrPieces_Change() сработает enter image description here

Однако, присваивая scrPieces.Max не будет запускать событие.enter image description here

Код будет немедленно перемещен на следующую строку, как показано ниже: enter image description here

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

На MSDN , событие Change привязано к полосе прокрутки Value, , а не к Max или Min.Я считаю, что единственная причина, по которой вы получаете onChange при изменении Min, заключается в том, что при этом также настраивается Value в качестве побочного эффекта.

Если вы хотите убедиться, что scrPieces_Change вызван, вы можетена самом деле вызывайте его сразу после установки Min и Max.Это обычная функция, поэтому Call scrPieces_Change будет работать нормально.

0 голосов
/ 14 декабря 2018

Как я уже говорил в комментариях ранее.
Используйте textbox_change и, если значение превышает ваш предел, установите для этого значения ограничение.

Private Sub scrPieces_Change()
    If Me.scrPieces.Value > YourLimit Then
        Me.scrPieces.Value = YourLimit
    End If
End Sub

Если этот предел установлен при инициализации, тогдасоздайте глобальную переменную, которой вы также можете присвоить это значение.
Таким образом, оно будет доступно в scrPieces_Change

...