通过文本框

时间:2015-10-10 17:10:30

标签: c# winforms numbers

我做了一个程序,我在文本框中输入的数字将通过按下按钮(例如“GO”)相应地分布在每个文本框中。将显示的数字为正数,负数将被删除(不会显示)。

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

输出应为,

输入:12

- [按GO ] -

box1:12

输入:22

- [按GO ] -

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();
        }
    }

我似乎无法相应地分配数字,有没有办法如何做到这一点?

4 个答案:

答案 0 :(得分:1)

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

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();
}

答案 1 :(得分:0)

这可能会有所不同

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();
    }

这是你正在寻找的吗?

答案 2 :(得分:0)

您的问题没有明确说明,但请查看我是否了解您的目标。

你有一个&#34;输入&#34; TextBox和5&#34;输出&#34;文本框。

每次点击&#34; GO&#34;按钮,输入TextBox中的值应按顺序写入输出TextBox,这意味着第一次单击GO时,该值应输出TextBox1,依此类推。

基于这个假设,这是实现这一目标的一种方法。它基于按顺序命名TextBox,例如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();
    }
}

我也假设你想要&#34;循环&#34;所以当你达到#5时,你应该回到#1。如果没有,那么只需相应地修改代码。

因此,一般的想法是维持&#34;状态&#34;您的索引作为类成员,以便在调用按钮的单击事件处理程序之间保留它。

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

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

干杯

答案 3 :(得分:0)

把它穿过,我的意思是:

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

完全理解我的问题,我的程序设计在这里:Design View

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

相关问题