こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C# DataGridViewの行をDeleteキーで削除したい

お世話になっています。

只今DataGridViewを使用した表を作成しています。
入力によってDBへ追加、編集するところまで行きました
あとは削除だけと思っていたのですがうまくいきません。。。
行ヘッダを選択してDeleteキーを押下すると
選択された行を削除する処理に繋げたいのですが
キーイベントを拾ってくれません・・・

あちこちのサイトを見て回りましたが
解決方法が見つからず・・・
プロパティにて、AllowUserToDeleteRowsをtrueにしていますが、それだけでは出来ないのでしょうか?

よろしくお願いします。

投稿日時 - 2009-05-20 20:12:28

QNo.4975705

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

イベントが拾えないってことでしょうか。

this.dataGridView1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dataGridView1_KeyPress);

ってのが自動で入るハズなのですが・・・・・

ご確認ください。

ではでは~★

投稿日時 - 2009-05-21 13:28:05

補足

+=でイベントを登録したら普通出来ますよね・・・
(ほかのListBoxとかはそれを使える)
私もそう思って登録してるのですが、全く反応してくれません・・・

DataGridViewだけイベントの登録方法が
特別とかということではないんですよね・・・?
うーん、私が何か勘違いしてるんですかね;
コードをもう一度見直してみます・・・

投稿日時 - 2009-05-21 19:25:31

お礼

今日色々やっていたら、解決することができました!
お騒がせしました;

原因は、EditModeをEditOnEnterにしていたせいで
行を選択した後もセルにフォーカスが行っていたからでした・・・
不格好かもしれませんが、行を選択した際に一度ReadOnlyをtrueに
することでキーイベントを受け取らせることができました。

何度も回答いただきありがとうございました。
これからも精進していけるよう頑張ります。。。

投稿日時 - 2009-05-22 19:38:04

ANo.2

あっ、ごめ~ん。

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
if (!r.IsNewRow)
{
dataGridView1.Rows.Remove(r);
}
}
}
}

に変更してね(^^;

投稿日時 - 2009-05-20 21:57:43

ANo.1

こんばんわぁ、Blackwinglsです。

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows.Count);
}
}
とかではどうでしょう。

ではでは~☆

投稿日時 - 2009-05-20 21:41:20

お礼

回答ありがとうございます
ですが、これではうまくいきませんでした

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("ボタンが押された");
}

これさえ動いてくれません;

投稿日時 - 2009-05-20 21:59:06

あなたにオススメの質問