using System;
using System.Collections.Generic;
using System.Text;namespace WindowsApplication1
{
    class BMessage
    {
        private static Double _Dparm;
        private static string _Sparm;
        private static object _Oparm;
        public static Double DoubleParm 
        {  
            //传双精度类型
            get{return _Dparm;}
            set{_Dparm=value;}
        }
        public static string StringParm
        {   
            //传字符串类型
            get { return _Sparm; }
            set { _Sparm = value; }
        }
        public static object PowerObjectParm
        {
            //传结构
            get { return _Oparm; }
            set { _Oparm = value; }
        }
     }
}
public struct Book
{
    public decimal price;
    public string title;
    public string author;
}
在form1中的Button的Click事件中
private void simpleButton1_Click(object sender, EventArgs e)
{
 Book b=new Book();
 b.price = 100;
 BMessage.PowerObjectParm=b;
 Form2 myxtf = new Form2();
 myxtf.Show();
}
在form2中的load事件中
private void Form2_Load(object sender, EventArgs e)
{
 Book b;
 b = (Book)BMessage.PowerObjectParm;
 MessageBox.Show(b.price.ToString());
}
我的问题是怎么取到PowerObjectParm传过来的结构中的值。现在我这样写
这一行b = (Book)BMessage.PowerObjectParm;
报指定的转换无效异常?

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e)
            {
                Book b = new Book();
                b.price = 100;
                BMessage.PowerObjectParm = b;
                Form2 myxtf = new Form2(b);
                myxtf.Show();
            }//Form2
        public partial class Form2 : Form
        {
            private Book myB;
            public Form2(Book  b)
            {
                InitializeComponent();
                myB = b;
            }        private void Form2_Load(object sender, EventArgs e)
            {
                MessageBox.Show(myB.price.ToString());
            }
        }
      

  2.   

    to:chendazhi(不务正业)
    你这样做不要不BMessage.PowerObjectParm = b;
    都可以。
    我现在不想每次传值是都先写一个构造函数
      

  3.   

    很烦吗?你那样是传不过去的。Form1中的Book和Form2中的Book虽是同一个类型,但是不同的对象。关于两个窗体间传值的问题以前问过很多,你搜一搜!
      

  4.   

    用class去定义book,例如:
    public class Book
    {
    public decimal price;
    public string title;
    public string author;
    }