fix: intercept arrow keys in CadConverterForm for file list navigation

FileListControl loses focus when interacting with other controls on the
form, making arrow key navigation stop working. Intercept Up/Down at
the form level via ProcessCmdKey and forward to the file list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 22:41:03 -04:00
parent f78cc78a65
commit c9b17619ef
2 changed files with 31 additions and 12 deletions
+20 -12
View File
@@ -152,22 +152,14 @@ namespace OpenNest.Controls
UpdateScrollBar(); UpdateScrollBar();
} }
protected override bool IsInputKey(Keys keyData) public void ProcessArrowKey(Keys keyData)
{ {
if (keyData == Keys.Up || keyData == Keys.Down)
return true;
return base.IsInputKey(keyData);
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (items.Count == 0) return; if (items.Count == 0) return;
var newIndex = selectedIndex; var newIndex = selectedIndex;
if (e.KeyCode == Keys.Down) if (keyData == Keys.Down)
newIndex = System.Math.Min(selectedIndex + 1, items.Count - 1); newIndex = System.Math.Min(selectedIndex + 1, items.Count - 1);
else if (e.KeyCode == Keys.Up) else if (keyData == Keys.Up)
newIndex = System.Math.Max(selectedIndex - 1, 0); newIndex = System.Math.Max(selectedIndex - 1, 0);
else else
return; return;
@@ -179,7 +171,23 @@ namespace OpenNest.Controls
Invalidate(); Invalidate();
SelectedIndexChanged?.Invoke(this, selectedIndex); SelectedIndexChanged?.Invoke(this, selectedIndex);
} }
e.Handled = true; }
protected override bool IsInputKey(Keys keyData)
{
if (keyData == Keys.Up || keyData == Keys.Down)
return true;
return base.IsInputKey(keyData);
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
{
ProcessArrowKey(e.KeyCode);
e.Handled = true;
}
} }
protected override void OnPaint(PaintEventArgs e) protected override void OnPaint(PaintEventArgs e)
+11
View File
@@ -23,6 +23,17 @@ namespace OpenNest.Forms
private SimplifierViewerForm simplifierViewer; private SimplifierViewerForm simplifierViewer;
private bool staleProgram = true; private bool staleProgram = true;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData == Keys.Up || keyData == Keys.Down) && !fileList.Focused)
{
fileList.ProcessArrowKey(keyData);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
public CadConverterForm() public CadConverterForm()
{ {
InitializeComponent(); InitializeComponent();