- - PR -
DataGridViewでクリック無しで編集モードを開始したいのです。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-05 20:25
こんばんは。
VB2005のDataGridviewを使っています。 DataGridViewに、データを元に列と行を追加し、 CurrentCellを最初の行の3列目に設定しています。 (どのセルかというのは、この質問にはあまり関係ないと思いますが) コードは、 Me.CurrentCell = Me.Rows(0).Cells(2) のように設定しています。 そうすると、そのセルが反転表示された状態にはなるのですが、 一旦クリックをしないと、編集が開始できません。 編集し、Enterを押して次のセルに移った際には、 クリックをしなくても、入力を開始すると、そのまま編集モードに入れます。 最初に設定したCurrentCellでもクリック無しで編集を開始できるようには、 どうすればよいのでしょうか。 (できれば、CurrentCellを設定した時点で、編集モードの状態にしたいです。) 下手な文章で、わかりにくくてすみません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-06-05 22:09
えりさん、こんにちは
ダッチです。
Form.Load イベントにコードを入れてみましたが再現しませんね。キーを入力すると編集できます。 新規に作成し直して、Me.CurrentCell = Me.Rows(0).Cells(2) このコードを実装すると再現できますか。 また、確実に再現するコードを見せていただく事はできますか。
DataGridView.BeginEdit メソッド を使用してみてください。使用するタイミングは Form.Shown イベント がいいと思います。 また、DataGridView.EditMode プロパティ でいろいろと編集モードに入る条件を変更できますので、一度調べてみるといいと思います。 | ||||||||
|
投稿日時: 2007-06-06 00:09
素朴な疑問なのですが、DataGridView以外にコントロールが存在していて、
そちらがActiveControlになっていたりしませんか? DataGridViewで反転されているのと、Activeになっているのとは別だったと思いますので・・・。CurrentCellを設定してもActiveにはならなかったと思いました。 全然的はずれでしたら申し訳ないです。 | ||||||||
|
投稿日時: 2007-06-06 09:49
おはようございます。
ありがとうございます。 ご指摘の通り、コントロールがActiveになっていませんでした。 CurrentCellを設定するまえに、 Me.Focus を追加したら、できました。 ありがとうございました。 | ||||||||
|
投稿日時: 2007-06-06 14:26
すいません。
うまくいってませんでした。 画面としては、 TreeViewとDataGridViewがあり、 TreeViewのノードを選択すると、それに合わせたデータがDataGridViewに表示され、 そのDataGridViewのセルが編集状態になるようにしたいのです。 (選択されたTreeViewのノードは選択されていることが分かるように、背景色等はSelectedColorのままにしておきたいです) TreeViewのAfterSelectイベントでGridを初期化して、その際GridでMe.Focusにしても、TreeViewにFocusがあるような状態になってしまっています。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-06-06 21:33
こちらが参考になると思います。 TreeViewからのFocus移動について http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=23529&forum=7&start=0 TreeView に対してクリックした時の動きはこれで良くなると思います。その他にキーボードで選択した場合などの動きを確認すれば何とかいけそうな気がします。 | ||||||||
|
投稿日時: 2007-06-07 11:18
ありがとうございます。
C#のことはさっぱりわからないので、変換するのに苦労しましたが、 どうにか期待する動きになりました。 ただ、 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if(e.Action == TreeViewAction.ByMouse) { Application.Idle += new EventHandler(Application_Idle); } } private void Application_Idle(object sender, EventArgs e) { Application.Idle -= new EventHandler(Application_Idle); button1.Focus(); } のコードというのは、一体何をしているコードで、何故これでうまくいくようになるのか、さっぱりわからないです。勉強不足ですみません。 | ||||||||
|
投稿日時: 2007-06-07 12:00
誤解したならすいません、ただ聞くだけじゃなくて何がわからないか書いてねってことでした。向こうでやるなら向こうでやったほうがわかりやすかった気もするけれどまぁいいか。
VB だったら RemoveHandler と AddHandler そのままのコードですね。
を受けて南部さんのそのコードが出てきたわけですよね。 _________________ かるあ のメモ と スニペット |