【问题标题】:C# working with multiple arrays of textboxesC# 处理多个文本框数组
【发布时间】:2015-11-04 15:00:37
【问题描述】:

我正在 Winforms 中创建一个项目,该项目应该从 t 数组中获取值,将它们与我尚未声明的 C 变量中的值相加,并在按下 FIFO 时在 tf 文本框数组中显示结果按钮。我的问题是我似乎无法正确执行此操作。我一直在尝试定期添加等等,以确保 ti 或 t 的内容显示在 tf 上,但似乎根本没有任何效果。我的主要问题是程序只取数组的第一个值,而不是全部取走。我将在下面发布我的代码。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        foreach (Control c in this.Controls)
        {
            if (c.GetType() == typeof(TextBox))
            {
                ((TextBox)(c)).Text = "0";
            }
        }
    }

    private void fifo_Click(object sender, EventArgs e)
    {
        int c = 0;

        int[] ti = { 0, 1, 2, 3, 4, 5 };
        ti[0] = Convert.ToInt32(tiA.Text);
        ti[1] = Convert.ToInt32(tiB.Text);
        ti[2] = Convert.ToInt32(tiC.Text);
        ti[3] = Convert.ToInt32(tiD.Text);
        ti[4] = Convert.ToInt32(tiE.Text);
        ti[5] = Convert.ToInt32(tiF.Text);

        int[] t = { 0, 1, 2, 3, 4, 5 };
        t[0] = Convert.ToInt32(ta.Text);
        t[1] = Convert.ToInt32(tb.Text);
        t[2] = Convert.ToInt32(tc.Text);
        t[3] = Convert.ToInt32(td.Text);
        t[4] = Convert.ToInt32(te.Text);
        t[5] = Convert.ToInt32(tf.Text);

        int[] tf1 = { 0, 1, 2, 3, 4, 5 };
        tf1[0] = Convert.ToInt32(tfA.Text);
        tf1[1] = Convert.ToInt32(tfB.Text);
        tf1[2] = Convert.ToInt32(tfC.Text);
        tf1[3] = Convert.ToInt32(tfD.Text);
        tf1[4] = Convert.ToInt32(tfE.Text);
        tf1[5] = Convert.ToInt32(tfF.Text);

        for (int i = 0; i <= 0; i++)
        {

            ti[i] = tf1[i] + 5;
        }

    }
}

【问题讨论】:

  • for (int i = 0; i &lt;= 0; i++)
  • 首先,你的 for 循环永远不会执行它的代码块。您正在尝试循环直到i&lt;=0,这就是您将其初始化为int i = 0;。作为旁注,您应该查看int.TryParse(),而不是使用Convert.ToInt32(),以确保您始终拥有一个有效值。如果用户输入的不是数字值,您现在的方式可能会引发异常。
  • 将 for 循环更改为: for (int i = 0; i
  • 看循环很好,但函数实际上并没有做任何事情。在写入任何地方之前,对数组的更改超出范围。
  • @Matt 我假设(尽管我可能大错特错)他要么消除了多余的膨胀以专注于核心问题,要么他在调试器中观察它。不过,您是对的,因为该函数实际上除了消耗 CPU 周期之外什么都不做,而且考虑到循环代码块从不执行,这方面的作用并不大。 =)

标签: c# arrays winforms


【解决方案1】:

由于您总是使用 6 个元素,因此您可以将数组创建更改为:

const int size = 6;
int[] ti = new int[size];
int[] t = new int[size];
int[] tf1 = new int[size];

循环变为

for (int i = 0; i < size; i++)
{
    ti[i] = tf1[i] + 5;
}

顺便问一下,+5 表达式是什么意思?

【讨论】:

  • 忘记那个 5。我不知道是什么恶魔附身了我。 :P 我想最好只在“幕后”进行操作并将它们转换为文本并在文本框中显示它们?
【解决方案2】:

我不知道您认为您在 fifo_click() 中在做什么,但由于您是在函数范围内对变量执行此操作,因此它似乎不会做任何事情。 我不想让你为你工作,所以这只会让你朝着正确的(?)方向推动,但如果它还不够大喊大叫的话。

如果你定义了许多相同的对象,那么我认为你应该考虑一个类。大致如下:

class Element
{
  public int mValue;
  public TextBox mControl;
  public Element (TextBox control) {mControl = control;}
};
class FIFO
{
  public FIFO (Element[] elements) { ... }
  public void SetElement(int index, String value) {...}
  public Element[] mElements;
};

您希望将 FIFO 实例数组存储为类成员,然后它们将在调用之间保留其数据。

哦,评论你的代码,因为它让你更容易理解 WTF 正在发生的事情:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多