【问题标题】:Clicking the same button but different action - c#单击相同的按钮但不同的操作 - c#
【发布时间】:2019-04-13 10:50:06
【问题描述】:

当我点击一个按钮时,文本将出现在 textbox1 中,但我希望它改变焦点到另一个文本框(textbox2),当我再次点击同一个按钮时,在 textbox2 中显示相同的文本。

    private void btna_Click(object sender, EventArgs e)
    {
        textBox1.Text = ("A");
        if (textBox1.Text.Length > 0)
        {
            textBox2.Focus();
        }

【问题讨论】:

  • 使用布尔字段来存储和跟踪按钮所处的“模式”(或者也许不是使用布尔值,最好为此目的创建一个枚举)...
  • 当您单击按钮时,您的文本框将失去焦点 - 因此您无法使用焦点来确定与哪个文本框进行交互。使用变量来跟踪下一个要与之交互的文本框。

标签: c# button click focus


【解决方案1】:

如果您想在单击事件中交替使用不同的 TextBox 以确定要更新哪一个,您可以在私有变量中跟踪它们,然后根据当前值切换您正在使用的一个,例如:

private TextBox textBoxToUpdate = null;

private void button1_Click(object sender, EventArgs e)
{
    // Swap the textBoxToUpdate between textBox1 and textBox2 each time
    textBoxToUpdate = (textBoxToUpdate == textBox1) ? textBox2 : textBox1;

    textBoxToUpdate.Text = "A";
}

如果您要更新多个控件,另一种方法是将它们存储在一个列表中,并增加一个定义下一项索引的整数。

// holds the text boxes we want to rotate between
private List<TextBox> textBoxesToUpdate = new List<TextBox>();

private void Form1_Load(object sender, System.EventArgs e) 
{
    // add some text boxes to our list
    textBoxesToUpdate.Add(textBox1);
    textBoxesToUpdate.Add(textBox2);
    textBoxesToUpdate.Add(textBox3);
    textBoxesToUpdate.Add(textBox4);
}

// stores the index of the next textBox to update
private int textBoxToUpdateIndex = 0;

private void button1_Click(object sender, EventArgs e)
{
     textBoxesToUpdate[textBoxToUpdateIndex].Text = "A";

    // increment the index but set it back to zero if it's equal to the count
    if(++textBoxToUpdateIndex == textBoxesToUpdate.Count) textBoxToUpdateIndex = 0;
}

【讨论】:

  • 是的,它很好,但是如何使用 4 个文本框呢? (文本框1,文本框2,文本框3,文本框4)
  • 将它们放在一个列表中,通过索引访问它们,并递增一个整数以跟踪下一个索引。我可以稍后发布一个示例
  • 好的,我添加了一个示例,但我是通过手机完成的,所以它没有经过完全测试......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2016-03-18
相关资源
最近更新 更多