Thread [Wx] EventHandler aktiv nur wenn PopUpMenü geöffnet ist (10 answers)
Opened by XimPerl at 2011-12-16 02:41

XimPerl
 2011-12-16 02:41
#154865 #154865
User since
2011-10-12
6 Artikel
BenutzerIn
[default_avatar]
Kurz zur Erklärung:

Ich habe ein WxGrid Objekt das mit Einträgen aus einem XML Dokument gefüllt wird.

Bei Rechtsklick auf einen Eintrag des Grids bzw. Zelle öffnet sich ein PopupMenu für die jeweilige Reihe bzw. den Eintrag.

Das Event habe ich bereits vorher statisch mappen müssen, was mir schonmal nicht gefällt da ich das Event dadurch auch nicht mehr deaktivieren kann.
Es soll ja eigentlich nur verfügbar sein wenn das PopUpMenü der jeweiligen Reihe geöffnet ist. Zumal ich beim klicken innerhalb des PopUpMenüs die Reihe also den Ursprung des Events verliere.

Ich habe mal die wichtigsten Bestandteile zusammengefasst.
Vielleicht kann mir auch jemand einen besseren Weg erklären wie ich die Events dynamisch connecten und disconnecten kann, anhand simpler code Beispiele.

Vielen Dank im voraus!

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
52
		# Parse ein XML Document
use XML::Simple;
my $xml = new XML::Simple;
my $doc = $xml->XMLin("file.xml");

# Zähle Anzahl Einträge
my $rowCount=0;
foreach my $key (keys (%{$doc->{item}})){
$rowCount++;
}

# Erstelle Grid
$self->{grid} = Wx::Grid->new($self->{tab}, -1);
$self->{grid}->CreateGrid($rowCount,4);
$self->{grid}->SetColLabelValue(0,"A");

# Füge dem Grid anhand der XML Datei die Einträge hinzu
my $row=0;
foreach my $key (keys (%{$doc->{item}})){
my $name = $doc->{item}->{$key}->{'name'};
$self->{grid}->SetCellValue($row,1, $name);

# Erstelle statisches Event für Eintrag für PopUp Menü Event
Wx::Event::EVT_MENU($self, "01".$row."", \&onSelect);
$row++;
}

# Füge Rechtsklick-Event hinzu für Grid Zellen
Wx::Event::EVT_GRID_CELL_RIGHT_CLICK($self, \&showPopupMenu);

# Das PopUp Menü an sich
sub showPopupMenu {
my ($self,$event) = @_;
my $pos = $event->GetPosition();
my $row = $event->GetRow();
my $menu = Wx::Menu->new();
my $download = Wx::MenuItem->new($menu, "01".$row."","Select");
$menu->AppendItem($download);
$menu->Append($loeschen);
$menu->Append($neustart);
$self->PopupMenu($menu, $pos);
$menu->Destroy();
}

# Die Methode bei PopUp Menü Event
# Nur woher weiß ich jetzt für welchen Eintrag bzw. Reihe des Grids der Event ausgelöst wurde?
sub onSelect {
my ($self,$event) = @_;

my $row = ????; # Woher nehmen wenn nicht stehlen?
$self->{grid}->SetCellValue($row,1, "Text");
}

Last edited: 2011-12-16 08:39:35 +0100 (CET)

View full thread [Wx] EventHandler aktiv nur wenn PopUpMenü geöffnet ist