Thanks. Your example does work, however, I need the combobox in the dialog to show the correct value. With this modification, I still have the same problem.
sub CallDialog
{
$testbox1->configure(-state=>'disabled');
###############################
# Added this line so the displayed value is correct
$selected = $selected_1;
###############################
my $retval = $dialog->Show( -popover=>$form, -overanchor=>'c', -po
+panchor=>'c');
if($retval eq "Cancel")
{
$testbox1->configure(-state=>'normal');
}
elsif($retval eq "Submit")
{
$testbox1->configure(-state=>'normal');
$testbox1->setSelected($selected ); #(optional?)
}
}
I also tried to set the variable in the callback for the button on the main window and got the same problem.
my $button = $form->Button( -text=>"Dialog", -command=>sub{$selected=
+$selected_1;CallDialog($testbox1);} )->pack(-side=>'right');
I have also tried passing the variable $selected to the sub CallDialog in the callback. Same problem.
What does work is to use the setSelected method as you mentioned below at the beginning of the sub CallDialog along with a seperate variable. This way the problem does not show up and the correct value is displayed to the user in the dialog. Also, I found that there is no need to disable the first combobox since it doesn't really disable the background activities of the combobox.
use strict;
use warnings;
use Tk;
use Tk::JComboBox;
use Tk::Dialog;
my $form;
my %choices = ( 'a'=>1, 'b'=>2, 'c'=>3 );
my $selected_1 = "a";
my $selected = "a";
my $dialog;
my $testbox1;
my $testbox2;
CreateMainForm();
MainLoop();
sub CreateMainForm
{
$form = MainWindow->new();
$form->title("Test for JComboBox Problem");
$testbox1 = $form->JComboBox( -textvariable=>\$selected_1,-valida
+te=>'match', -mode=>'editable',-relief=>'sunken', -highlightthicknes
+s=>0 );
for my $x(keys %choices) { $testbox1->addItem("$x"); }
$testbox1->pack(-side=>'left');
my $button = $form->Button( -text=>"Dialog", -command=>sub{CallDi
+alog();} )->pack(-side=>'right');
$dialog = $form->Dialog ( -title=>"Part2 of test", -buttons=>["Su
+bmit","Cancel"],-default_button=>"Submit" );
$testbox2 = $dialog->JComboBox(-textvariable=>\$selected, -validat
+e=>'match',-mode=>'editable', -relief=>'sunken',-highlightthickness=>
+0);
for my $x(keys %choices) { $testbox2->addItem("$x"); }
$testbox2->pack(-side=>'left');
}
sub CallDialog
{
$testbox2->setSelected($selected_1);
my $retval = $dialog->Show( -popover=>$form, -overanchor=>'c', -po
+panchor=>'c');
if($retval eq "Cancel")
{
$testbox1->configure(-state=>'normal');
}
elsif($retval eq "Submit")
{
$testbox1->setSelected($selected ); #(optional?)
}
}
Thanks again for your help. ++Too bad I can vote only once per node. |