如何将来自调用者窗口的十进制值发送到将在单击事件上调用/打开的窗口

时间:2017-11-20 14:35:46

标签: c# wpf xaml

我想知道如何将值从一个窗口发送到另一个窗口,基本上在调用者窗口我计算的东西,我想将它发送到另一个窗口,它将显示 我在前一个窗口计算的金额..

我想象但我不知道接下来是最好的方法: 我在第二个窗口创建了属性,它将显示信息并从第一个窗口给它一个值,如下所示:

/ / CALLER WINDOW - MAIN WINDOW

private void btnTest_Click(object sender, System.Windows.RoutedEventArgs e)
{
            double sum = 0;

            foreach (var item in myGrid)
            {
                sum += Convert.ToDouble(item.TotalAmount);
            }

            TestWindow change = new TestWindow();
            change.Total = Convert.ToDecimal(sum);
            change.ShowDialog();
}

TestWindow(第二个窗口必须显示前一个显示的总和)

public partial class TestWindow : Window
{
        public decimal Total;

        public TestWindow()
        {
            InitializeComponent();
            txtDisplayAmount.Text = Total.ToString();
        }

        private void btnClose_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            this.Close();
            // TODO: Add event handler implementation here.
        }
}

但它总是显示零!

3 个答案:

答案 0 :(得分:1)

您可以在创建窗口时传递窗口值:

<强>主窗口:

TestWindow change = new TestWindow(Convert.ToDecimal(sum));
change.ShowDialog();

<强> TestWindow:

public TestWindow(decimal total)
{
    InitializeComponent();
    txtDisplayAmount.Text = total.ToString();
}

如果您打算稍后更改该值,则可以使用属性,但是应确保在设置属性时更新TextBox

public partial class TestWindow : Window
{
    public decimal Total
    {
        get
        {
            if (string.IsNullOrEmpty(txtDisplayAmount))
                return 0M;

            decimal d;
            decimal.TryParse(txtDisplayAmount.Text, out d);
            return d;
        }
        set { txtDisplayAmount.Text = value.ToString(); }
    }

    public TestWindow()
    {
        InitializeComponent();
    }

    private void btnClose_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        this.Close();
    }
}

答案 1 :(得分:1)

实际上可以直接将值从1个表单传递到另一个表单,甚至可以更改不同表单之间的值。

在主窗口中尝试这些更改:

public double sum = 0;   /// it's important to declare the public variable outside of the click event. use the event only to change it's value.

private void btnTest_Click(object sender, System.Windows.RoutedEventArgs e)
{           
        foreach (var item in myGrid)
        {
            sum += Convert.ToDouble(item.TotalAmount);
        }

        TestWindow change = new TestWindow();
        change.Total = Convert.ToDecimal(sum);
        change.ShowDialog();
}

现在在您的测试窗口中尝试以下代码:

public partial class TestWindow : Window
{
    public decimal Total;

    public TestWindow()
    {
        InitializeComponent();
        txtDisplayAmount.Text = ((MainWindow)Application.Current.MainWindow).sum.ToString();
    }

    private void btnClose_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        this.Close();
        // TODO: Add event handler implementation here.
    }
}

答案 2 :(得分:-1)

这是因为当启动 TestWindow 的构造函数时,TestWindow的Total属性为零。将值的参数传递给构造函数并在那里分配。