Detecting when Enter Key is Pressed IntField

Hi, I think this question has been asked before but couldn’t find answers again. I’m displaying list in a custom inspector and but would like to be able to copy list values when changing the list size. Unfortunately I can’t see that it’s going to be possible without changing the size only when the enter/return key is pressed. Is there a way to detect when the enter key is pressed in a IntField? Heres a code snippet.

_showTags = EditorGUILayout.Foldout(_showTags, "Target Tags");
        if (_showTags)
        {
            _tagsArraySize = _target.tags.Count;
            _tagsArraySize = EditorGUILayout.IntField("Tag Count", _tagsArraySize);
            if (GUI.changed)
            {
                if (_tagsArraySize != _target.tags.Count)
                {
                    //implement copying old values here if new arraysize was smaller than the last
                    _tagsTemp = new List<String>(_tagsArraySize);
                    for (int tagIndex = 0; tagIndex < _tagsArraySize; tagIndex++)
                    {
                        _tagsTemp.Add("");
                    }

                    _target.tags = new List<String>(_tagsTemp);
                    EditorUtility.SetDirty(_target);
                }
            }

            for(int tagIndex = 0; tagIndex < _target.tags.Count; tagIndex++)
            {
                _target.tags[tagIndex] = EditorGUILayout.TextField(tagIndex.ToString(), _target.tags[tagIndex]);
                EditorUtility.SetDirty(_target);
            }

Take a look at the Event class. It contains all information on the current event that causes OnGUI / OnInspectorGUI or similar event handlers to execute.

Check if Event.current.type is EventType.KeyDown and Event.current.keyCode is KeyCode.Return .

Ok so I’ve got it to work but there’s one problem. I seem to be getting an exception error and I cant seem to make it out. Heres the new code and the error. Can anybody make it out?

if (_showTags)
        {
            _tagsArraySize = EditorGUILayout.IntField("Tag Count", _tagsArraySize);
            Event e = Event.current;
            if (e.type != null && e.isKey== true && e.keyCode==KeyCode.Return)
            {
                if (_tagsArraySize != _target.tags.Count)
                {
                    //implement copying old values here if new arraysize was smaller than the last
                    _tagsTemp = new List<String>(_tagsArraySize);
                    for (int tagIndex = 0; tagIndex < _tagsArraySize; tagIndex++)
                    {
                        _tagsTemp.Add("");
                    }

                    _target.tags = new List<String>(_tagsTemp);
                    EditorUtility.SetDirty(_target);
                }
            }

            for(int tagIndex = 0; tagIndex < _target.tags.Count; tagIndex++)
            {
                _target.tags[tagIndex] = EditorGUILayout.TextField(tagIndex.ToString(), _target.tags[tagIndex]);
                EditorUtility.SetDirty(_target);
            }
        }

Error

ArgumentException: GUILayout: Mismatched LayoutGroup.KeyUp
UnityEngine.GUILayoutUtility.BeginLayoutGroup (UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption options, System.Type LayoutType) (at C:/BuildAgent/work/6bc5f79e0a4296d6/Runtime/ExportGenerated/Editor/GUILayoutUtility.cs:153)
UnityEngine.GUILayout.BeginVertical (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption options) (at C:/BuildAgent/work/6bc5f79e0a4296d6/Runtime/ExportGenerated/Editor/GUILayout.cs:192)
UnityEngine.GUILayout.BeginVertical (UnityEngine.GUILayoutOption options) (at C:/BuildAgent/work/6bc5f79e0a4296d6/Runtime/ExportGenerated/Editor/GUILayout.cs:184)
UnityEditor.MaterialEditor.OnInspectorGUI () (at C:/BuildAgent/work/6bc5f79e0a4296d6/Editor/Mono/Inspector/MaterialEditor.cs:107)
UnityEditor.InspectorWindow.OnGUI () (at C:/BuildAgent/work/6bc5f79e0a4296d6/Editor/Mono/Inspector/InspectorWindow.cs:364)
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object parameters, System.Globalization.CultureInfo culture)

If I comment out the line “_target.tags = new List(_tagsTemp);” I no longer get the error but obviously doesn’t work how it should. At least I know the problems lies after assigning the new list.