Stránka 1 z 1

C# Komunikace mezi Forms aneb proč vyskakuje "Object reference not set to an instance of an object"

Napsal: 07 říj 2015 17:36
od Skelller
Zdravím, mám velký problém. Snažím se, aby vybraný item v list boxu ve Form2, přenesl svůj text do textBoxu ve Form1. Ovšem ať to zkouším jakýmkoliv způsobem, tak to prostě nejde.. přikladám kod, ve kterém to házi chybu, díky moc :)

Vyjmutý kod z Formu, kde je listBox

Kód: Vybrat vše

private Form1 mainForm = null;
        public Form2(Form1 callingFrom)
        {
            mainForm = callingFrom as Form1;
            InitializeComponent();
        }
        private void okButton_Click(object sender, EventArgs e)
        {
            this.mainForm.udaje = bankovniUctyList.GetItemText(bankovniUctyList.SelectedItem);
            this.Close();
        }


Vyjmutý kod z Formu, kde je textBox

Kód: Vybrat vše

public string udaje
        {
            get { return predmetBanka.Text; }
            set { predmetBanka.Text = value; bankaTextBox.Text = predmetBanka.Text; }
        }

Re: C# Komunikace mezi Forms aneb proč vyskakuje "Object reference not set to an instance of an object"

Napsal: 07 říj 2015 18:33
od Oxxid
Chapu dobre, ze ti jde pouze o prenos dat mezi dvema formulari?

Re: C# Komunikace mezi Forms aneb proč vyskakuje "Object reference not set to an instance of an object"

Napsal: 07 říj 2015 20:56
od Skelller
Prozatím ano. Chyba je, že prý v řádku

Kód: Vybrat vše

this.mainForm.udaje = bankovniUctyList.GetItemText(bankovniUctyList.SelectedItem);
je "udaje" null.. tím pádem to hodí chybu..ani na stack overflow mi neumí poradit

Re: C# Komunikace mezi Forms aneb proč vyskakuje "Object reference not set to an instance of an object"

Napsal: 07 říj 2015 22:25
od Oxxid
Nepouzivej safe cast, ale direc. Na komunikaci mezi formulari pouzivej nejlepe eventy (udalosti).

Dodatečně přidáno po 35 minutách :


Tady mas ukazku. Ten zbytek s datalistem si tam domaluj.

Form1.xaml.cs

Kód: Vybrat vše

using System.Windows;

namespace WpfApplication
{
    /// <summary>
    ///     Interaction logic for Form1.xaml
    /// </summary>
    public partial class Form1 : Window
    {
        private string _str;

        public string Str
        {
            get { return _str; }
            set
            {
                _str = value;
                StrTextBlock.Text = value;
            }
        }

        public Form1()
        {
            InitializeComponent();
            Form2 form2 = new Form2(this);
            form2.Show();
        }
    }
}


Form1.xaml.cs

Kód: Vybrat vše

using System.Windows;
using System.Windows.Controls;

namespace WpfApplication
{
    /// <summary>
    ///     Interaction logic for Form2.xaml
    /// </summary>
    public partial class Form2 : Window
    {
        private Window CallingInstance { get; }

        public Form2()
        {
            InitializeComponent();
        }

        public Form2(Window callingInstance) : this()
        {
            this.CallingInstance = callingInstance;
        }

        private void AButton_Click(object sender, RoutedEventArgs e)
        {
            DoStuff((Button) sender);
           
        }

        private void BButton_Click(object sender, RoutedEventArgs e)
        {
            DoStuff((Button) sender);
        }

        private void DoStuff(Button sender)
        {
            Form1 form1Instance = (Form1)this.CallingInstance;
            form1Instance.Str = sender.Content.ToString();
        }
    }
}