将值从动态文本框复制到锯齿数组错误

本文关键字:数组 错误 复制 动态 文本 | 更新日期: 2023-09-27 17:49:34

如何将动态文本框的值复制到锯齿数组?我尝试使用for循环,但我不断得到这个错误消息:"对象引用未设置为对象的实例。"有什么问题吗?(文本框也使用锯齿数组)以下是完整的代码,您可以在button1事件处理程序link

的第一行中找到问题行
for (int a = 0; a < nr; a++)
         {
             for (int b = 0; b < nr+ 1; b++)
             {
                 array[a][b] =int.Parse(TB[a][b].Text);
             }
         }

(这里是完整的代码:)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

           int ismeretlen = 2;
            TextBox[][] TB;
            string file = "3ismeretlen.dat";

        private void Form2_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            int[][] egyenletek = new int[ismeretlen][];
             for (int a = 0; a < ismeretlen; a++)
             {
                 for (int b = 0; b < ismeretlen + 1; b++)
                 {
                     egyenletek[a][b] =int.Parse(TB[a][b].Text);
                 }
             }
            int változószám = TB[0].Length;
            for (int i = 0; i < változószám - 1; i++)
            {
                for (int j = i; j < változószám - 1; j++)
                {
                    int[] d = new int[változószám];
                    for (int x = 0; x < változószám; x++)
                    {
                        if (i == j && egyenletek[j][i] == 0)
                        {
                            bool changed = false;
                            for (int z = egyenletek.Length - 1; z > i; z--)
                            {
                                if (egyenletek[z][i] != 0)
                                {
                                    int[] temp = new int[változószám];
                                    temp = egyenletek[z];
                                    egyenletek[z] = egyenletek[j];
                                    egyenletek[j] = temp;
                                    changed = true;
                                }
                            }
                            if (!changed)
                            {
                                textBox1.Text += "Az egyenletrendszernek nincs megoldása!'r'n";
                                return;
                            }
                        }
                        if (egyenletek[j][i] != 0)
                        {
                            d[x] = egyenletek[j][x] / egyenletek[j][i];
                        }
                        else
                        {
                            d[x] = egyenletek[j][x];
                        }
                    }
                    egyenletek[j] = d;
                }
                for (int y = i + 1; y < egyenletek.Length; y++)
                {
                    int[] f = new int[változószám];
                    for (int g = 0; g < változószám; g++)
                    {
                        if (egyenletek[y][i] != 0)
                        {
                            f[g] = egyenletek[y][g] - egyenletek[i][g];
                        }
                        else
                        {
                            f[g] = egyenletek[y][g];
                        }
                    }
                    egyenletek[y] = f;
                }
            }
            double val = 0;
            int k = változószám - 2;
            double[] eredmény = new double[egyenletek.Length];
            for (int i = egyenletek.Length - 1; i >= 0; i--)
            {
                val = egyenletek[i][változószám - 1];
                for (int x = változószám - 2; x > k; x--)
                {
                    val -= egyenletek[i][x] * eredmény[x];
                }
                eredmény[i] = val / egyenletek[i][i];
                if (eredmény[i].ToString() == "NaN" || eredmény[i].ToString().Contains("Végtelen sok megoldás."))
                {
                    textBox1.Text += "Az egyenletrendszernek nincs megoldása!'n";
                    return;
                }
                k--;
                TextBox[] megoldás = new TextBox[ismeretlen];
                for (int b = 0; b < ismeretlen; i++)
                {
                    megoldás[b] = new TextBox();
                    megoldás[b].BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                    megoldás[b].Left = 536+ b * 36;
                    megoldás[b].Top = 36 * b + 10;
                    megoldás[b].Width = 35;
                    megoldás[b].Font = new Font(megoldás[b].Font.FontFamily, 16);
                    megoldás[b].BackColor = Color.Cyan;
                    megoldás[b].TextAlign = HorizontalAlignment.Center;
                    megoldás[b].Text = eredmény[ismeretlen - 1].ToString();
                    this.panel1.Controls.Add(megoldás[b]);
                }
                FileStream fs = new FileStream(file, FileMode.Create);
                BinaryWriter bw = new BinaryWriter(fs);
                for (int r = 0; r < ismeretlen; r++)
                    for (int t = 0; t < ismeretlen + 1; t++)
                        bw.Write(egyenletek[r][t]);
                bw.Close();
                fs.Close();

            }
        }
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {

            numericUpDown1.Maximum = 6;
            numericUpDown1.Minimum = 2;

        }
        private void Generál_Click(object sender, EventArgs e)
        {
        this.panel1.Controls.Clear();

        ismeretlen = (int)numericUpDown1.Value;
        TB = new TextBox[ismeretlen][];
        for(int i = 0; i < ismeretlen; i++)
            TB[i] = new TextBox[ismeretlen + 1];

        int height = 20;
        int width = 40;
        int curX = 10;
        int curY = 10;
        for(int i = 0; i < ismeretlen; i++)
        {
            for(int j = 0; j < ismeretlen + 1; j++)
            {
                TextBox txtbox = new TextBox();
                txtbox = new TextBox();
                txtbox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                txtbox.Left = curX;
                txtbox.Top = curY;
                txtbox.Width = width;
                txtbox.Height = height;
                txtbox.Font = new Font(txtbox.Font.FontFamily, 16);
                txtbox.BackColor = Color.Azure;
                txtbox.TextAlign = HorizontalAlignment.Center;
                TB[i][j] = txtbox;
                this.panel1.Controls.Add(TB[i][j]); // Add as a child of panel
                curX += width + 15;
            }
            curX = 10;
            curY = curY + height + 20;
            }
        }
        private void Ment_Click(object sender, EventArgs e)
        {
        }
    }
}

将值从动态文本框复制到锯齿数组错误

在这行代码中,您只初始化数组的第一个维度:

int[][] egyenletek = new int[ismeretlen][];

但是您可以在几行之后初始化第二个维度之前使用它(因此该维度为null(未设置为引用的对象)):

egyenletek[a][b] =int.Parse(TB[a][b].Text);

在该行之前,您应该以某种方式初始化第二维。您在代码的另一部分(jsfiddle链接的第172-173行)完成了此操作。

一般来说,当你看到这个错误时,你应该评估你正在读取和赋值的对象,并确保它们已经初始化(即。