winforms 如何在windows窗体中动态创建的文本框上应用Focus()函数?

wydwbb8l  于 2022-11-17  发布在  Windows
关注(0)|答案(2)|浏览(138)

当动态创建textBox时,我们如何使其中一个textBox具有Focus()函数?

namespace Dinamik_Arac
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 1; i <= 5; i++)
            {
                TextBox txt = new TextBox();
                Point txtKonum = new Point(300, i * 30);
                txt.Location = txtKonum;
                txt.Name = "TextBox" + i;
                txt.Text = i.ToString();
                this.Controls.Add(txt);
            }
        }
    }
}

简单地将TextBox4.Focus()写入for循环是不起作用的。

for (int i = 1; i <= 5; i++)
            {
                TextBox txt = new TextBox();
                Point txtKonum = new Point(300, i * 30);
                txt.Location = txtKonum;
                txt.Name = "TextBox" + i;
                txt.Text = i.ToString();
                if(i == 4)
                {
                    txt.Focus();
                }
                this.Controls.Add(txt);
            }

此代码也不起作用。enter image description here
如图所示,第4个textBox上没有光标。

oprakyz7

oprakyz71#

解决了,只需将this.Controls.Add(txt);代码放在if语句之前,

{
                TextBox txt = new TextBox();
                Point txtKonum = new Point(300, i * 30);
                txt.Location = txtKonum;
                txt.Name = "TextBox" + i;
                txt.Text = i.ToString();
                this.Controls.Add(txt);
                if(i == 4)
                {
                    txt.Focus();
                }

            }
ldioqlga

ldioqlga2#

我一直在研究这个问题,寻找一种替代的、更通用的方法,我想出了这个方法来关注动态创建的文本框的第四次迭代:

string focusedTextBox = "TextBoxName";//in this case "Textbox4"
Control focusControl = this.Controls[focusedTextBox];
focusControl.Focus();

在您的应用程序中,它将如下所示:

private void button1_Click(object sender, EventArgs e)
{
    for (int i = 1; i <= 5; i++)
    {
        TextBox txt = new TextBox();
        Point txtKonum = new Point(300, i * 30);
        txt.Location = txtKonum;
        txt.Name = "TextBox" + i;
        txt.Text = i.ToString();
        this.Controls.Add(txt);                
    }
    Control focusControl = this.Controls["Textbox4"];
    focusControl.Focus();
}

这种方法最明显的优点是它可以在程序的其他地方工作。当从一个单独的方法调用它时,唯一需要考虑的是,如果control.name不存在,则会抛出异常,因此为这种用法设置某种保护或异常处理可能是一个好主意。

相关问题