在C#中获得专注的文本框?

时间:2012-06-23 17:12:10

标签: c# visual-c#-express-2010

我有25个文本框。我有一个按钮,将信息粘贴到选定的文本框(聚焦的文本框)。这是我用过的代码:

    foreach (Control z in this.Controls)
        {
            if (z is TextBox)
            {  
                ((TextBox)(z)).Paste();          
            }
        }

当我使用它时,所有文本框都会被粘贴。我只需要专注的文本框。我完全难过了。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

这个怎么样?

 foreach (Control z in this.Controls)
        {
            if (z is TextBox && z.Focused)
            {  
                ((TextBox)(z)).Paste();          
            }
        }

根据MSDN Control.Focused如果控件具有焦点则为true,否则为false

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focused.aspx

答案 1 :(得分:2)

您可以使用LINQ获取焦点TextBox并粘贴。

TextBox focusedTextBox = this.Controls.OfType<TextBox>().FirstOrDefault(tb => tb.IsFocused);
if (focusedTextBox != null)
{
    focusedTextBox.Paste();
}

对于WPF / Silverlight,应使用IsFocused属性。如果您使用的是winforms,则应使用Focused属性。

答案 2 :(得分:1)

您可以尝试测试控件集合的Focused属性

foreach (Control z in this.Controls) 
{ 
    if (z is TextBox && z.Focused) 
        ((TextBox)(z)).Paste();           
} 

但是,如果TextBox包含在不同的GroupBox或其他控件容器中,这可能会变得更加复杂 在这种情况下,您需要一个递归函数

private void PasteInFocusedTextBox(ControlCollection ctrls)
{
    foreach (Control z in ctrls) 
    {
        if(z.Controls != null && z.Controls.Count > 1)
            PasteInFocusedTextBox(z.Controls);

        if (z is TextBox && z.Focused) 
           ((TextBox)(z)).Paste();           
    }
}

编辑:重读你的问题我有疑问。如果单击按钮执行粘贴操作,则焦点将切换到该按钮,您不能再使用聚焦属性

在这种情况下,您需要在单击命令按钮之前将全局变量保存在具有焦点的最后一个文本框中

private TextBox _txtLastFocused = null

private void txtCommon_Leave(object sender, EventArgs e)
{
    _txtLastFocused = (TextBox)sender;
}

private void cmdPasteButton_Click(object sender, EventArgs e)
{
   if(_txtLastFocused != null) _txtLastFocused.Paste();
}