「編集->コピー」メニュー項目を作成せず、ショートカットキー「CTRL + C」を割り当てない場合は、コントロール(RichTextBox、DataGridViewなど)を選択して「CTRL +C」を押し、コントロール自体がコピーを処理します。テキストをコピーして、メモ帳などに貼り付けることができます。
今、私のフォーム全体を通して、私はたくさんのコントロールを持っています。しかし、コピー機能を処理することを明確にしたいカスタムコントロールがあります。そこで、ショートカットキーCTRL +Cを[編集]->[コピー]に追加しました。デフォルトでは、[有効]に設定されています。
次に、そのメニュー項目の「クリック」イベントのイベントハンドラーを実装する必要があります。コピーを処理するコードを明示的に挿入すると、次のように機能します。
public void menuEditCopy_Click(object sender, EventArgs e)
{
myCustomControl.Copy();
}
ただし、現在、コピーは他のタイプのコントロールでは機能しません。私の最初の傾向は、焦点を当てているコントロールのタイプを見つけ、それらのそれぞれに限定されたコピーコードのセットを実装することでした。
public void menuEditCopy_Click(object sender, EventArgs e)
{
if (this.ActiveControl is MyCustomControl)
{
((MyCustomControl)this.ActiveControl).Copy();
}
else if (this.ActiveControl is RichTextBox)
{
((RichTextBox)this.ActiveControl).Copy();
}
}
等...
ただし、私のコントロールはSplitContainerに追加されており、デバッグでは、コントロールが選択されていることがわかっていても、this.ActiveControlがコントロールではなくsplitcontainerインスタンスに設定されていることが示されています。
したがって、私の最後の考えは、すべてのコントロールにフォーカスがあるかどうかを文字通りチェックすることです。
public void menuEditCopy_Click(object sender, EventArgs e)
{
if (myCustomControl.Focused)
{
myCustomControl.Copy();
}
else if (richTextBox1.Focused)
{
richTextBox1.Copy();
}
}
可能であればこれを避けたいと思います。コントロールがたくさんあり、新しいコントロールを追加する場合は、それを更新する必要があります。これを行うためのより良い方法はありますか?
ありがとう