Thread TK::Listbox : Mehrere Einträge in einer Zeile (5 answers)
Opened by YAPD at 2015-10-22 16:31

YAPD
 2015-10-23 18:22
#182706 #182706
User since
2015-09-20
146 articles
BenutzerIn

user image
Hallo Guifreund,

vielen Dank für deine Antwort. Ich habe mich nun mit
MListBox dem Element beschäftigt und es auch erfolgreich
in mein Script implementiert. Nun hätte ich eine weitere
Frage :

Und zwar möchte ich bei einem Rechtsklick auf eines der
Elemente in der Listbox ein entsprechendes Auswahlmenu
anzeigen.

Ich habe das bereits mit einer normalen Listbox realisiert,
der entsprechende Code sieht folgendermaßen aus :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$Verbindung_Liste = $Top_Level -> Listbox( -selectmode   => "single" ,
-activestyle => "none" ,
-width => 20 ,
-height => 10
) -> place( -x => 25 , -y => 27 );

$Verbindung_Liste -> bind( '<<ListboxSelect>>' , sub{ &Testumgebung() } );

sub Testumgebung {

my @Verbindung_Liste_Selektierung = $Verbindung_Liste -> curselection;

foreach ( @Verbindung_Liste_Selektierung )
{
my $Verbindung_Liste_Elemente = $Verbindung_Liste -> get( $_ );

our $Eintraege_Popups;

$Eintraege_Popups = $Verbindung_Liste -> Menu( -tearoff => 0 );

$Eintraege_Popups -> add( 'separator' );
$Eintraege_Popups -> add( 'command' , -label => "Eintrag 1 : $Verbindung_Liste_Elemente" , -command => \&item1 );
$Eintraege_Popups -> add( 'command' , -label => "Eintrag 2 : $Verbindung_Liste_Elemente" , -command => \&item2 );

$Verbindung_Liste -> bind( '<3>' , [ \&showmenu , Ev( 'X' ) , Ev( 'Y' ) , Ev( 'W' ) ] );
$Verbindung_Liste -> focus();

sub showmenu
{
my ( $self , $x , $y ) = @_;
$Eintraege_Popups -> post( $x , $y );
}

}
}


Dieser Code funktioniert einwandfrei. Wenn ich einen Eintrag auswähle
und die rechte Maustaste bestätige, erscheint das Popup Menu. Und zwar
NUR innerhalb des Listenfeldes.

Nun wollte ich den o.g. Code in einer MListbox realisieren. Der Code hierzu
sieht im Moment folgendermaßen aus :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
$ml = $Haupt_Fenster -> MListbox( -selectmode => 'single' ,
-height => 7 ,
-columns => [ [ -text => 'Laufende Nr.' , -resizeable => 0 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,
[ -text => 'Bezeichnung' , -resizeable => 1 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,
[ -text => 'Geburtstag' , -resizeable => 0 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,
[ -text => 'Verfügbar' , -resizeable => 0 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,
[ -text => 'Tel. - Nr.' , -resizeable => 0 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,
[ -text => 'Mobil - Nr.' , -resizeable => 0 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,
[ -text => 'Projekt - Nr.' , -resizeable => 0 , -sortable => 1 , -height => 11 , -width => 15 , -borderwidth => 0 ] ,

] ,

) -> place( -x => 251 , -y => 84 );

$ml -> insert( 'end' , [ "1000" , "Eintrag 1" , "01.01.1984" , "Sofort" ] );
$ml -> insert( 'end' , [ "1001" , "Eintrag 2" , "01.01.1983" , "Sofort" ] );

$ml -> bindRows( '<1>' , sub{ &Testumgebung } )

sub Testumgebung {

( $w , $infoHR ) = @_;

print "Ausgewaehlte Reihe : " . $infoHR -> { -row } . "\n" .
"Ausgewaehlte Zeile : " . $infoHR -> { -column } . "\n" ;

my @Verbindung_Liste_Selektierung = $ml -> curselection;

foreach( @Verbindung_Liste_Selektierung )
{
my @row = $ml -> getRow( $_ );
print @row;

our $Eintraege_Popups;

$Eintraege_Popups = $Haupt_Fenster -> Menu( -tearoff => 0 );

$Eintraege_Popups -> add( 'separator' );
$Eintraege_Popups -> add( 'command' , -label => "Eintrag 1 : " , -command => \&item1 );
$Eintraege_Popups -> add( 'command' , -label => "Eintrag 2 : " , -command => \&item2 );

$Haupt_Fenster -> bind( '<3>' , [ \&showmenu , Ev( 'X' ) , Ev( 'Y' ) , Ev( 'W' ) ] );
$Haupt_Fenster -> focus();

sub showmenu
{
my ( $self , $x , $y ) = @_;

$Eintraege_Popups -> post( $x , $y );
}
}


Das Problem ist nun, dass ich das Popup - Menu nicht an die MListbox binden kann !!! Der Grund ist wohl der folgende Eintrag in der Sub
"Testumgebung" :

Code: (dl )
1
2
3
4
$Eintraege_Popups = $Haupt_Fenster -> Menu( -tearoff => 0 );

$Haupt_Fenster -> bind( '<3>' , [ \&showmenu , Ev( 'X' ) , Ev( 'Y' ) , Ev( 'W' ) ] );
$Haupt_Fenster -> focus()


Solange hier das übergeordnete Fesnster "Haupt_Fenster" gebunden ist, erscheint das Popup Menu einwandfrei, allerdings überall in meiner Anwendung. Ändere ich $Haupt_Fenster in $ml ( die MListbox ), erscheint
nichts bei der rechten Maustaste.

Übrigens sind $Haupt_Fenster und $ml globale Variablen. Daran dürfte es also nicht liegen.

Ich habe gestern lange einiges ausprobiert, aber komme nicht weiter.

Könnt ihr mich hier unterstützen, bitte ?

Vielen Dank & Viele Grüße
YAPD
Last edited: 2015-10-23 18:25:26 +0200 (CEST)
Yet Another Perl Developer

View full thread TK::Listbox : Mehrere Einträge in einer Zeile