From dc25e9f4016f69287bbba42f02277a30eb7e185e Mon Sep 17 00:00:00 2001 From: Garry Newman Date: Wed, 17 Dec 2025 12:02:52 +0000 Subject: [PATCH] Fix DropDown control struggling with empty/null values --- game/addons/base/code/UI/DropDown.cs | 22 ++++++++++++++-------- game/addons/base/code/UI/Dropdown.cs.scss | 1 + 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/game/addons/base/code/UI/DropDown.cs b/game/addons/base/code/UI/DropDown.cs index eb419f9f..4ec385d5 100644 --- a/game/addons/base/code/UI/DropDown.cs +++ b/game/addons/base/code/UI/DropDown.cs @@ -42,11 +42,7 @@ namespace Sandbox.UI get => _value; set { - if ( _valueHash == HashCode.Combine( value ) ) - return; - - if ( $"{_value}" == $"{value}" ) - return; + if ( _valueHash == HashCode.Combine( value ) ) return; _valueHash = HashCode.Combine( value ); _value = value; @@ -79,11 +75,13 @@ namespace Sandbox.UI if ( selected != null ) { - Value = $"{selected.Value}"; + var v = $"{selected.Value}"; + + Value = v; Icon = selected.Icon; Text = selected.Title; - ValueChanged?.Invoke( Value.ToString() ); + ValueChanged?.Invoke( v ); CreateEvent( "onchange" ); CreateValueEvent( "value", selected?.Value ); } @@ -185,7 +183,15 @@ namespace Sandbox.UI /// protected virtual void Select( string value, bool triggerChange = true ) { - Select( Options.FirstOrDefault( x => string.Equals( x.Value.ToString(), value, StringComparison.OrdinalIgnoreCase ) ), triggerChange ); + Select( Options.FirstOrDefault( x => IsOptionMatch( x, value ) ), triggerChange ); + } + + private bool IsOptionMatch( Option option, string value ) + { + if ( option.Value == null || (option.Value is string stringValue && string.IsNullOrEmpty( value )) ) + return string.IsNullOrEmpty( value ); + + return string.Equals( option.Value?.ToString(), value, StringComparison.OrdinalIgnoreCase ); } protected override void OnParametersSet() diff --git a/game/addons/base/code/UI/Dropdown.cs.scss b/game/addons/base/code/UI/Dropdown.cs.scss index c9277f84..b9d96565 100644 --- a/game/addons/base/code/UI/Dropdown.cs.scss +++ b/game/addons/base/code/UI/Dropdown.cs.scss @@ -2,6 +2,7 @@ { gap: 2px; flex-grow: 1; + cursor: pointer; .button-right-column {