MenuClick - Event wird mehrfach ausgeführt
Thomas Faust
Guten Morgen in die Runde,
ich entwickle zur Zeit ein kleines Addon mit Hilfe des Coresuite-Frameworks und VS 2010.
Es funktioniert auch soweit ganz gut, aber eine Kleinigkeit kann ich nicht lösen und hoffe auf Hilfe.
Ich habe auf einer selbstkreierten Form ein Grid, mit dem ich Daten abrufe und manipuliere. Das funktioniert gut.
Auf dieser Form habe ich das PopUp Menü (UID=1280) um die Einträge 'Zeile löschen', 'Zeile einfügen' und 'Zeile hinzufügen' erweitert.
Das Problem ist nun, dass diese MenuEvents beim ersten Öffnen der Form einmal ausgeführt werden, beim zweiten Öffnen der Form zweimal usw.
Fakt ist, dass das Event immer öfter ausgelöst wird.
Ist dieses Verhalten ein Bug, oder habe ich den Käfer in meinem Code? ;)
So habe ich das EventHandling umgesetzt:
/* Hier wird das Menü erweitert*/
MenuItem PopUp = MenuItem.GetFromUID("1280");
MenuItem Del = MenuItem.CreateNew("DelRow");
Del.Value = "Zeile löschen";
Del.Type = MenuItem.MenuType.String;
Del.AddHandler_Click(null,Events.mnu_DelRow);
PopUp.SubMenus.AddMenuItem(Del);
MenuItem Add = MenuItem.CreateNew("AddRow");
Add.Value = "Zeile Hinzufügen";
Add.Type = MenuItem.MenuType.String;
Add.AddHandler_Click(null,Events.mnu_AddRow);
PopUp.SubMenus.AddMenuItem(Add);
MenuItem Ins = MenuItem.CreateNew("InsRow");
Ins.Value = "Zeile Einfügen";
Ins.Type = MenuItem.MenuType.String;
Ins.AddHandler_Click(null,Events.mnu_InsRow);
PopUp.SubMenus.AddMenuItem(Ins);
PopUp.Load();
public static void mnu_AddRow(SwissAddonFramework.UI.EventHandling.MenuEvents.MenuClick ar)
{
try
{
Form f = Form.GetFormFromType("GBC_EK_PREISE",0);
Grid g = Grid.GetFromUID(f, "3");
MessageBox.Show(g.DataTable.Rows.Count.ToString(), "OK");
f.Freeze(true);
g.DataTable.Rows.Add();
string CodeNeu = EK_Utilities.CodeNew("[@GBC_EK_PREISE]");
int Zeile = Convert.ToInt16(g.GetValue("Zeile", g.Rows.Count - 2)) + 1;
g.SetValue("Code", g.Rows.Count - 1, CodeNeu);
g.SetValue("Name", g.Rows.Count - 1, CodeNeu);
g.SetValue("Zeile", g.Rows.Count - 1, Zeile.ToString());
g.SetValue("Artikel-Nr.", g.Rows.Count - 1, g.GetValue("Artikel-Nr.", g.Rows.Count - 2));
g.SetValue("Lieferanten-Nr.", g.Rows.Count - 1, g.GetValue("Lieferanten-Nr.", g.Rows.Count - 2));
g.SetValue("BP-Katalognr.", g.Rows.Count - 1, g.GetValue("BP-Katalognr.", g.Rows.Count - 2));
g.SetValue("Verpackung", g.Rows.Count - 1, g.GetValue("Verpackung", g.Rows.Count - 2));
g.SetValue("Menge / Gebinde", g.Rows.Count - 1, g.GetValue("Menge / Gebinde", g.Rows.Count - 2));
g.SetValue("Artikel / Palette", g.Rows.Count - 1, g.GetValue("Artikel / Palette", g.Rows.Count - 2));
MessageBox.Show(g.DataTable.Rows.Count.ToString(), "OK");
f.Freeze(false);
}
catch (Exception ex)
{
SwissAddonFramework.UI.Dialogs.MessageBox.Show(ex.Message, "OK");
}
}
Die eingebauten MessageBoxes zeigen, dass die DataTable immer korrekt initialisiert wird (Startwert am Anfang entspricht der Anzahl der Rüclgabezeilen aus der Query) und am Ende ist der Wert um eins größer. Alles in Ordnung soweit. Das Problem ist, dass dieser MenuClick Event mehrfach ausgelöst wird.
Herzlichen Dank für jeden Hinweis.
Thomas
Thomas Kneidl
Hallo Thomas,
wann erstellst Du denn die Menüeinträge? Beim Laden Deines Forms? Evtl. hängst Du dann ja jedesmal einen zusätzlichen Handler an den Menüpunkt.
Willst Du den Menüeintrag nur im Kontextmenü haben (also Eintrag in der Menüleiste)? Wenn ja, dann versuch es doch mal mit nem Function-Button, den musst nur einmal registrieren und nicht mit jedem öffnen Deines Forms.
Gruß
Thomas
Thomas Faust
Hallo Thomas,
zunächst herzlichen Dank für Deine Antwort, den ersten Punkt werde ich jetzt überprüfen. Ich denke, dass dort der Hase im Pfeffer liegen könnte.
Die Idee mit dem Function-Button passt hier nicht, da der Function Button auf die Formregistriert wird, ich aber den Zeilenindex des Grids benötige, um die Zeilen korrekt zu löschen / einzufügen.
Viele Grüße
Thomas
Thomas Faust
Hallo Thomas,
Danke für den ersten Hienweis, jetzt spielt es.
Ein RemoveHandler vor dem Hinzufügen und schon passt es.
Herzlichen Dank!
Gruß
Thomas
Thomas Faust
Kann mir jemand verraten, wie man den Thread schließt?
Please sign in to leave a comment.
Comments
0 comments