मैं सोच रहा हूं कि मैं एक विंडो से दूसरी विंडो में मूल्य कैसे भेज सकता हूं, मूल रूप से कॉलर विंडो पर मैं कुछ गणना करता हूं और मैं इसे दूसरी विंडो पर भेजना चाहता हूं जो उस राशि को प्रदर्शित करेगा जो मैंने पिछली विंडो पर गणना की थी ..

मैंने जो कल्पना की थी, लेकिन मुझे नहीं पता कि सबसे अच्छा तरीका अगला है: मैंने दूसरी विंडो पर संपत्ति बनाई जो सूचनाओं को प्रदर्शित करेगी और इसे पहली विंडो से एक मान देगी, जैसे:

// कॉलर विंडो - मुख्य विंडो

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

टेस्टविंडो (दूसरी विंडो जो पिछले डिस्प्ले से योग प्रदर्शित करना चाहिए)

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

लेकिन यह हमेशा एक शून्य प्रदर्शित करता है!

0
Roxy'Pro 20 नवम्बर 2017, 17:35

3 जवाब

सबसे बढ़िया उत्तर

जब आप इसे बनाते हैं तो आप विंडो को मान पास कर सकते हैं:

मेनविंडो:

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

टेस्टविंडो:

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
mm8 20 नवम्बर 2017, 17:51

किसी मान को सीधे 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.
    }
}
1
Dark Templar 20 नवम्बर 2017, 23:01

ऐसा इसलिए है क्योंकि जब TestWindow का कंस्ट्रक्टर लॉन्च किया जाता है, तो TestWindow की कुल संपत्ति शून्य होती है। कन्स्ट्रक्टर में value के तर्क में पास करें और इसे वहां असाइन करें।

-1
Mindaugas Nakrosis 20 नवम्बर 2017, 17:39