Unterstrich "_" wird Automatisch gelöscht?

  • WPF

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Gregor Jasinski.

    Unterstrich "_" wird Automatisch gelöscht?

    Hallo,
    ich lasse mir in einem Label den Pfad zu einem Ordner anzeigen welchen ich gewählt habe.

    VB.NET-Quellcode

    1. Imports System.Windows.Forms
    2. Imports System.Windows.Forms.FolderBrowserDialog
    3. Class MainWindow
    4. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    5. label1.Content = My.Settings.mein_path
    6. End Sub
    7. Private Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click
    8. Dim FolderBrowser As FolderBrowserDialog = New FolderBrowserDialog
    9. If FolderBrowser.ShowDialog = Windows.Forms.DialogResult.OK Then
    10. label1.Content = FolderBrowser.SelectedPath
    11. My.Settings.mein_path = label1.Content
    12. My.Settings.Save()
    13. End If
    14. End Sub
    15. End Class


    Mein Ordner trägt den Name "test_ordner_meins". Das Problem jedoch ist das der erste _ Automatisch weggelassen wird aber ab dem zweiten _ alle da sind.
    So wird Also mein Pfad in dem Label angezeigt:
    C:\MeinOrdner\testordner_meins

    Könnt ihr mir sagen an was das liegt warum das erste _ einfach Ignoriert wird?
    Ich habs gerade schnell ausprobiert und der "Fehler" lässt sich reproduzieren. Sobald man einen Unterstrich in eine String-Zeichenkette einbaut und diese einem Control per Content zuweist, verschwindet der erste Unterstrich.

    Der Grund ist, dass dieser erste Unterstrich den nachfolgenen Buchstaben zu einem "Access-Key" macht, sichtbar ist dies wenn man die Alt-Taste drückt (Quelle).

    Eine Möglichkeit ein solches Verhalten zu unterbinden, ist, wie auch in der Quelle beschrieben, jeden Unterstrich durch 2 Unterstriche zu ersetzen, dadurch wird immer ein Unterstrich angezeigt (bspw. durch String.Replace).
    @StolleJay:: Da das WPF ist, solltest Du das explizit im Titel ausweisen bzw. diesen Thread nach WPF verschieben lassen.
    Unter WinForm lässt sich der beschriebene Effekt nicht reproduzieren.
    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!
    Wie @lukekogv: bereits schrieb, das ist beabsichtigt, um mit Hilfe eines Unterstrichs (in Windows Forms Anwendungen ist das der Ampersand '&') die Zugriffstaste zu kennzeichnen. "H_allo" bedeutet, dass das entsprechende Control (bzw. das nächste Focusable Control in Tab-Reihenfolge) automatisch den Focus erhält, wenn der Benutzer Alt+A drückt.

    Allerdings bin ich nicht ganz zufrieden mit der Aussage, dass man das (nur) durch Ersetzen durch zwei Unterstriche unterbinden kann, und hab nochmal ein Beispiel-WPF-Projekt von mir rausgekramt, wo ich es "irgendwie" geschafft habe, Buttons so per Template zu definieren, dass eben dieses Verhalten nicht greift. Zu meiner Schande muss ich allerdings gestehen, dass mein letzter direkter Kontakt mit WPF und insbesondere diesem Projekt nun schon so lange her ist, dass ich nicht mehr wirklich weiß, was ich da eigentlich gebastelt habe, und vor allem die Stelle im XAML einfach nicht ausfindig machen kann, welche dafür sorgt, dass Unterstriche eben nicht mehr den Access-Key kennzeichnen.
    Sorry... :S
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Das Thema ist zwar ein altes Kotelett, scheint aber noch nicht gelöst worden zu sein und da das Erwärmen alter Koteletts ausdrücklich in den Forumregeln erlaubt ist, wird noch einmal der Knopf am Herd gedreht. Abgesehen davon, dass man im Template etwas verändern oder es mit Codezeilen vor und nach dem Label umgehen kann, was aber meiner Meinung nach ziemlich umständlich ist und in keinem guten Verhältnis „Programmieraufwand/Nutzen” steht, vor allem dann nicht, wenn man es jedes mal mit einem Label machen muss, gibt es noch die Möglichkeit, den TextBlock INNERHALB eines Labels zu benutzen, quasi so eine Art Zwischenkamel, also weder das eine noch das andere – auf meinem PC mit Windows 10, den unten aufgeführten Daten und dem heutigen Datum scheint es jedenfalls zu funktionieren – vielleicht hat sich da seit 2014 auch etwas geändert, keine Ahnung. Ob man den Text direkt im TextBlock oder ihn durch Anweisung (wie unten) eingibt, spielt keine Rolle. Die ganzen Voll- und HalbKamele kann man sich natürlich auch sparen, wenn man nicht explizit ein Label benutzen muss oder möchte, und – wie schon im Thread erwähnt wurde – gleich nur den TextBlock benutzen. Welche Layout- und Attributunterschiede es zwischen den beiden gibt, die man zu beachten hat, muss man sich halt selbst anschauen oder anlesen. Den String per Code so zu manipulieren, dass ein Dateiname mit – womöglich vielen – Unterstrichen immer richtig dargestellt wird, birgt einige Risiken in sich und induziert beim vielen Konvertieren obendrein auch noch einen Performancenachteil – ist zumindest nur so ein Resümee für mich persönlich, denn bewerten und am Ende ausliefern muss das letztendlich mit all den daraus resultierenden Konsequenzen jeder für sich selbst.

    WPF-Anwendung mit .NET-Framework 4.8 und Visual Studio Community 2022 (64-Bit) Version 17.4.4:

    XML-Quellcode

    1. <Label x:Name="Label_9" Canvas.Left="50" Canvas.Top="80" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="5,0,5,0">
    2. <TextBlock x:Name="TBlock_9" Text=""/>
    3. </Label>


    Irgendwo im Code, wo man Anweisungen machen darf:

    VB.NET-Quellcode

    1. TBlock_9.Text = "A_w_e_r_t_y_uiop_1__2___3"


    Ergibt auf dem gerenderten Bildschirm dann das: A_w_e_r_t_y_uiop_1__2___3
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

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