/// <param name="focusProperty"> Optional: Sets focus to control of this property.</param> private void RefreshProperties(ObsProperty focusProperty = null) { // prevent properties triggering another refresh when previous refresh is still ongoing if (++refreshCount > 0) return; ScrollableControl parent = (Parent as ScrollableControl); var oldScrollPos = parent != null ? parent.VerticalScroll.Value : 0; List<Control> controls = new List<Control>(); Control focusControl = null; do { refreshCount = 0; controls.Clear(); ObsProperty[] propertyList = properties.GetPropertyList(); foreach (ObsProperty property in propertyList) { PropertyControl control = new PropertyControl(this, property, settings) { Enabled = property.Enabled, Visible = property.Visible }; if (focusProperty != null && property.GetPointer() == focusProperty.GetPointer()) focusControl = control.Controls[1]; controls.Add(control); } } while (refreshCount > 0); panel.SuspendLayout(); panel.Controls.Clear(); panel.Controls.AddRange(controls.ToArray()); panel.Select(); panel.Focus(); // restore last focused control and scroll state if (focusControl != null) { focusControl.Focus(); focusControl.Select(); } if (parent != null) parent.VerticalScroll.Value = oldScrollPos; panel.ResumeLayout(); PerformLayout(); refreshCount = -1; }
/// <param name="focusProperty"> Optional: Sets focus to control of this property.</param> private void RefreshProperties(ObsProperty focusProperty = null) { // prevent properties triggering another refresh when previous refresh is still ongoing if (++refreshCount > 0) { return; } ScrollableControl parent = (Parent as ScrollableControl); var oldScrollPos = parent != null ? parent.VerticalScroll.Value : 0; List <Control> controls = new List <Control>(); Control focusControl = null; do { refreshCount = 0; controls.Clear(); ObsProperty[] propertyList = properties.GetPropertyList(); foreach (ObsProperty property in propertyList) { PropertyControl control = new PropertyControl(this, property, settings) { Enabled = property.Enabled, Visible = property.Visible }; if (focusProperty != null && property.GetPointer() == focusProperty.GetPointer()) { focusControl = control.Controls[1]; } controls.Add(control); } }while (refreshCount > 0); panel.SuspendLayout(); panel.Controls.Clear(); panel.Controls.AddRange(controls.ToArray()); panel.Select(); panel.Focus(); // restore last focused control and scroll state if (focusControl != null) { focusControl.Focus(); focusControl.Select(); } if (parent != null) { parent.VerticalScroll.Value = oldScrollPos; } panel.ResumeLayout(); PerformLayout(); refreshCount = -1; }