DOBON.NET DOBON.NETプログラミング掲示板過去ログ

「DataGridでComboBoxを使う」について

環境/言語:[WindowsXP C#]
分類:[.NET]

こんにちわ。

.NET Tipsの「DataGridでComboBoxを使う」を拝見させていただきました。
試験的に組み込んでテストさせて頂いたのですが一点だけ修正が難しい点が
あったのでお分かりになられる方が折られましたらご回答よろしくお願い致します。

セレクト、更新動作等には問題ないようでしたが、行(ROW)をDeleteキーを使用して
削除する際にComboBox自体が入力フォーカスを保持していると、行と共には削除されず
画面に残ったままの常態になります。
この時点でComboBoxを選択してフォーカスを移動させると削除された行にてコミットが
起こってしまうのでエラーになってしまいます。

一通り調べたつもりなのですが海外の似たサンプルでも同じような症状になります。
削除と共にComboのVisibleをFalseにするか、Row選択時にはComboにはフォーカスを
持たせないかのどちらかで対処できるかと思うのですがなかなかうまく行かない状態です。

お分かりになられ方が折られましたらよろしくお願い致します。
(この記事にはファイル"test.jpg"が添付されていましたが、削除されました。)
■No4153に返信(mbさんの記事)
> セレクト、更新動作等には問題ないようでしたが、行(ROW)をDeleteキーを使用して
> 削除する際にComboBox自体が入力フォーカスを保持していると、行と共には削除されず
> 画面に残ったままの常態になります。

Commitメソッドの先頭に

_comboBox.Visible = false;

を書き足して試していただけませんか?
> Commitメソッドの先頭に
> _comboBox.Visible = false;
> を書き足して試していただけませんか?

ご回答ありがとう御座います。
上記の内容で実行してみましたが削除される場合とされない場合があるようです。
Comboを表示した行を削除することは出来たのですがComboを出さずに
行セレクトで削除しようとした所Commitにも飛んでこないようでした。

もうすこし調べたいと思います。
解決いたしました。

対処法はやはりCommitに _comboBox.Visible = false;
を追加することでしたがVisibleFalseを行った時点でフォーカスが
GRIDに戻っていなかったのが原因でしたので

private void HideComboBox()
{
if(_comboBox.Focused)
{
this.DataGridTableStyle.DataGrid.Focus();
}
_comboBox.Visible = false;
}

のコードを追加しComboをVisibleFalseしている部分を
HideComboBoxに置き換えることで解決いたしました。

見ていただいた皆様とご回答下さった管理人様、
ありがとう御座いました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板