0

25個のテキストボックスがあります。選択したテキストボックス(フォーカスされているテキストボックス)に情報を貼り付けるボタンが1つあります。これが私が使用したコードです:

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

これを使用すると、すべてのテキストボックスが貼り付けられます。フォーカスされたものだけが必要です。私は完全に困惑しています。この問題を解決するにはどうすればよいですか?

4

3 に答える 3

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

于 2012-06-23T17:14:11.980 に答える
2

LINQを使用して、フォーカスされたTextBoxを取得して貼り付けることができます。

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

WPF / Silverlightの場合は、IsFocusedプロパティを使用する必要があります。winformsを使用している場合は、Focusedプロパティを使用する必要があります。

于 2012-06-23T17:16:38.340 に答える
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();           
    }
}

編集:あなたの質問を読み直す私は疑問を持っています。ボタンをクリックして貼り付け操作を実行すると、フォーカスがそのボタンに切り替わり、focusedプロパティを使用できなくなります。

この場合、コマンドボタンをクリックする前に、フォーカスのある最後のテキストボックスをグローバル変数に保存する必要があります。

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();
}
于 2012-06-23T17:16:53.490 に答える