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.

In reply to Re^2: Help with JComboBox by ChrisR
in thread Help with JComboBox by ChrisR

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.