2017-06-30 24 views
0

私は、アプリケーションで特定の操作を行うためのユーザーの名前と共振(理由による)を要求するカスタム入力ダイアログボックスを持っています。ユーザーは、メインウィンドウのボタンをクリックするとダイアログボックスが表示されます。返信時にWindow.ShowDialogが失敗する

ユーザーは、名前と理由を入力して[OK]をクリックします。ダイアログが閉じますが、私(プログラム)は決して答えを受け取りません。ここで入力ダイアログのための私のXAMLです:

<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> 

そしてここでは、「背後にあるコード」です:

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; 
    } 


} 
} 

、これは私はモデルではなく、「ウィンドウクラスから(コードを呼び出す方法です「)

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 

は現在、いくつかの時間のためのソリューションを見て、私はちょうど約キャリアのお時間を

感謝を変更するには

答えて

1

私の推測によれば、この問題はコード内には存在していませんが、これは問題ないと思われますが、ifステートメントにあります。

Debugモードでプログラムを実行すると、期待どおりに動作するはずです。

私の推測では、あなたのifなステートメント内の変数operatorNamereasonForForcedを割り当てているが、それらはプログラムのどこにも使用されていないので、全体if文はコンパイラによって無視され、Releaseモードで実行しているときに存在しないということです。変数の値に応じて、異なる振る舞いを埋め込むコード内

小さな変更は、私の推測を証明することができます

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]を、それはそれです!私はキャリアを変える。デバッグモードではなく、リリースモードでプログラムを実行しました。時には、さらに2つの目が必要です! :-) ありがとうございます! – ZombieGoose

関連する問題