Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中更改聚焦文本框的文本?_C#_Winforms_Button_Textbox - Fatal编程技术网

如何在C#中更改聚焦文本框的文本?

如何在C#中更改聚焦文本框的文本?,c#,winforms,button,textbox,C#,Winforms,Button,Textbox,如何将按钮的文本粘贴到当前关注的文本框中?我的表单有一个按钮btn1,带有文本“这是测试”和两个文本框txt1和txt2 单击btn1时,其文本必须粘贴到当前处于焦点的文本框中 mybtn1.OnClick的事件是 txt1.text = btn1.text; 当我将焦点更改为txt2时,如何将btn1的文本也粘贴到txt2.text?因此,当点击btn1时,它的文本必须粘贴到焦点所在的文本框中 当按钮的单击事件触发时,按钮现在具有焦点而不是文本框。所以你需要捕捉哪个文本框最后有焦点并使用它

如何将
按钮的文本粘贴到当前关注的文本框中?我的表单有一个按钮
btn1
,带有文本
“这是测试”
和两个文本框
txt1
txt2

单击
btn1
时,其文本必须粘贴到当前处于焦点的文本框中

my
btn1.OnClick
的事件是

txt1.text = btn1.text;

当我将焦点更改为
txt2
时,如何将
btn1
的文本也粘贴到
txt2.text
?因此,当点击
btn1
时,它的文本必须粘贴到焦点所在的文本框中

当按钮的单击事件触发时,按钮现在具有焦点而不是文本框。所以你需要捕捉哪个文本框最后有焦点并使用它

这是一个粗略而快速的实现,只要您的所有文本框都在加载的表单上,它就可以工作。即使文本框不是表单的直接子项(例如,包含在面板或选项卡页面中),它也可以工作:

public IEnumerable GetAll(控件,类型)
{
var controls=control.controls.Cast();
返回控件。SelectMany(ctrl=>GetAll(ctrl,键入))
.Concat(控制)
。其中(c=>c.GetType()==type);
}
私人文本框LastFocusedTextBox;
私有void Form1\u加载(对象发送方、事件参数e)
{
foreach(GetAll中的TextBox TextBox(this,typeof(TextBox)))
{
textbox.LostFocus+=(\u s,\u e)=>LastFocusedTextBox=textbox;
}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
if(lastFocusedTextBox!=null)
{
LastFocusedTextBox.Text=按钮1.Text;
}
}

GetAll函数的功劳:

当按钮的单击事件触发时,按钮现在具有焦点而不是文本框。所以你需要捕捉哪个文本框最后有焦点并使用它

这是一个粗略而快速的实现,只要您的所有文本框都在加载的表单上,它就可以工作。即使文本框不是表单的直接子项(例如,包含在面板或选项卡页面中),它也可以工作:

public IEnumerable GetAll(控件,类型)
{
var controls=control.controls.Cast();
返回控件。SelectMany(ctrl=>GetAll(ctrl,键入))
.Concat(控制)
。其中(c=>c.GetType()==type);
}
私人文本框LastFocusedTextBox;
私有void Form1\u加载(对象发送方、事件参数e)
{
foreach(GetAll中的TextBox TextBox(this,typeof(TextBox)))
{
textbox.LostFocus+=(\u s,\u e)=>LastFocusedTextBox=textbox;
}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
if(lastFocusedTextBox!=null)
{
LastFocusedTextBox.Text=按钮1.Text;
}
}

GetAll函数的积分:

应该是
txt2.text=txt1.text@viveknuna,我知道,但我在运行时怎么做?我的意思是,当点击btn1时,焦点中文本框的值必须改变。必须改变为什么?btn1的文本。btn1的文本是“test”,所以当点击btn1时,无论文本框的焦点是什么,它的文本都将是“test”,希望它现在清楚,如果(txt1.Focused){btn1.text=txt1.text;}如果(txt2.Focused){btn1.text=txt2.text;}
它应该是
txt2.text=txt1.text@viveknuna,我知道,但我在运行时怎么做?我的意思是,当点击btn1时,焦点中文本框的值必须改变。必须改变为什么?btn1的文本。btn1的文本是“测试”,所以当点击btn1时,无论文本框的焦点是什么,它的文本也将是“测试”,希望它现在清楚,如果(txt1.Focused){btn1.text=txt1.text;}或者如果(txt2.Focused){btn1.text=txt2.text;},你可以这样做

    public IEnumerable<Control> GetAll(Control control, Type type)
    {
        var controls = control.Controls.Cast<Control>();

        return controls.SelectMany(ctrl => GetAll(ctrl, type))
                                  .Concat(controls)
                                  .Where(c => c.GetType() == type);
    }

    private TextBox lastFocussedTextbox;

    private void Form1_Load(object sender, EventArgs e)
    {
        foreach(TextBox textbox in GetAll(this, typeof(TextBox)))
        {
            textbox.LostFocus += (_s, _e) => lastFocussedTextbox = textbox;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if(lastFocussedTextbox != null)
        {
            lastFocussedTextbox.Text = button1.Text;
        }
    }
Declare global variable

private Control _focusedControl;

Attach below event to all your textboxes.
private void TextBox_GotFocus(object sender, EventArgs e)
{
    _focusedControl = (Control)sender;
}
Then in your button click event.
private void btn1_Click(object sender, EventArgs e)
{
    if (_focusedControl != null)
    {
    //Change the color of the previously-focused textbox
        _focusedControl.Text = btn1.Text;
    }
}