Hi,
also so wollte ich es eigentlich zu Beginn machen, dachte aber es sei zu "unprofessionell" mit den Properties in der Form.
Nun gut ich habe mich jetzt mal damit auseinder gesetzt und auch ein ganzes Stück weiter gekommen. Leider fehlt noch eine Kleinigkeit.
(Try und Catch habe ich auch noch nicht flächendeckend erfasst, wollte erst mal dass es läuft)
In der HauptForm in der Menüleiste ruft Beispielsweise jemand Mitarbeiterverwaltung auf, welche bei mir die ID des Rechtes 5 hat.
Diese übergebe ich an die Zertifizierungsform und prüfe dort anhand eines SQL Strings, ob die eingegebene SecurityID dieses Recht ausführen darf.
Entsprechend werden die Properties gefüllt, welche ich dann in der Hauptform zur Verfügung hätte.
Nun möchte ich diesen ausgelesenen Mitarbeitername an die aufzurufende Form übergeben (aus Lernzwecken nicht mit einer Property) damit, wenn dieser in der neuen Form etwas tut sein Name in der Historie steht. Die Mitarbeiterverwaltung ist ein Form mit einem UserControl drauf welches den Speicherbutton hat. Dort soll der Name nutzbar sein.
Code für den Aufruf aus der MainForm
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:
| private void tsmMitarbeiterAnlegen_Click(object sender, EventArgs e) { if (MySqlSettings.GetOptionString(connStr, 2) == "Ja") { Zertifizierung myAuth = new Zertifizierung(5); myAuth.ShowDialog();
if (myAuth.DialogResult == DialogResult.OK) { if (myAuth.Authorized == true) { Mitarbeiterverwaltung myEmployee = new Mitarbeiterverwaltung(); myEmployee.Show();
OnSendAuthentication(new AuthenticationEventArgs(myAuth.Employee)); } else { MsgAusgabe.ShowError("Sie sind nicht berechtigt dieses Modul zu nutzen!"); } } } else { Mitarbeiterverwaltung myEmployee = new Mitarbeiterverwaltung(); myEmployee.Show(); } } |
Code zum feuern des Events, welches in dem UserControl der Mitarbeiterverwaltung behandelt werden soll
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| #region EventAuthentication public class AuthenticationEventArgs : EventArgs { public AuthenticationEventArgs(string text) { Text = text; }
public string Text { get; set; } }
public event EventHandler<AuthenticationEventArgs> SendAuthentication;
protected virtual void OnSendAuthentication(AuthenticationEventArgs e) { EventHandler<AuthenticationEventArgs> ev = SendAuthentication; if (ev != null) ev(this, e); } #endregion |
Code der Form Zertifizierung zum füllen der Propertys
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:
| namespace Recycle.Dialogs { public partial class Zertifizierung : KryptonForm { private static long modul;
public string Employee { get; set; } public bool Authorized { get; set; }
public Zertifizierung(Int64 id) { InitializeComponent(); modul = id; Authorized = false; Employee = null; }
private void txtSecId_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Return) { btnWeiter.PerformClick(); } }
private void btnWeiter_Click(object sender, EventArgs e) { if (txtSecId.Text != string.Empty) { Employee = EmployeeMethods.GetEmployeeNameFromSecId(Convert.ToInt64(txtSecId.Text));
if (AuthorizationMethods.GetAuthorization(Convert.ToInt64(txtSecId.Text), modul) == 1) { Authorized = true; } else { Authorized = false; } } else { MsgAusgabe.ShowError("Bitte erfassen Sie eine SecurityID!"); } } } } |
Prüfung, ob der Mitarbeiter dies darf
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: 27: 28:
| public class AuthorizationMethods { private static string connStr = DbInfo.GetMySqlConnStr(); private static string strSql = string.Empty;
public static int GetAuthorization(long secId, long modul) { int rueckgabe = 0; strSql = "Select count(b.berechtigungmodulid) from mitarbeiter m inner join berechtigungmodulgruppe b " + "on m.berechtigunggruppeid = b.berechtigunggruppeid where m.secid = ?secid and b.berechtigungmodulid = ?berechtigungmodulid"; using (MySqlConnection conn = new MySqlConnection (connStr)) { using (MySqlCommand cmd = new MySqlCommand (strSql, conn)) { conn.Open();
cmd.Parameters.AddWithValue("?secid", secId); cmd.Parameters.AddWithValue("?berechtigungmodulid", modul);
rueckgabe = Convert.ToInt16(cmd.ExecuteScalar());
conn.Close(); } }
return rueckgabe; } } |
Und hier komme ich jetzt nicht weiter, da ich nicht weiß wie ich mein UserControl umbauen müsste, damit es das Event behandelt!?
Ich hatte überlegt, ob ich dann in dem UserControl eine Referenz auf die MainForm setzen muss?!
Wenn der Gedanke ok ist, würde ich leider nicht wissen wie ich die beim Aufruf der Mitarbeiterverwaltung nicht an das Form sondern die UserControl weiter gebe und wie ich es dann abonniere.
Gruß