C# Bei Betätigung des Enter - Taste wird Null ausgegeben

Aydogan61

Grünschnabel
Ich glaube es ist ein Kleinigkeit aber seit 2 Tagen finde ich den Fehler nicht. Wenn ich die Enter - Taste betätige soll der Programm die Rechnung durchführen und die Ergebnis anzeigen aber es wird immer ein Null angezeigt, wenn ich aber den Button betätige rechnet er mir alles korrekt vor. Wieso funktioniert das mit dem Enter - Taste nicht. Könnt ihr mir bitte dabei helfen wo die Helfer ist.

Vielen Dank.

Software VS 2012

Code:
        public void Calculation_Click(object sender, RoutedEventArgs e)
        {
            SetKFactor();
            SetUSKFactor();

            if (Flow_B > Freq_B)
                SetFrequenz();

            if (Freq_B > Flow_B)
                SetDurchfluss();
        }
                    
        public void Enter_Frequenz(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Return)
            {
                SetDurchfluss();
                SetKFactor();
                SetUSKFactor();
            }
        }
        
        public void Enter_Flow(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Return)
            {
                SetFrequenz();
                SetKFactor();
                SetUSKFactor();
            }
        }

HTML:
<Button x:Name="Calculation" Content="Calculation" Click="Calculation_Click" HorizontalAlignment="Left" Margin="422,305,0,0" VerticalAlignment="Top" Width="250" IsCancel="True" FontWeight="Bold" FontSize="36" Height="76" FontFamily="Arial"/>

        <TextBlock x:Name="Prog__Name" Margin="50,697,512,40" TextWrapping="Wrap" Text="{Binding VSDER}" FontFamily="Times New Roman" FontStyle="Italic" FontWeight="Bold" FontSize="72" Width="480" Foreground="#FFF7F7F7" HorizontalAlignment="Left" VerticalAlignment="Bottom"/>

        <TextBox Name="Fluss" PreviewKeyDown="Enter_Flow" PreviewMouseLeftButtonDown="Mausklick_Flow"  MouseLeftButtonUp="Mausklick_Flow" HorizontalAlignment="Left" Height="30" Margin="150,305,0,0" Text="{Binding Durchfluss}" VerticalAlignment="Top" Width="100" FlowDirection="RightToLeft" FontSize="16" TabIndex="0" Cursor="Pen" FontFamily="Arial" VerticalContentAlignment="Center"/>

        <TextBox Name="Herz" KeyDown="Enter_Frequenz" PreviewMouseLeftButtonDown="Mausklick_Frequenz" MouseLeftButtonUp="Mausklick_Frequenz" HorizontalAlignment="Left" Height="30" Margin="150,351,0,0" Text="{Binding Frequenz}" VerticalAlignment="Top" Width="100" FlowDirection="RightToLeft" FontSize="16" TabIndex="0" Cursor="Pen" FontFamily="Arial" VerticalContentAlignment="Center"/>
 
Hallo Aydogan61

Ich weiss nicht was deine Methoden machen, aber beim Click machst du:
SetKFactor <- 1
SetUSFactor <- 2
SetFrequenz oder SetDurchfluss <- 3

Bei den anderen machst du:
SetDurchfluss oder SetFrequenz <- 3
SetKFactor <- 1
SetUSFactor <-2

Du hast also eine andere Reihenfolge, macht das einen Unterschied?

Viele Grüsse
Cromon
 
Nein es macht kein unterschied, mein Fehler konnte ich bisschen eingrenzen mit dem Debugger. Wenn ich ein Wert in den TextBox eingebe nimmt er ihn nicht sofort war. Erst wenn ich den Button betätige. Mit dem Enter-Taste nimmt er den überhaupt nicht war, deswegen gibt er mir immer ein Null aus. Wie kann ich das so machen, dass er während der eintippen die Wert wahr nimmt oder das der Enter-Taste genau wie Button funktioniert.

Problem gelöst.

Das Problem war, der Focus. Wenn ich mit dem Maus auf dem TextBox geklickt habe, ist ja der Focus automatisch da, und wenn ich mit dem Enter - Taste betätige während der Focus in der TextBox ist, wird das als ein Mausklick wahrgenommen und die Werte auf null gesetzt. Man muss den Focus nach dem Wert Eingabe aus dem TextBox rausholen. Erst dann arbeitet der Enter-Taste korrekt.

Hat mein drei Tage gekostet aber endlich ist es hinter mir. :)

Vielen Dank für eure Hilfen.

MfG

Aydogan61
 
Zuletzt bearbeitet:
Ich glaub eher das dein Problem daran liegt das du nur auf die Return-Taste prüfst und nicht auch auf die Enter-Taste.
Probier mal
Code:
            if (e.Key == Key.Return || e.Key == Key.Enter)
            {
                SetFrequenz();
                SetKFactor();
                SetUSKFactor();
            }
Somit sollte die Bedingung in beiden fällen zutreffen.

Man muss den Focus nach dem Wert Eingabe aus dem TextBox rausholen. Erst dann arbeitet der Enter-Taste korrekt.
Das stimmt nicht so ganz. Wenn der Focus nicht mehr auf dem TextBox liegt, dann kann auch kein KeyDown-Event ausgelöst werden.
Halt mich am laufenden fals ich falsch liege.


Lg
ksk
 
Zuletzt bearbeitet:
Wenn du den Focus nicht immer umstellen willst, kannst du ganz einfach ein neues Event(KeyDown) für die Textbox erstellen.
 
Zurück