2017-06-30 22 views
0

Ich habe ein benutzerdefiniertes Eingabedialogfeld, das einen Benutzernamen und ein reson (aus Gründen) für eine bestimmte Aktion in meiner Anwendung anfordert. Der Benutzer klickt auf eine Schaltfläche im Hauptfenster und das Dialogfeld zeigt, wie es sollte.Window.ShowDialog schlägt bei der Rückgabe fehl

Der Benutzer gibt dann seinen/ihren Namen und den Grund ein und klickt ok. Der Dialog schließt sich dann aber ich (das Programm) erhält nie eine Antwort. Hier ist meine XAML für den Eingabedialog:

<Window x:Class="Sequence_Application_2.GUI.ForcedRackInput" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    Title="Forcera Rack" Height="300" Width="300" 
    WindowStartupLocation="CenterScreen"> 


<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="21*"/> 
     <ColumnDefinition Width="274*"/> 
    </Grid.ColumnDefinitions> 
    <TextBox Name="OperatorNameText" HorizontalAlignment="Left" Height="23" Margin="15,36,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Grid.ColumnSpan="2"/> 
    <Label x:Name="label" Content="Namn:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/> 
    <Label x:Name="label1" Content="Orsak:" HorizontalAlignment="Left" Margin="10,72,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2"/> 
    <Border BorderThickness="1" BorderBrush="Black" Grid.ColumnSpan="2" Margin="0,0,0,0.5"> 
     <TextBox Name="ReasonText" Margin="15,98,15,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="116" /> 
    </Border> 

    <Button Name="OkButton" IsDefault="True" Content="OK" Click="OkButtonPressed" HorizontalAlignment="Left" Margin="26.202,233,0,0" VerticalAlignment="Top" Width="75" Cursor="Arrow" Grid.Column="1"/> 
    <Button Name="CancelButton" IsCancel="True" Content="Avbryt" Margin="152.202,233,47,0" VerticalAlignment="Top" Cursor="Arrow" Grid.Column="1"/> 

</Grid> 
</Window> 

Und hier ist die „hinter Code“:

namespace Sequence_Application_2.GUI 
{ 
using System.Windows; 

public partial class ForcedRackInput : Window 
{ 

    public string OperatorName { get { return OperatorNameText.Text; } } 
    public string ForcedRackReason { get { return ReasonText.Text; } } 

    public ForcedRackInput() 
    { 
     InitializeComponent(); 
    } 

    private void OkButtonPressed(object sender, RoutedEventArgs e) 
    { 
     this.DialogResult = true; 
    } 


} 
} 

und das ist, wie ich den Code aufrufen (aus einem Modell, kein „Fensterklasse „)

public void ForceClosingRack(Flow forcedFlow) 
    { 
     var forcedRackWindow = new ForcedRackInput(); 

     string operatorName = ""; 
     string reasonForForced = ""; 

     if(forcedRackWindow.ShowDialog() == true) 
     { 
      operatorName = forcedRackWindow.OperatorName; 
      reasonForForced = forcedRackWindow.ForcedRackReason; 

     } 

    } // code jumps from "if(forcedRackWindow.... to this line when ok is clicked in the dialog 

Sah für die Lösung einiger Zeit und ich nur Karriere für Ihre Zeit

Dank ändern

Antwort

1

Meine Vermutung ist, dass das Problem nicht in dem Code liegt, der in Ordnung zu sein scheint, aber in Ihrer Aussage.

Wenn Sie Ihr Programm im Debug-Modus ausführen, sollte es wie erwartet funktionieren.

Meine Vermutung ist, dass Sie die Variablen zuweisen operatorName und reasonForForced in Ihrem if statment aber sie sind nirgendwo sonst im Programm und damit die ganze if Anweisung wird ignoriert vom Compiler und nicht vorhanden, wenn läuft in Release-Modus verwendet.

Eine kleine Änderung im Code, die unterschiedliche Verhalten auf den variablen Werten abhängig bettet kann meine Vermutung beweisen:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var forcedRackWindow = new ForcedWindow(); 

    string operatorName = "foo"; 
    string reasonForForced = "foo"; 

    if (forcedRackWindow.ShowDialog() == true) 
    { 
     operatorName = forcedRackWindow.OperatorName; 
     reasonForForced = forcedRackWindow.ForcedRackReason; 
    } 

    if(!operatorName.Equals(reasonForForced)) 
    { 
     MessageBox.Show("We are not the same"); 
    } 
} 
+0

Ok, das ist es! Ich ändere meine Karriere. Ich habe das Programm im Release-Modus statt im Debug-Modus ausgeführt, als ich Debugging .... Danke. Manchmal sind ein paar zusätzliche Augen alles was Sie brauchen! :-) Danke! – ZombieGoose

Verwandte Themen