none
Brauche bitte Hilfe bei einem Control / Interface RRS feed

  • Frage

  • Guten Abend,

    ich habe bei CodeProject ein Kalender-Control gefunden, welches mir so richtig gefällt und ich sehr gerne haben möchte, um es mit weiteren Funktionen zu erweitern.

    Hier der Link zu dem Projekt bei CodeProject: CalendarControl in C#

    Ganz kurz als Info: Ich habe vor ca. 34 Jahren (da war ich 8 Jahre alt) mit Basic angefangen. Ich habe leider nie was anderes gelernt :-/

    Jetzt würde ich sehr gerne dieses Control haben wollen. Aber es ist leider in C# :-(

    Jetzt scheitere ich an einem kleinen Codeblock:

    Public Overridable Function CompareTo(element As ICalendarSelectableElement) As Integer Implements IComparable(Of ICalendarSelectableElement).CompareTo
                Return Me.[Date].CompareTo(element.[Date])
            End FunctionHier steigt Visual Studio 2015 komplett aus und zeigt mir keine Fehlermeldungen oder sonst was. Es kam aber ab und zu die Meldung "Access Violation" (hoffe ich habe es richtig geschrieben). 

    Ich weiß leider an dieser Stelle nicht, wo ich "ansetzen" soll, um dieses Problem zu beheben.

    Kann mir da bitte einer helfen? Ich erwarte nicht, dass es für mich einer komplett in VB übersetzt. Ich versuche nur irgendwie zu verstehen, warum dieser Fehler entsteht.

    Diese Kombination mit Interface und Compare und gleichzeitig die Übersetzung von C# zu VB.NET sind auch schon für mich "Horror". Aber ich stehe jetzt schon seit rund 12 Stunden vor dieser Fehlermeldung und weiß einfach nicht mit ihr umzugehen :-(

    Gruß
    Andy


    PS: Ganz vergessen noch zu schreiben: Es passiert wenn ich einen Eintrag/Text bearbeiten möchte!
    Donnerstag, 1. Oktober 2015 21:40

Antworten

  • Hallo Andreas,

    mir fehlt leider die Zeit um mich näher in das Projekt einzuarbeiten, auch wird es schwierig sein wenn wir nur das C# Original und nicht deine VB.NET Übersetzung haben.

    Wenn du schreibst das VS komplett aussteigt, meinst du das VS abstürzt oder das nur das Debuggen beendet wird? Wenn letzteres der Fall ist, steht dann noch etwas im Ausgabefenster? Ansonsten versuche mal dort einen BreakPoint zu setzen und dann per F11 in die CompareTo-Methode hinein zu navigieren um zu gucken was darin geschieht.

    Die AccessViolationException kommt eigentlich nur dann wenn man irgendwo Zugriffsrechte verletzt hat. Eventuell liegt das hier auch an nativem Win32 Code - es kommt hier wirklich darauf an was die Ausnahme auslöste.

    Hast du denn schon irgendwelche Bearbeitungen an dem Code vorgenommen oder bist du noch am Übersetzen?

    Für mich hat sich als ganz hilfreich erwiesen einfach die Basics der anderen .NET Sprachen zu lernen und dann in der Programmiersprache ein Projekt zu erweitern in der es ursprünglich geschrieben wurde. Ich weiß nicht wie viel Zeit du hast dir die Grundlagen von C# anzueignen, eventuell ginge das aber sogar schneller als das Control zu übersetzen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert AndreasMahub Freitag, 2. Oktober 2015 11:45
    Donnerstag, 1. Oktober 2015 22:34
    Moderator

