- 題名: DataGridのコピー
- 日時: 2005/02/28 14:23:07
- ID: 9385
- この記事の返信元:
- (なし)
- この記事への返信:
- [9386] Re[1]: DataGridのコピー2005/02/28 14:40:58
- ツリーを表示
こんにちは、じゃんぬねっと です。
■No9534に返信(はるさんの記事)
> Dim keyCode As Keys = CType(keyData & Keys.KeyCode, Keys)
> をどうするかということなんですよね?
>
> Ctype(KeyData,keys) + CType(Keys.Code,Keys)
> ・・・何が何だかわからなくなってきました。・・・
えっと、単純に [Ctrl] + [C] を捕捉するんじゃないんですか?
CType を使わなくとも、Keys 列挙体の型に合わせることができます。
でも、CType() とかわざわざ書いてあるから、私の検討違いですかね...。
もっと複雑なことやろうとしているのでしょうか?
Protected Overrides Function ProcessCmdKey(...) As Boolean
If keyData = (Keys.Control Or Keys.C) Then
MessageBox.Show("[Ctrl] + [C] が押下されたYo!")
'/ TODO : ここにコピー処理を実装
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
おはようございます、じゃんぬねっと です。
捕捉です。
■No9552に返信(はるさんの記事)
> 単純に[ctrl]+[c]で捕捉すればよかったのですね。(汗)
> C→VBに変換する所があったので、そのまま使用していました。
ちなみに C# も、
Keys keyCode = (Keys)(int)keyData & Keys.KeyCode;
if ((keyData & Keys.Control) == Keys.Control && keyCode == Keys.C) {
// 選択された文字列をコピーするコードを書く
return true;
}
ではなく、
if (keyData == (Keys.Control | Keys.C)) {
// TODO : ここにコピーを実装
return true;
}
のように実装する方が素直です。
Enum のパラメタ結合は、「+」ではなく、「|」(VB.NET だと Or) でやるべきです。
「+-」または「*/」の四則演算子は、int または double に置き換わります。
そのため、ムダなキャストが必要になってしまいます。
DataGridの項目を「Ctrl + C」でコピーすると、選択されている行全てがコピーされてしまいます。右クリックでコピーを行うと選択されている項目がけがコピーされます。選択している項目だけをコピーする場合はどうすればよいのでしょうか?