WinForm: Передача инфы из одной в другую форму
От: algoritm256  
Дата: 17.05.14 08:44
Оценка:
Здравствуйте! Проблема такова: Есть две формы. Одна содержит таблицу(dataGridView) — Наименование товара, Цена, Количество. Вторая Вызывается при нажатии кнопки "Добавить" и посылает в первую введенные в нее значение. Насчет передачи инфы из одной в другую руководствовался вот этим ресурсом http://www.cyberforum.ru/windows-forms/thread110436.html (Пункт 2,5). Проблема: При добавлении вылетает ошибка NullReferenceException was unhandled(Object reference not set to an instance of an object.) при нажатии кпопки "добавить"


public void Добавить_Click(object sender, EventArgs e)
        {
            GoodsCount1 = Count.Text.ToString();
            w_b.GoodsName2 = GoodsName1; (здесь ошибка)
            w_b.GoodsPrice2 = GoodsPrice1;
            w_b.GoodsCount2 = GoodsCount1;
            this.Close();
        }


форма 1

   public partial class Waybil : Form
    {
        private string client = null;
        private string driver = null;
        private string carModel = null;
        private string carKey=null;

        public string GoodsName2 = null;
        public string GoodsPrice2 = null;
        public string GoodsCount2 = null;
        AddWaybilGoods add_waibil_goods = null;
        
        public Waybil()
        {
            InitializeComponent();
            Base base_ = new Base(Share.server_address, Share.login, Share.password, Share.database);
            base_.fill_combo(comboClients, "Clients", "ClientsName");
            base_.fill_combo(comboDrivers, "Drivers", "DriversName");
            base_.fill_combo(comboModel, "Cars", "CarsModel");
        }

        private void Create_Click(object sender, EventArgs e)
        {
            client = comboClients.SelectedItem.ToString();
            driver = comboDrivers.SelectedItem.ToString();
            carModel = comboModel.SelectedItem.ToString();
            carKey =Key.Text.ToString();
            Word.Application word = new Word.Application();
            word.Visible = true;
            Word.Document doc = word.Documents.Add();
            doc.Select();
            word.Selection.TypeText(client);
            word.Selection.TypeText(driver);
            word.Selection.TypeText(carModel);
            word.Selection.TypeText(carKey);
        }

        private void Add_Click(object sender, EventArgs e)
        {
            //здесь вызывается форма для заполнения dataGridView
            add_waibil_goods = new AddWaybilGoods();
            add_waibil_goods.Owner = this;
            add_waibil_goods.Show();
            add_waibil_goods.Focus();
            dataGridView1.Rows.Add(GoodsName2,GoodsPrice2, GoodsCount2);
            dataGridView1.Update();
        }

        private void comboModel_SelectedIndexChanged(object sender, EventArgs e)
        {
            carModel = comboModel.SelectedItem.ToString();
            Base base_ = new Base(Share.server_address, Share.login, Share.password, Share.database);
            base_.find_item(Key, "Cars", "CarsKey", "CarsModel", carModel);
        }
    }


форма 2

   Waybil w_b = null;
        public string GoodsName1 = null;
        public string GoodsPrice1 = null;
        public string GoodsCount1 = null;

        public AddWaybilGoods()
        {
            InitializeComponent();
            w_b= this.Owner as Waybil;
            Base base_ = new Base(Share.server_address, Share.login, Share.password, Share.database);
            base_.fill_combo(AddWaybilGoods1, "Goods", "GoodsName");
        }

        public void Добавить_Click(object sender, EventArgs e)
        {
            GoodsCount1 = Count.Text.ToString();
            w_b.GoodsName2 = GoodsName1;
            w_b.GoodsPrice2 = GoodsPrice1;
            w_b.GoodsCount2 = GoodsCount1;
            this.Close();
        }

        private void AddWaybilGoods1_SelectedIndexChanged(object sender, EventArgs e)
        {
            GoodsName1 = AddWaybilGoods1.SelectedItem.ToString();
            Base base_ = new Base(Share.server_address, Share.login, Share.password, Share.database);
            base_.find_item(Price, "Goods","GoodsPrice", "GoodsName", GoodsName1);// метод принимает TextBox, имя таблицы, имя поля и его значение и вставляет в            текстбокс цену товара 
            GoodsPrice1 = Price.Text.ToString();
        }
    }

Подскажите пожалуйста, где я туплю, если что-то можно сделать лучше, то как. Заранее спасибо большое!
winform c#
Re: WinForm: Передача инфы из одной в другую форму
От: _Raz_  
Дата: 17.05.14 10:16
Оценка:
Здравствуйте, algoritm256, Вы писали:

A>форма 1

A>
A>   public partial class Waybil : Form
A>    {
A>        private void Add_Click(object sender, EventArgs e)
A>        {
A>            //здесь вызывается форма для заполнения dataGridView
A>            add_waibil_goods = new AddWaybilGoods(); *1
A>            add_waibil_goods.Owner = this; *3
A>        }
A>    }
A>


A>форма 2

A>
A>   Waybil w_b = null;
A>        public AddWaybilGoods()
A>        {
A>            InitializeComponent();
A>            w_b= this.Owner as Waybil; *2
A>        }
A>    }
A>

A>Подскажите пожалуйста, где я туплю, если что-то можно сделать лучше, то как. Заранее спасибо большое!

Использование на втором шаге, а присвоение на третьем.

As is или история о том как не надо писать код
Автор(ы): Владислав Чистяков (VladD2)
Дата: 18.12.2004
Работая над открытыми проектами, автор заметил, что операторы as и is многими программистами зачастую используются ненадлежащим образом. Результатом очередного двухчасового поиска ошибки и стала эта статья.



Особенности реализации MVP для Windows Forms
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 77>>
Re: WinForm: Передача инфы из одной в другую форму
От: btn1  
Дата: 18.05.14 11:12
Оценка:
Здравствуйте, algoritm256, Вы писали:

A>http://www.cyberforum.ru/windows-forms/thread110436.html (Пункт 2,5).


Ясно. Из всех способов вы выбрали самый дурацкий. Почему тупо не объявить public поле??
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.