通过文本框分配相应的正数

本文关键字:分配 文本 | 更新日期: 2023-09-27 18:17:00

我编写了一个程序,使我在文本框上输入的数字按下一个按钮(例如"GO"),就会相应地分布在每个文本框中。将显示的数字将是正数,而负数将被删除(将不显示)。

共有6个文本框1路输入,5路输出和一个按钮。

输出应该是,

输入:12(<<p> - em>按去]——

box1: 12

输入:22(<<p> - em>按去]——

box2: 22

等等……

int[] posno={0,0,0,0,0};
    private void gobtn_Click(object sender, EventArgs e)
    {
        int input;
        input = Int32.Parse(num.Text);
        for (int x = 0; x <= 4; x++)
        {
            if (input >= 0)
                posno[x] = input;
            num.Clear();
            num.Focus();
            no1.Text = posno[0].ToString();
            no2.Text = posno[1].ToString();
            no3.Text = posno[2].ToString();
            no4.Text = posno[3].ToString();
            no5.Text = posno[4].ToString();
        }
    }

我似乎无法相应地分配数字,有什么方法可以做到这一点吗?

通过文本框分配相应的正数

不是真正的答案(因为我不知道你的代码在功能上有什么问题),但你的代码可以更清晰:

int[] posno={0,0,0,0,0};
private void gobtn_Click(object sender, EventArgs e)
{
    int input;
    input = Int32.Parse(num.Text);
    if (input >= 0)
    {
        for(int x = 0; x < 5; x++) 
        {
            posno[x] = input;
        }
        no1.Text = posno[0].ToString();
        no2.Text = posno[1].ToString();
        no3.Text = posno[2].ToString();
        no4.Text = posno[3].ToString();
        no5.Text = posno[4].ToString();
    }
    num.Clear();
    num.Focus();
}

可以用不同的方式来完成

int[] posno={0,0,0,0,0};
int lastInput = 0;
    private void gobtn_Click(object sender, EventArgs e)
    {
        int input = Int32.Parse(num.Text);
        if (input >= 0)
        {
            posno[lastInput] = input;
            lastInput++;
            //reset counter
            if (lastInput = 5) 
            { 
                lastInput = 0; 
            }
        }
        no1.Text = posno[0].ToString();
        no2.Text = posno[1].ToString();
        no3.Text = posno[2].ToString();
        no4.Text = posno[3].ToString();
        no5.Text = posno[4].ToString();
    }

这是你要找的吗?

你的问题没有说得很清楚,但是让我看看我是否理解了你想要达到的目的。

你有一个"输入"文本框和5个"输出"文本框。

您希望每次单击"GO"按钮时,输入文本框中的值应按顺序写入输出文本框,这意味着您第一次单击GO时,值应转到输出TextBox1,依此类推。

基于这个假设,有一种方法可以实现这一点。它是基于你的文本框顺序命名,如tbOutput1, tbOutput2等。

public partial class Form1 : Form
{
    private int index;
    public Form1()
    {
        InitializeComponent();
        ResetForm();
    }
    private void ResetForm()
    {
        index = 1;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        TextBox tb = this.Controls.Find("tbOutput" + index.ToString(), false).OfType<TextBox>().FirstOrDefault();
        if(tb!= null)
        {
            tb.Text = tbInput.Text;
        }
        index++;
        if (index > 5)
            ResetForm();
    }
}

我还假设你想要"循环",这样当你到达第5条时,你就应该回到第1条。如果没有,那么只需相应地修改代码。

因此,一般的想法是将索引的"状态"作为类成员来维护,以便在调用按钮的click事件处理程序之间保留它。

然后,使用ControlsCollection.Find()方法(该方法可以根据窗体控件的名称查找窗体控件),您将获得对索引对应的文本框的引用。我使用了一点Linq来"按摩"从Find()返回到一个文本框,因为Find()返回一个Control对象数组。

如果这不是你想要做的,请澄清你的问题。

欢呼

我的意思是:

inputbox: 10   [go]    outputbox1: 10
inputbox: 2    [go]    outputbox2: 2
inputbox: 4    [go]    outputbox3: 4
inputbox: -2   [go]    (no output)
inputbox: -3   [go]    (no output)
inputbox: 33   [go]    outputbox4: 33
inputbox: 46   [go]    outputbox5: 46
so, the outcome will be: 10, 2, 4, 33, 46

为了充分理解我的问题,我的程序设计如下:

如果你没有理解我的问题,我很抱歉