将 TextBox 的值填充到特定的 Textbox

Populate TextBox's value to a specific Textbox

我有三个 TextBoxe1、TextBoxe2 和 TextBoxe3 以及一个主 TextBox4 和 Button1,当它被单击时,它会将 TextBox4 的值插入到被单击的(chosen/selected/clicked 一个)TextBox 中。此代码使用相同的值填充所有文本框。

    private void button1_Click(object sender, EventArgs e)
    {
        TextBox[] array = new TextBox[3] { textBox1, textBox2, textBox3 };
        for (int i = 0; i < 3; i++)
        {
            if (array[i].Focus())
            {
                array[i].Text = textBox4.Text;
            }
        }

    }

但我希望它获取 TextBox4 的值并插入到我单击的 TextBox2 中。喜欢这个插画:

将 3 个目标 TextBoxClick 事件注册到同一个处理程序:

public Form1()
{
    InitializeComponent();

    textBox1.Click += TransportValueEvent_Click;
    textBox2.Click += TransportValueEvent_Click;
    textBox3.Click += TransportValueEvent_Click;
}

在处理程序中获取 sender(这将是您单击的文本框)作为 TextBox 并写入值:

private void TransportValueEvent_Click(object sender, EventArgs e)
{
    (sender as TextBox).Text = textBox4.Text;
}

现在您不再需要该按钮了。单击该值后,该值将立即写入正确的 TextBox。

如果 textBox4 为空,您可能想避免删除,那么只有在以下情况下才能更新值:

private void TransportValueEvent_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrWhiteSpace(textBox4.Text))
    {
        (sender as TextBox).Text = textBox4.Text;
    }
}

最好改变你为那些 TextBox 控件设置值的方式并考虑另一个 UI,但无论如何,如果你想保持原样,我会分享满足您在问题中描述的要求的想法。

在表单中定义一个字段,TextBox selectedTextBox;,然后处理这 3 个 TextBox 控件和处理程序集 selectedTextBox = (TextBox)senderEnter 事件。然后在按钮的 Click 事件处理程序中,检查 selectedTextBox 是否不为空,然后设置 selectedTextBox.Text = textBox4.Text;:

TextBox selectedTextBox;
public Form1()
{
    InitializeComponent();

    textBox1.Enter += TextBox_Enter;
    textBox2.Click += TextBox_Enter;
    textBox3.Click += TextBox_Enter;

    button1.Click += button1_Click;
}

void TextBox_Enter(object sender, EventArgs e)
{
    selectedTextBox = (TextBox)sender;
}
void button1_Click(object sender, EventArgs e)
{
    if(selectedTextBox!=null)
        selectedTextBox.Text = textBox4.Text;
}

确保您没有附加事件处理程序两次,因此要附加事件处理程序,请使用代码编辑器或设计器,而不是同时使用它们。