Matrix und DGV

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 116 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    @ErfinderDesRades
    Das ist unvermeidlich, wenn man sich nicht versteht.
    Dann muss man so lange reden, bis man versteht.


    @RodFromGermany
    Ich verstehe dich nicht, du fragst nach Oktaven und hier schreist du Akkorden.
    Cm7b5
    C Grundton
    m verminderte Terze
    7 verminderte septime
    b5 verminderte 5

    Also ein MOLL Akkord, erkennbar an die vermindete Terze


    Kannst du mir helfen dieses Modul von den Fehler zu befreien? Damit ich @ErfinderDesRades code in VB2010 zum laufen bringen kann

    Es sind Begriffe die ich nicht kenne zB: Yield
    Bilder
    • 1.jpg

      42,53 kB, 607×461, 28 mal angesehen
    • 2.jpg

      67,32 kB, 1.105×312, 31 mal angesehen
    lg toto

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „toto“ ()

    Wenn ich schreie, sieht das so aus:
    Schrei.

    toto schrieb:

    Ich verstehe dich nicht
    Das zieht sich durch diesen ganzen Thread hindurch, mit vielen anderen VB-lern ebenfalls.
    Wenn ich eine Frage stelle und Du beantwortest sie nicht so, wie ich erwarte, stelle ich eine Frage mit Möglichkeiten einer Antwort.
    Von Dir kommt da nicht eine Erläuterung zu einem Nebenthema.
    Also:
    Oktave: Ich meine damit 12 nebeneinander liegende Tasten auf einem Klavier, beginnend mit C.
    Ich frage, was oraktisch passieren soll, wenn theoretisch durch Transponieren Tasten erreicht werden, die rechts oder links neben der eben festgelegten 12 Tasten liegen.
    Da kamen von Dir bisher sehr verschiedene wenn nicht sich ausschließende Antworten.
    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!

    toto schrieb:

    Es sind Begriffe die ich nicht kenne zB: Yield
    Das ist ein SprachFeature, was 2013 aufgenommen wurde.
    wenn du also mit VS2010 arbeitest, funztes nicht, egal welches Framework.
    Aber ist nicht so wichtig, du kannst das ganze Modul wie folgt ersetzen:

    VB.NET-Quellcode

    1. Public Module Program
    2. <STAThread>
    3. Public Sub Main(args As String())
    4. Application.EnableVisualStyles()
    5. Application.SetCompatibleTextRenderingDefault(False)
    6. Application.Run(New frmAccordTranspose)
    7. My.Settings.Save()
    8. End Sub
    9. End Module
    Übrigens Code nicht als Bild zeigen, sondern mit der Forum-Funktion zum Einfügen von Code. Da kann ich den Code auskopieren und ändern.
    Von einem Bild müsste ich abschreiben - das finde ich irgendwie unwürdig ;)
    Du hast nur die Dur Tonarten in der Liste, wenn man auch die Moll Tonarten dazu schreibt,...
    Diese Liste:

    VB.NET-Quellcode

    1. Private Shared _Notes As String() = "C C# D D# E F F# G G# A A# B C Db D Eb E F Gb G Ab A Bb B".Split
    Das sind eigentlich keine Tonarten, sondern Noten.
    Ich hatte gedacht, man könne Tonarten genau wie Noten schreiben - ist das nicht richtig?
    Wie schreibt man denn eine Moll-Tonart im Gegensatz zu einer Dur-Tonart?
    Du hast alles richtig gemacht.
    Es sind die Grundtöne der Tonarten, es ist richtig so.
    Es Ging mir um den Parser der durch den Mod 12 immer wieder von vorne anfängt und durch die "12" immer im Bereich der erste 12 "Töne" bleibt, also alles #-Notation.
    Wäre nur optisch gesehen das wenn eine zB.: Eb Tonart ggewählt wird das die Töne der Eb Tonart zu sehen sind also b-Notation.
    aber wie gesagt es reicht auch so
    Danke und LG
    lg toto

    toto schrieb:

    immer im Bereich der erste 12 "Töne" bleibt, also alles #-Notation.
    Der schwarzen Taste auf dem Klavier ist es doch egal, ob sie als Dis oder Es angesprochen wird.
    Wenn das für Dich wichtig ist, musst Du
    in der nächsten Version
    einen "Schönheitsfilter" implementieren, der die Enharmonischen Verwechslungen ersetzt.
    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!
    @RodFromGermany
    Der schwarzen Taste auf dem Klavier ist es doch egal, ob sie als Dis oder Es angesprochen wird.

    habe ich schon beantwortet das egal ist.

    Wäre nur optisch gesehen das wenn eine zB.: Eb Tonart ggewählt wird das die Töne der Eb Tonart zu sehen sind also b-Notation.
    lg toto

    toto schrieb:

    habe ich schon beantwortet das egal ist.
    Warum kommst Du dann immer wieder zu b- und #-Notationen?
    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!

    toto schrieb:

    Wäre nur optisch gesehen das wenn eine zB.: Eb Tonart ggewählt wird das die Töne der Eb Tonart zu sehen sind also b-Notation.
    kann man machen, ja.
    Es ist ja so, dass die #-notierten Noten in der _Notes-Liste C C# D D# E F F# G G# A A# B C Db D Eb E F Gb G Ab A Bb B die Indizees 0 - 11 haben, und die b-notierten haben Indizees 12 - 23.
    Wenn also als Ziel-Tonart eine Moll-Tonart gewählt ist, also ein Element aus Cb Gb Db Ab Eb Bb F, dann könnte man beim Rückumwandeln einfach den Index mit 12 addieren - dann addressiert er die b-notation derselben Noten.
    (Drück ich mich verständlich aus?)
    Du drückst dich Überhaupt in diesem Thread sehr gut aus.

    VB.NET-Quellcode

    1. Dim iTonarten = {_Notes.IndexOf(srcTonart), _Notes.IndexOf(destTonart)}

    ist here der Fall von +12?

    VB.NET-Quellcode

    1. Dim iTonarten = {_Notes.IndexOf(srcTonart + 12), _Notes.IndexOf(destTonart)}


    Sorry falsch gedacht

    VB.NET-Quellcode

    1. Return _Notes(iNote + 12)

    das funzt
    Nein Falsch jetzt werden alle in b.Notation dargestellt


    lg toto

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „toto“ ()

    Wie gesagt, eine Moll-Ziel-Tonart kannst du identifizieren, wenn destTonart mit einem Element dieser Liste übereinstimmt: Cb Gb Db Ab Eb Bb F.
    Also musst du wohl zuerst eine solche Liste schaffen, sonst kannst du ja nicht gucken, ob destTonart mit einem der Elemente übereinstimmt, oder?
    Und nur wenn das der Fall ist, ist iNote zu erhöhen.
    @toto An welchen Kriterien machst Du die Ziel-Ausgabe b oder # fest?
    Kommt es vor, dass beide (b oder #) nebeneinander in der Ausgabe vorkommen?
    "Ausgabe" meint nach der Transponierung, nicht aber Bildschirm.
    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!
    @toto Da war noch eine Frage:

    RodFromGermany schrieb:

    An welchen Kriterien machst Du die Ziel-Ausgabe b oder # fest?
    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!
    @RodFromGermany
    ...an die Auswähl der Tonart

    @ErfinderDesRades
    Liste C C# D D# E F F# G G# A A# B C Db D Eb E F Gb G Ab A Bb B die Indizees 0 - 11 haben


    in der Liste sind alle Tonarten vorhanden, aber der Parser geht nicht über die 12 hinweg (0-11) also wird dann der Parser, wenn ich eine Tonart zB.: Db wähle, mir immer die Akkorden in #-Notation zeigen.
    Aber wie gesagt ist es nur eine Optische richtige Darstellung.
    Ob ich C# oder Db greife das ist gleich
    lg toto

    toto schrieb:

    ...an die Auswähl der Tonart
    Dann kannst Du das doch vollständig problemlos im Quelltext implementieren.
    Pseudo-Code:

    Quellcode

    1. If LISTE_#_TONARTEN.Contains(AKTUELLE_TONART) Then
    2. Do_#
    3. Else
    4. Do_b
    5. End If
    Feddich
    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!

    VB.NET-Quellcode

    1. Private Shared _rgxNote As New Regex("\b[CDEFGAB][b#]?")
    2. Private Shared _Notes As New List(Of String)("C C# D D# E F F# G G# A A# B C Db D Eb E F Gb G Ab A Bb B".Split)
    3. Private Shared _Notes_1 As New List(Of String)("Cb C Db D Eb E F Gb G Ab A Bb".Split)
    4. Private Shared Function TransposeAccords(srcTonart As String, destTonart As String, akkordeText As String) As String
    5. Dim iTonarten = {_Notes.IndexOf(srcTonart), _Notes.IndexOf(destTonart)}
    6. If iTonarten.Contains(-1) Then
    7. 'hier soll deine Abfrage ob Notes oder Notes_1
    8. MessageBox.Show("Zulässige Tonarten sind nur diese:" & Lf & String.Join(" ", _Notes.Distinct), "Fehler: unzulässige Tonart")
    9. Return ""
    10. End If
    11. Dim shift = iTonarten(1) - iTonarten(0)
    12. Dim exchange = Function(mt As Match)
    13. Dim iNote = (24 + _Notes.IndexOf(mt.Value) + shift) Mod 12
    14. Return _Notes(iNote)
    15. End Function
    16. Return _rgxNote.Replace(akkordeText, exchange)
    17. End Function
    lg toto