我有25個文本框。我有一個按鈕可以將信息粘貼到選定的文本框中(聚焦的那個)。這裏是我使用的代碼:在C#中獲取焦點文本框?
foreach (Control z in this.Controls)
{
if (z is TextBox)
{
((TextBox)(z)).Paste();
}
}
當我使用這個,所有的文本框被粘貼。我只需要集中的一個。我完全難倒了。我如何解決這個問題?
我有25個文本框。我有一個按鈕可以將信息粘貼到選定的文本框中(聚焦的那個)。這裏是我使用的代碼:在C#中獲取焦點文本框?
foreach (Control z in this.Controls)
{
if (z is TextBox)
{
((TextBox)(z)).Paste();
}
}
當我使用這個,所有的文本框被粘貼。我只需要集中的一個。我完全難倒了。我如何解決這個問題?
這個怎麼樣?
foreach (Control z in this.Controls)
{
if (z is TextBox && z.Focused)
{
((TextBox)(z)).Paste();
}
}
根據MSDN Control.Focused是如果控件具有焦點,否則爲false
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focused.aspx
您可以使用LINQ來獲得聚焦文本框和粘貼。
TextBox focusedTextBox = this.Controls.OfType<TextBox>().FirstOrDefault(tb => tb.IsFocused);
if (focusedTextBox != null)
{
focusedTextBox.Paste();
}
對於WPF/Silverlight,應該使用IsFocused
屬性。如果你使用winforms,你應該使用Focused
屬性。
你可以嘗試測試控件集合
foreach (Control z in this.Controls)
{
if (z is TextBox && z.Focused)
((TextBox)(z)).Paste();
}
的聚焦特性然而,如果文本框包含不同GroupBoxes或其他控件容器內,這可能變得更加複雜。
在這種情況下,你需要一個遞歸函數
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();
}
使您的按鈕成爲ToolStripButton,它不會在您點擊它時竊取焦點。現在你可以使用ActiveControl屬性。 –
進一步來自@HansPassant的評論這個問題已經涵蓋了你需要什麼http://stackoverflow.com/questions/435433/what-is-the-preferred-way-to-find-focused-control-in-winforms-app –