有没有一种方法可以通过单击c#中的按钮来传递值

问题描述 投票:0回答:1

我有一个简单的程序,该程序使用文本文件作为主要数据输入,并且我必须创建一个Windows窗体应用程序,该应用程序将允许用户使用该数据进行操作。我创建了一些按钮,使我们可以删除,编辑,添加并向我们显示.txt文件中的数据。我已经想出了如何在单击按钮时从该表中写出数据,但是我似乎无法弄清楚如何从用户输入中保存数据。

private void input_Click(object sender, EventArgs e)
{
        string brand;
        int power, year;
        double price;

        string message, title, defaultValue;
        message = "Input the brand of a tractor ";
        title = "Insert a new Tractor";
        defaultValue = "John Deere";

        brand= Interaction.InputBox(message, title, defaultValue, 100, 100);

        defaultValue = "100";
        message = "input Power";
        power= Convert.ToInt32(Interaction.InputBox(message, title, defaultValue, 100, 100));

        defaultValue = "100000";
        message = "Input price";
        cena = Convert.ToDouble(Interaction.InputBox(message, title, defaultValue, 100, 100));

        defaultValue = "2020";
        message = "input Year";
        year= Convert.ToInt32(Interaction.InputBox(message, title, defaultValue, 100, 100));


        Array.Resize(ref listTraktor, listTraktor.Length+1);
        listTraktor[listTraktor.Length] = new Traktor(znamka, moc, cena, letnik); 

        string[] novaVsebina = new string[listTraktor.Length-1];
        for (int i = 0; i < novaVsebina.Length-1; i++)
        {
            novaVsebina[i] = listTraktor[i].ToString();
        }

        File.WriteAllLines("Agromehanika.txt",novaVsebina , Encoding.UTF8);

    }

拖拉机的数组在类中创建。现在,使用此代码,我想向该表添加一个新的Tractor并将值保存在该txt文件中。它基本上应该重写文件中的所有数据,并添加用户已输入的新数据,但是我似乎无法理解如何将该数组传输到程序本身。感谢您的帮助

c# winforms button user-input
1个回答
0
投票

首先,我假定Traktor是您创建的一个类,该类重写ToString方法,以便它返回所需的拖拉机信息,而不是{Namespace} .Traktor。

我在您的代码中遇到的第一个问题是以下行:

    listTraktor[listTraktor.Length] = new Traktor(znamka, moc, cena, letnik); 

请注意,在C#和许多其他编程语言中,数组的第一个元素的索引为0,因此,数组的最后一个元素的索引为其长度-1。

即:包含10个元素的数组从索引0开始到索引9结束。

因此,这行代码将导致IndexOutOfRangeException。要更改数组最后一个元素的值,您应该编写:

listTraktor[listTraktor.Length - 1] = new Traktor(znamka, moc, cena, letnik);
// haven't seen the parameters you pass to Traktor's constructor assigned, make sure you are also passing variables that exist in the context and are assigned

下一个问题是字符串的初始化[] novaVsebina。您正在创建一个长度小于listTraktor数组1的字符串数组。这实际上意味着您无法将所有元素的字符串存储在listTraktor中,因为您的字符串数组的长度较小。如果要将所有牵引器ToString()结果存储在单独的数组元素中,则需要使该字符串数组与牵引器数组的长度相同。

最后一个问题是您的for循环条件。如前所述,C#中任何数组的最后一个元素的索引都是数组的长度减去1。您的条件是:i

解决了上述所有问题之后,您的代码应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.