Delegate Funktion & Event (Konvertierungsfehler)

  • Allgemein

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Delegate Funktion & Event (Konvertierungsfehler)

    Hallo liebe Community,
    ich habe gerade versuch mir die Win32 API zu deklarieren, jedoch habe ich dafür nur C# Code gefunden.
    Grundsätzlich ist das kein Problem. Nur ich hänge an einem Fehler unzwar:

    VB.NET-Quellcode

    1. Public Delegate Function SubClassWndProcEventHandler(ByRef m As System.Windows.Forms.Message) As Integer
    2. Public Event SubClassedWndProc As SubClassWndProcEventHandler


    Ereignisse können nicht mit einem Delegattyp deklariert werden, der einen Rückgabetyp hat.

    Wie könnte ich diesen am besten umgehen?

    Danke im Vorraus.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    :) ich bin dumm :D
    Hätte eigentlich der C# Code sein sollen:

    C-Quellcode

    1. public delegate int SubClassWndProcEventHandler(ref System.Windows.Forms.Message m);
    2. public event SubClassWndProcEventHandler SubClassedWndProc;

    Das wäre der Codeausschnitt
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Was mich an dem Code ein bisschen stutzig macht ist das int (was der Compiler offensichtlich auch sagt), denn normalerweise kann ein Ereignis keinen Rückgabetyp haben.
    Aber wenn du WndProc haben willst kannst du auch die NativeWindow-Klasse verwenden.
    Das ist die native.Window klasse:
    Spoiler anzeigen

    [C]
    internal class SubClass : System.Windows.Forms.NativeWindow
    {
    public delegate int SubClassWndProcEventHandler(ref System.Windows.Forms.Message m);
    public event SubClassWndProcEventHandler SubClassedWndProc;
    private bool IsSubClassed = false;

    public SubClass(IntPtr Handle, bool _SubClass)
    {
    base.AssignHandle(Handle);
    this.IsSubClassed = _SubClass;
    }

    public bool SubClassed
    {
    get{ return this.IsSubClassed; }
    set{ this.IsSubClassed = value; }
    }

    protected override void WndProc(ref Message m)
    {
    if (this.IsSubClassed)
    {
    if (OnSubClassedWndProc(ref m) != 0)
    return;
    }
    base.WndProc(ref m);
    }

    public void CallDefaultWndProc(ref Message m)
    {
    base.WndProc(ref m);
    }

    #region HiWord Message Cracker
    public int HiWord(int Number)
    {
    return ((Number >> 16) & 0xffff);
    }
    #endregion

    #region LoWord Message Cracker
    public int LoWord(int Number)
    {
    return (Number & 0xffff);
    }
    #endregion

    #region MakeLong Message Cracker
    public int MakeLong(int LoWord, int HiWord)
    {
    return (HiWord << 16) | (LoWord & 0xffff);
    }
    #endregion

    #region MakeLParam Message Cracker
    public IntPtr MakeLParam(int LoWord, int HiWord)
    {
    return (IntPtr) ((HiWord << 16) | (LoWord & 0xffff));
    }
    #endregion

    private int OnSubClassedWndProc(ref Message m)
    {
    if (SubClassedWndProc != null)
    {
    return this.SubClassedWndProc(ref m);
    }

    return 0;
    }
    }
    #endregion
    [/code]


    @Artentus
    Oder hättest du eine "bessere"?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    der einen Rückgabetyp hat.
    sollte eigentlich eine klare Aussage sein, zumal alle EventHandler vom Typ Sub() sind:

    VB.NET-Quellcode

    1. Public Delegate Sub SubClassWndProcEventHandler(ByRef m As System.Windows.Forms.Message)
    2. Public Event SubClassedWndProc As SubClassWndProcEventHandler
    -----
    Ohne dass ich Deinen C#-Code jetzt testen kann, diese VB-Zeilen jedoch funktionieren sofort.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!