【问题标题】:Multiple TextBox to Array多个文本框到数组
【发布时间】:2017-08-29 19:31:49
【问题描述】:

我的问题可能有一个简单的解决方案,但我只是没有掌握它。 在这种情况下,我希望通过用户在文本框等中输入并存储在数组中的几个特征来注册车辆,以便他可以查找车辆,或更改所述车辆的某些特征。

分两步分解:

  1. 首先,用户从 numericupdown 中选择一个值并单击一个按钮,从而定义正在使用的数组的大小。这是我用下面的代码做的,我不知道它是否 100% 正确:

int aSize = Convert.ToInt32(numericUpDown1.Value);
int[] Viaturas;
Viaturas = new int[aSize];

  1. 现在,用户有几个 TextBoxes、DateTimePickers 和 Comboboxes,他可以在其中输入车辆的特征。然后他点击一个按钮,所有信息都存储在一个数组中,每辆车都存储了它的特性,这样他就可以查找它们。

假设第一点没问题,第二点是我挣扎的地方,我不知道如何编码。有什么想法吗?

提前致谢!

【问题讨论】:

  • aSize 代表什么?这是您存储的车辆数量,所有车辆都具有相同的属性吗?
  • @ElementalPete 是的,aSize 是用户在 numericupdown 中定义的数组的大小,指的是它可以存储的车辆数量,所有车辆具有相同的属性是的!跨度>
  • 为什么您希望用户必须使用 UpDown 调整数组的大小?当他们添加一辆新车时,为什么不直接做Viaturas.Length + 1 呢?你也不能只重建一个数组。你会失去它。你必须先复制它。
  • 我想你只是回答了你自己的问题——你需要提前知道数组的大小才能按照他尝试的方式来做......

标签: c# arrays windows winforms


【解决方案1】:

听起来你想创建一个对象来存储所有数据。

public class Vehicle {
   public Vehicle(string make...) {
       Make = make;
       ...
   }
   public string Make;
   public string Model;
   public string Year;
   public string Color;
...
}

然后您可以使用List 来存储所有车辆,它将为您处理数组的大小:

List<Vehicle> Vehicles = new List<Vehicle>();
Vehicles.Add(new Vehicle(textboxMake.Text, ...));

然后像这样访问它们:

textboxMake.Text = Vehicles[0].Make;

【讨论】:

  • 是的,我不知道的访问部分,我确实尝试使用列表,效果很好。但是,不能用数组或多维数组来完成吗?
  • @GonçaloDias 始终使用列表,除非您“必须”使用数组。更大的灵活性。
  • @LarsTech 我知道,我希望我可以,但这是“必须”使用数组的人之一。我可以选择使用两种方法,其中一种必须是数组。 List 是我的第一个想法,我得到了它的工作,数组一个让我感到困惑。
  • 即使你必须将它传递给一个需要数组的方法,如果你使用的是较新版本的 .Net,Lists 也有一个 .ToArray() 方法。您可以创建一个列表,然后调用MyMethodThatExpectsAnArray(myList.ToArray());
  • 似乎我们缺少能够正确帮助您的信息。阵列将如何呈现给最终用户?是什么数组进入了让你无法使用数组的原因?
【解决方案2】:

我同意 bwoogie - 为此使用强类型对象,并尽可能使用列表。此示例显示了当用户填写表单并单击按钮时如何添加新车辆。它有用于数组或列表的样本。请注意,数组和列表都可以传递给同一个方法,该方法需要一个车辆数组:

// you should be able to use a list...
List<Vehicle> list = new List<Vehicle>();

// or if you must use an array
Vehicle[] array; // initialize it like you do in your example
int arrayPosition = 0;

private void button1_Click(object sender, EventArgs e)
{
    // create an instance of a strongly typed object using your textboxes, etc.
    Vehicle v = new Vehicle();
    v.Make = textBoxMake.Text;
    v.PurchaseDate = dtpickerPurchaseDate.Value;
    v.Engine = comboBoxEngine.SelectedText;

    // add the strongly typed object to a list
    list.Add(v);

    // or if you must use an array
    array[arrayPosition] = v;
    arrayPosition++;

    // you can call a method that expects an array even if you are using a list
    DoStuffWithTheArray(list.ToArray());

    // or if you must use an array
    DoStuffWithTheArray(array);
}

private void DoStuffWithTheArray(Vehicle[] array)
{
    // expects an array of vehicles, but you can call it with a list or an array.
}

【讨论】:

  • 非常感谢,我现在就尝试实现这个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
相关资源
最近更新 更多