一个窗体为主窗体A(不是MDI),他需要弹出另一个窗体B,
中间的无关操作略。。
根据A传递的参数会使B得到N个checkbox
我想勾选checkbox后,将勾选过的(比如10个,其中3个我进行了勾选)索引存到了一个数组里
问:怎么将B的数组传回A另:因为A是主窗体,所以A可以 
                            窗体名 变量名= new 窗体名();
                            变量名。我定义的变量名;
                            这样进行操作,但B无法这样写给分及时,请高手解答
如果哪里没看明白,我会详细解释下或者联系我QQ:283558165

解决方案 »

  1.   

    窗体也就是类,你可以在窗体A中设置个属性,B访问A的属性,把数组赋值就好了啊。
      

  2.   

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                using (Form2 frm = new Form2())
                {
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        int[] i = frm.RetValue;
                        Console.WriteLine(i.ToString());
                    }
                }
            }
        }
    public Form2()
            {
                InitializeComponent();
                this.DialogResult = DialogResult.Cancel;
            }        public int[] RetValue ={ 1, 2, 3 };        private void button1_Click(object sender, EventArgs e)
            {
                this.DialogResult = DialogResult.OK;
            }
      

  3.   

    CON-如何在子窗体(被调用者)中实现对其父窗体(调用者)的刷新呢? 
    网络上有几种方法,先总结如下: 
    调用窗体(父):Form1,被调用窗体(子):Form2 
    方法1: 所有权法 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    //在调用Form2时,要把Form2的所有者设为Form1 
    Form2 f2 = new Form2() ; 
    f2.Owner = this; 
    f2.ShowDialog() ; 
    //Form2: 
    //在需要对其调用者(父)刷新时 
    Form1 f1 ; 
    f1 = (Form1)this.Owner; 
    f1.Refresh_Method() ; 
    方法2:自身传递法 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    Form2 f2 = new Form2() ; 
    f2.ShowDialog(this) ; 
    //Form2: 
    private Form1 p_f1; 
    public Form2(Form1 f1) 

    InitializeComponent(); 
    p_f1 = f1; 

    //刷新时 
    p_f1.Refresh_Method() ; 
    方法3:属性法 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    //调用时 
    Form2 f2 = new Form2() ; 
    f2.P_F1 = this; 
    f2.Show() ; //Form2: 
    private Form1 p_f1; 
    public Form1 P_F1 

    get{return p_f1;} 
    set{p_f1 = value;} 

    //刷新时 
    p_f1.Refresh_Method() ; 
    方法4:委托法 
    //声明一个委托 
    public delegate void DisplayUpdate(); 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    //调用时 
    Form2 f2 = new Form2() ; 
    f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ; 
    f2.Show() ; 
    //Form2: 
    //声明事件 
    public event DisplayUpdate ShowUpdate; 
    //刷新时,放在需要执行刷新的事件里 
    ShowUpdate();
      

  4.   

    只需在窗体B中定义静态变量public static double[] i=new double[10];
    在窗体B中将你选取的3个值赋值给i[0],i[1],1[2];
    在A中使用时用FormB.i[0]即可。
      

  5.   


        delegate void CheckListDoneHandler(object sender,  bool[] checkstates);    class FormA : Form
        {
            void ShowFormB()
            {
                formB.OnCheckListDone += this.onCheckListDone;
                formB.Show();
            }
            void onCheckListDone(object sender, bool[] checkstates)
            {
                //
                // update according to checkstates
                //
            }
            FormB formB = new FormB();
        }
        public class FormB : Form
        {
            public event CheckListDoneHandler OnCheckListDone;     //用于通知订阅的窗口,清单已经准备好了。
            void NotifyFormA()
            {
                if (OnCheckListDone != null)
                {
                    bool[] checkstates = GetCheckBoxesState();
                    OnCheckListDone(this, checkstates);
                }
            }
        }
      

  6.   

    我通常是这样:在窗体A中: 
    string[] var=new string[count];
    Form frm=new 窗体B(var);
    frm.ShowDialog();在窗体B中: 
    private string[] _var;
    public 窗体B(string[] var)
    {
    _var=var;  //_var已指向var
    }
    然后在窗体B中随意读写 _var[0]..., 关闭B
    回到窗体A中,直接读写var[0]...就可以了
      

  7.   

    A里写:
    B b=new B();
    b.Tag=你的数组;
    b.show();B里访问Tag属性就行了 它是object类型 要转换。A不是传的个数吗?有必要用数组吗?
      

  8.   

    A里写个 public static object  ob="";
    A.ob设置或获取 
      

  9.   

    恩,路过,关注!
    加学习!~看了上面的答案,个人用二楼的方法比较好!用静态类实现应该是有问题的,因为你传值回父form的话,是需要动态传,而static成员在编译运行的时候是不允许随便赋值的吧!
      

  10.   

    窗体也就是类,你可以在窗体A中设置个属性,B访问A的属性,把数组赋值就好了啊。同意这个观点!!!