如何在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
时,其文本必须粘贴到当前处于焦点的文本框中
mybtn1.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;
}
}