为什么我的变量的值不会改变我试图以其他形式改变的东西?

时间:2014-03-08 04:37:31

标签: c#

我必须制作一个包含2个表单的程序,在第一个表单中我必须插入我希望我的数组所具有的大小,然后当我按下按钮时,数组必须取该数字作为其大小然后打开另一个我在数组中插入值的形式,它们显示在文本框中,如果我超过了值的数量,它会显示一个消息框,说明你不能插入更多但是idk为什么当我在第一个表单中插入数组的大小时去到第二个它只允许我插入1个值,无论我在第一个使用的是什么数字,这是我正在使用的代码:

第一个:

namespace Arreglo
{
    public partial class frmregistro : Form
    {
        public frmregistro()
        {
            InitializeComponent();
        }

        private void btniniciar_Click(object sender, EventArgs e)
         {
            using(frmmatricula form = new frmmatricula()) 
            { 
                int s = Convert.ToInt32(txtcantidad.Text);
                frmmatricula frm = new frmmatricula();
                frm.ShowDialog();
            }
        }
    }
}

表示第二种表格

namespace Arreglo
{
    public partial class frmmatricula : Form
    {
        int indice = 0;

        int[] matricula = new int[5];
        string[] nombre = new string[5];
        public int s { get; set; }

        public frmmatricula()
        {
            InitializeComponent();
            this.Load += frmmatricula_Load; 

        }
        private void frmmatricula_Load(object sender, EventArgs e)
        {
            int[] matricula = new int[s];
            string[] nombre = new string[s];
        }

        private void btnagregar_Click(object sender, EventArgs e)
        {
            if (indice > s)
            {
                MessageBox.Show("No se aceptan más datos");
        }
            else
            {
                matricula[indice] = Convert.ToInt32(txtmatricula.Text);
                nombre[indice] = txtnombre.Text;
                txtresultados.Text += matricula[indice];
                txtresultados.Text += nombre[indice];
                txtresultados.Text += Environment.NewLine;
                indice++;
            }
        }

        private void btnbuscar_Click(object sender, EventArgs e)
        {
            int info = Convert.ToInt32(txtnombre.Text);
            MessageBox.Show(nombre[info] +  matricula[info]);
        }
    }
}

6 个答案:

答案 0 :(得分:0)

您似乎没有将s分配给其他表单上的公共属性,因此它的默认值始终为0

我没有查看您表单中的任何其他内容或进行任何其他更正(可能还有其他问题需要修复),除了删除您在以下块中创建的frmmatricula个实例之一。 (你只需要一个。)

using (frmmatricula form = new frmmatricula()) 
{ 
    form.s = Convert.ToInt32(txtcantidad.Text);  // send the value to the form

    form.ShowDialog();
}

答案 1 :(得分:0)

您将indices设置为0,然后检查它是否为> s。它不会。它是0(当你检查时,s也是如此。

答案 2 :(得分:0)

你需要将数组的值从form1传递给form2,你可以使用你在form2中定义的公共属性,即 public int s {get; set};

private void btniniciar_Click(object sender, EventArgs e)
{
  using(frmmatricula form = new frmmatricula()) 
  { 
     int s = Convert.ToInt32(txtcantidad.Text);
     frmmatricula frm = new frmmatricula();
     frm.ShowDialog();
  }
}

在frm.ShowDialog();

之前包含以下行
frm.s = s;

答案 3 :(得分:0)

试试这个,我将第二个表单中的s转移到第一个表单,然后我将表单包含在第二个表单的实例中:

namespace Arreglo
{
    public partial class frmregistro : Form
    {
        public int S { get; set; }

        public frmregistro()
        {
            InitializeComponent();
        }

        private void btniniciar_Click(object sender, EventArgs e)
         {
            using(frmmatricula form = new frmmatricula(this)) 
            { 
                S= Convert.ToInt32(txtcantidad.Text);
                frm.ShowDialog();
            }
        }
    }
}

namespace Arreglo
{
    public partial class frmmatricula : Form
    {
        private frmregistro _parentForm;

        int indice = 0;

        int[] matricula = new int[5];
        string[] nombre = new string[5];

        public frmmatricula(frmregistro parentForm)
        {
            _parentForm = parentForm;
            InitializeComponent();
            this.Load += frmmatricula_Load; 

        }
        private void frmmatricula_Load(object sender, EventArgs e)
        {
            int[] matricula = new int[_parentForm.S];
            string[] nombre = new string[_parentForm.S];
        }

        private void btnagregar_Click(object sender, EventArgs e)
        {
            if (indice > _parentForm.S)
            {
                MessageBox.Show("No se aceptan más datos");
            }
            else
            {
                matricula[indice] = Convert.ToInt32(txtmatricula.Text);
                nombre[indice] = txtnombre.Text;
                txtresultados.Text += matricula[indice];
                txtresultados.Text += nombre[indice];
                txtresultados.Text += Environment.NewLine;
                indice++;
            }
        }

        private void btnbuscar_Click(object sender, EventArgs e)
        {
            int info = Convert.ToInt32(txtnombre.Text);
            MessageBox.Show(nombre[info] +  matricula[info]);
        }
    }
}

答案 4 :(得分:0)

在这样的形式的构造函数中的初始“s”:

...
public frmmatricula(int inputS)
{
    InitializeComponent();
    this.Load += frmmatricula_Load; 
    s = inputS;
}
...

并在创建时将“s”的任意值传递给它:

...
using(frmmatricula form = new frmmatricula()) 
{ 
    int s = Convert.ToInt32(txtcantidad.Text);
    frmmatricula frm = new frmmatricula(s);
    frm.ShowDialog();
}
...

答案 5 :(得分:0)

进行以下更改,它会起作用,我评论了需要进行更改的地方......

第一个表单的代码

namespace Arreglo
{
    public partial class frmregistro : Form
    {
        public frmregistro()
        {
            InitializeComponent();
        }


        private void btniniciar_Click(object sender, EventArgs e)
        {
            using (frmmatricula form = new frmmatricula())
            {

                //int s = Convert.ToInt32(txtcantidad.Text);  <-- I changed this 
                frmmatricula frm = new frmmatricula();
                frm.s = Convert.ToInt32(txtcantidad.Text);  // <-- to this ... also please note you should do validation...
                frm.ShowDialog();
            }
        }

        private void frmregistro_Load(object sender, EventArgs e)
        {

        }
    }
}

第二个表格的代码

namespace Arreglo
{

    public partial class frmmatricula : Form
    {
        int indice = 0;

        private int hld_s;      // <-- I added this, just to hold the value 

        int[] matricula = new int[5];
        string[] nombre = new string[5];


        //public int s { get; set; }  <-- I changed this the the next block of code
        public int s 
        {
            get 
            {
                return hld_s; 
            }
            set
            {
                hld_s = value;
            }
        }





        public frmmatricula()
        {
            InitializeComponent();
            this.Load += frmmatricula_Load;

        }
        private void frmmatricula_Load(object sender, EventArgs e)
        {
            int[] matricula = new int[s];
            string[] nombre = new string[s];
        }

        private void btnagregar_Click(object sender, EventArgs e)
        {

            if (indice > s)
            {
                MessageBox.Show("No se aceptan más datos");
            }
            else
            {
                //... do some coding here 
            }
        }

        private void btnbuscar_Click(object sender, EventArgs e)
        {
            //... do some coding here
        }
    }
}