Ich hab das Gefühl, ich bin jetzt öfters da. Also ich habe gerade versucht ein Event für eine Klasse zu implementieren, aber nach dem Debugstart erschienen nun Fehlermeldungen, mit denen ich nicht wirklich etwas anfangen kann. Ich sollte vielleicht dazu sagen, dass ich vorher noch nie Events in Klassen implementiert habe. Das habe ich jetzt nur mit Hilfe eines Tutorials gemacht.
Ich möchte erreichen, dass bei Änderung der Felder "FileSize" oder "FileSizeCurrent" ein Event namens "ProgressChanged" aufgerufen wird, um den Fortschritt damit grafisch darstellen zu können.
Hier erstmal der Code der Klasse:
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: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102:
| class DownloadManager { private int LastId = 0; private DownloadManagerEntry[] DownloadManagerEntries = new DownloadManagerEntry[Int16.MaxValue];
public int CreateId() { return ++this.LastId; }
public DownloadManager() { }
public DownloadManagerEntry CreateNewEntry() { DownloadManagerEntry dmEntry = new DownloadManagerEntry(); dmEntry.Id = this.CreateId(); this.DownloadManagerEntries[dmEntry.Id] = dmEntry;
return dmEntry; }
public class DownloadManagerEntry { public int Id; public string FileName, FilePath, DownloadUri;
public Int64 FileSize { get { return FileSize; } set { FileSize = value; ProgressChangedEventArgs e = new DownloadManager.DownloadManagerEntry.ProgressChangedEventArgs(this.FileSize, this.FileSizeCurrent); OnProgressChanged(e); } }
public Int64 FileSizeCurrent { get { return FileSizeCurrent; } set { FileSizeCurrent = value; ProgressChangedEventArgs e = new DownloadManager.DownloadManagerEntry.ProgressChangedEventArgs(this.FileSize, this.FileSizeCurrent); OnProgressChanged(e); } }
public DownloadManagerEntry() { }
public class ProgressChangedEventArgs : System.EventArgs { public Int64 ProgressMaximum { get { return ProgressMaximum; } }
public Int64 ProgressCurrent { get { return ProgressCurrent; } }
private ProgressChangedEventArgs() {
}
public ProgressChangedEventArgs(Int64 ProgressMax, Int64 ProgressCur) { Int64 ProgressMaximum = ProgressMax; Int64 ProgressCurrent = ProgressCur; } }
public delegate void ProgressChangedHandler(object sender, ProgressChangedEventArgs e); public event ProgressChangedHandler ProgressChanged;
protected virtual void OnProgressChanged(ProgressChangedEventArgs e) { if (ProgressChanged != null) { ProgressChanged(this, e); } } } } |
Der wird von der IDE soweit erstmal nicht beanstandet. Jetzt will ich aber eine Instanz der Klasse erstellen, mit folgendem Code:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public DownloadManager _DownloadManager = new DownloadManager();
public void DownloadManagerEntry_ProgressChanged(object sender, DownloadManager.DownloadManagerEntry.ProgressChangedEventArgs e) { } |
Und die IDE spuckt mir folgende Fehler dazu aus:
Zitat: |
Fehler 1 Inkonsistenter Zugriff: Feldtyp "TestProject.DownloadManager" ist weniger zugreifbar als Feld "TestProject.frmMain._DownloadManager" X:\frmMain.cs 19 32 TestProject
Fehler 2 Inkonsistenter Zugriff: Parametertyp "TestProject.DownloadManager.DownloadManagerEntry.ProgressChangedEventArgs" ist weniger zugreifbar als Methode "TestProject.frmMain.DownloadManagerEntry_ProgressChanged(object, TestProject.DownloadManager.DownloadManagerEntry.ProgressChangedEventArgs)" X:\frmMain.cs 802 21 TestProject
|
Was bedeutet denn "weniger zugreifbar" überhaupt ? Und wie kann ich nun eine Instanz der Klasse erstellen ?
Bevor ich das Event formuliert hatte, waren diese Aufrufe jedenfalls noch nicht fehlerhaft.
mfg
- VampireSilence
Moderiert von
Christian S.: Topic aus WinForms verschoben am Mo 20.09.2010 um 22:41