Hallo,
wie
www.entwickler-ecke....l+senden_113951.html hier beschrieben habe ich ein Form, welches 2 USerControls beinhaltet.
Das mit dem Event schreiben, dass wenn der Scan ausgelöst wird das Detailfenster Daten anzeigt funktioniert ja. Dazu hatte ich im oben genannten Beitrag beim Scannen ein Event geworfen, welches von der Form gefangen wurde und diese hat dann im 2ten UserControl die Klasse (bindingSource) gefüllt.
Nun möchte ein Event genau anders herum bauen, welches nach Erledigung im Detailfenster den ScanButton zurück setzt.
Dies habe ich auch gemacht und es funktioniert auch. Würde es gern hier mal zur Diskussion stellen und bitte um Infos ob und was ich anders hätte machen können.
Danke
Code des Events
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public class NewEventArgs : EventArgs { public NewEventArgs() { } } public event EventHandler<NewEventArgs> newScan;
protected virtual void OnNewScan(NewEventArgs e) { EventHandler<NewEventArgs> ev = newScan; if (ev != null) ev(this, e); } |
Code zum Starten des Events
C#-Quelltext
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:
| private void Starten() {
long lagerplatz = ArticleMethods.GetLongStockplaceOfArticle(articleId);
if (lagerplatz != 0) { if (OktabinerMethods.GetStringStockPlaceMerkmal(lagerplatz) == "Hochregal") { ArticleMethods.SetNewStockplaceStatus(lagerplatz, 0); } }
ArticleMethods.UpdateMovementFromArticle(articleId, 0); ArticleMethods.UpdateStockplaceFromArticle(articleId, null);
ArticleMethods.UpdateMachineSetArticle(articleId, null);
MySqlHistorie.SetHistorie("Bestandsverwaltung", articleId.ToString(), "Bewegung wurde gestartet!", employee);
MsgAusgabe.ShowInformation("Bewegung erfolgeich gestartet");
OnNewScan(new NewEventArgs());
} |
In der Form habe ich dann
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| controlDetail.newScan += PressButtonReadScan;
private void PressButtonReadScan(object sender, WarenrundlaufUserControl.NewEventArgs e) { controlScan.neu(); } |
Dies ruft dann das ControScan auf und dort die Public Methode
neu
Diese führt dann aus:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public void neu() { txtScanfeld.Text = string.Empty; txtScanfeld.Focus(); OnReadScan(new TextEventArgs(string.Empty)); } |
und leert damit das Scanfeld und das Detailfenster.
Wie gesagt funktioniert dies soweit. Es geht mir eher um Anregungen etc.
Danke
Gruß
Daniel