Alle Antworten

  • Hallo Andreas,

    mir fehlt leider die Zeit um mich näher in das Projekt einzuarbeiten, auch wird es schwierig sein wenn wir nur das C# Original und nicht deine VB.NET Übersetzung haben.

    Wenn du schreibst das VS komplett aussteigt, meinst du das VS abstürzt oder das nur das Debuggen beendet wird? Wenn letzteres der Fall ist, steht dann noch etwas im Ausgabefenster? Ansonsten versuche mal dort einen BreakPoint zu setzen und dann per F11 in die CompareTo-Methode hinein zu navigieren um zu gucken was darin geschieht.

    Die AccessViolationException kommt eigentlich nur dann wenn man irgendwo Zugriffsrechte verletzt hat. Eventuell liegt das hier auch an nativem Win32 Code - es kommt hier wirklich darauf an was die Ausnahme auslöste.

    Hast du denn schon irgendwelche Bearbeitungen an dem Code vorgenommen oder bist du noch am Übersetzen?

    Für mich hat sich als ganz hilfreich erwiesen einfach die Basics der anderen .NET Sprachen zu lernen und dann in der Programmiersprache ein Projekt zu erweitern in der es ursprünglich geschrieben wurde. Ich weiß nicht wie viel Zeit du hast dir die Grundlagen von C# anzueignen, eventuell ginge das aber sogar schneller als das Control zu übersetzen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert AndreasMahub Freitag, 2. Oktober 2015 11:45
    Donnerstag, 1. Oktober 2015 22:34
    Moderator
  • Hallo Tom,

    nein, es ist bereits alles nach VB.NET übersetzt worden. Und mir C# noch anzueignen ist nicht wirklich "mein Gebiet" ;-)

    Mit VS komplett aussteigen, sorry, ich meinte der Debugger steigt komplett aus. Mit dem Breakpoint war jetzt etwas Fummelarbeit, da die Routine aufgerufen wird, wenn der Mauszeiger sich bewegt, habe jetzt aber dafür mal gesehen das ein Nothing ebergeben wird.

    Ich glaube, da ist mein roter Faden, vielen Dank, melde mich nochmal muss leider wieder los ;-)

    Gruß
    Andy

    Freitag, 2. Oktober 2015 11:45
  • Hallo,

    ich habe den "Fehler" selbst gefunden ;-)

    Ich bin wirklich Schritt für Schritt weitergelaufen und plötzlich wurde "element" absichtlich vom Programmierer auf Nothing gesetzt. Ein einfaches:

    If IsNothing(element) Then Return 0

    Hat da geholfen. Scheinbar (ich weiß es nicht) mag das unter C# (mit null) funktionieren, aber VB.NET mag es wohl nicht. Jetzt funktioniert das Control schon mal halbwegs ohne abzuschmieren ;-

    Hier nochmal der Code:

    ''' <summary>
    ''' Compares this element with other using date as comparer
    ''' </summary>
    ''' <param name="element"></param>
    ''' <returns></returns>
    Public Overridable Function CompareTo(element As ICalendarSelectableElement) As Integer Implements IComparable(Of ICalendarSelectableElement).CompareTo
          If IsNothing(element) Then Return 0
          Return [Date].CompareTo(element.[Date])
    End Function

    Gruß
    Andy

    Freitag, 2. Oktober 2015 14:13
  • Hallo Andreas,

    ich habe die Diskussion erst jetzt (etwas spät) gesehen.

    Das Problem dürfte bereits in der C# Version vorliegen. Denn auch dort müsste null (Nothing) behandelt werden, wenn kein element übergeben wird.

    Im Falle von Nothing für den Parameter sollte man 1  (für größer) zurückgeben, da man üblicherweise Null kleiner als alles andere betrachtet.

    Siehe auch das Beispiel zu IComparable(T), wozu die Methoden-Implementation gehört.

    Gruß Elmar

    Freitag, 2. Oktober 2015 20:18
    Beantworter
  • Hallo Andreas,

    ich habe die Diskussion erst jetzt (etwas spät) gesehen.

    Das Problem dürfte bereits in der C# Version vorliegen. Denn auch dort müsste null (Nothing) behandelt werden, wenn kein element übergeben wird.

    Im Falle von Nothing für den Parameter sollte man 1  (für größer) zurückgeben, da man üblicherweise Null kleiner als alles andere betrachtet.

    Siehe auch das Beispiel zu IComparable(T), wozu die Methoden-Implementation gehört.

    Gruß Elmar

    Hallo Elmar,

    ich habe deine Idee ausprobiert. Aber dann funktioniert nichts mehr. Scheinbar wird wirklich die Zahl 0 erwartet. Sobald ich die Zahl 1 zurückgebe "spinnt" der Kalender. Zum Beispiel wird der eingebene Text nicht mehr angezeigt ;-)

    Gruß
    Andy

    Freitag, 2. Oktober 2015 22:11
  • Hallo Andy,

    dann hat der Autor des Kalenders IComparable(T) wohl nicht richtig verstanden und falsch implementiert. Aber da es nur für den Hausgebrauch ist, belasse dabei.

    Gruß Elmar

    Samstag, 3. Oktober 2015 04:10
    Beantworter
  • Hallo Andy,

    dann hat der Autor des Kalenders IComparable(T) wohl nicht richtig verstanden und falsch implementiert. Aber da es nur für den Hausgebrauch ist, belasse dabei.

    Gruß Elmar

    Das kann ich leider nicht beurteilen, trotzdem danke schön ;-) Vielleicht stolpere ich an einer anderen Stelle über dieses Problem ;-)

    Gruß
    Andy

    Samstag, 3. Oktober 2015 10:05