I wasn't able to find any solutions to this in the archives, but I was able to hack my way through it and thought I'd share.
The problem I was having was to use Tab to move between fields in a window (I usually use a DialogBox, but wanted a scroll bar - thanks to kenneth for his great example of doing that). I came up with the following (no scroll bars here), but I feel like it's a hack and there should be a better way to do it. But nothing else seemed to work. So if anyone has a more elegant solution, please let me know. use Win32::GUI; $AccTable = new Win32::GUI::AcceleratorTable( "Ctrl-X" => "Close", "Tab" => "Tab", "Shift-Tab" => "Shift_Tab", ); my $window = Win32::GUI::Window -> new ( -name => 'window', -text => "Window", -width => 300, -height => 200, -dialogui => 1, -accel => $AccTable, ); $t1 = $window -> AddTextfield (-name => 't1', -left => 30, -top => 50, -width => 100, -height => 22, -tabstop => 1, -prompt => ["Text 1",50], ); $t2 = $window -> AddTextfield (-name => 't2', -left => 30, -top => 100, -width => 100, -height => 22, -tabstop => 1, -prompt => ["Text 2",50], ); my @focuslist = ("t1","t2"); sub Close_Click { print "x\n"; $window -> Hide(); return -1; } sub Tab_Click { my $focusat; for (my $i=0;$i<=$#focuslist;$i++) { if (Win32::GUI::GetFocus() == $window -> {$focuslist[$i]} -> {-handle}) { if ($i < $#focuslist) { $focusat = $i+1; } else { $focusat = 0; } } } $window -> {$focuslist[$focusat]} -> SetFocus(); } sub Shift_Tab_Click { my $focusat; for (my $i=0;$i<=$#focuslist;$i++) { if (Win32::GUI::GetFocus() == $window -> {$focuslist[$i]} -> {-handle}) { if ($i >0) { $focusat = $i-1; } else { $focusat = $#focuslist; } } } $window -> {$focuslist[$focusat]} -> SetFocus(); } $t1 -> SetFocus(); $window -> Show(); sub window_Terminate { -1 } Win32::GUI::Dialog(); __________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail