- PR -

DataGridViewでクリック無しで編集モードを開始したいのです。

投稿者投稿内容
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-05 20:25
こんばんは。
VB2005のDataGridviewを使っています。
DataGridViewに、データを元に列と行を追加し、
CurrentCellを最初の行の3列目に設定しています。
(どのセルかというのは、この質問にはあまり関係ないと思いますが)
コードは、
Me.CurrentCell = Me.Rows(0).Cells(2)
のように設定しています。
そうすると、そのセルが反転表示された状態にはなるのですが、
一旦クリックをしないと、編集が開始できません。
編集し、Enterを押して次のセルに移った際には、
クリックをしなくても、入力を開始すると、そのまま編集モードに入れます。
最初に設定したCurrentCellでもクリック無しで編集を開始できるようには、
どうすればよいのでしょうか。
(できれば、CurrentCellを設定した時点で、編集モードの状態にしたいです。)
下手な文章で、わかりにくくてすみません。
よろしくお願いします。
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2007-06-05 22:09
えりさん、こんにちは
ダッチです。

引用:

えりさんの書き込み (2007-06-05 20:25) より:
Me.CurrentCell = Me.Rows(0).Cells(2)
のように設定しています。
そうすると、そのセルが反転表示された状態にはなるのですが、
一旦クリックをしないと、編集が開始できません。
編集し、Enterを押して次のセルに移った際には、
クリックをしなくても、入力を開始すると、そのまま編集モードに入れます。
最初に設定したCurrentCellでもクリック無しで編集を開始できるようには、
どうすればよいのでしょうか。


Form.Load イベントにコードを入れてみましたが再現しませんね。キーを入力すると編集できます。
新規に作成し直して、Me.CurrentCell = Me.Rows(0).Cells(2) このコードを実装すると再現できますか。
また、確実に再現するコードを見せていただく事はできますか。

引用:

(できれば、CurrentCellを設定した時点で、編集モードの状態にしたいです。)


DataGridView.BeginEdit メソッド を使用してみてください。使用するタイミングは Form.Shown イベント がいいと思います。
また、DataGridView.EditMode プロパティ でいろいろと編集モードに入る条件を変更できますので、一度調べてみるといいと思います。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-06-06 00:09
素朴な疑問なのですが、DataGridView以外にコントロールが存在していて、
そちらがActiveControlになっていたりしませんか?

DataGridViewで反転されているのと、Activeになっているのとは別だったと思いますので・・・。CurrentCellを設定してもActiveにはならなかったと思いました。

全然的はずれでしたら申し訳ないです。
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-06 09:49
おはようございます。
ありがとうございます。
ご指摘の通り、コントロールがActiveになっていませんでした。
CurrentCellを設定するまえに、
Me.Focus
を追加したら、できました。
ありがとうございました。
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-06-06 14:26
すいません。
うまくいってませんでした。
画面としては、
TreeViewとDataGridViewがあり、
TreeViewのノードを選択すると、それに合わせたデータがDataGridViewに表示され、
そのDataGridViewのセルが編集状態になるようにしたいのです。
(選択されたTreeViewのノードは選択されていることが分かるように、背景色等はSelectedColorのままにしておきたいです)
TreeViewのAfterSelectイベントでGridを初期化して、その際GridでMe.Focusにしても、TreeViewにFocusがあるような状態になってしまっています。
よろしくお願いします。
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2007-06-06 21:33
引用:

えりさんの書き込み (2007-06-06 14:26) より:

TreeViewのAfterSelectイベントでGridを初期化して、その際GridでMe.Focusにしても、TreeViewにFocusがあるような状態になってしまっています。
よろしくお願いします。


こちらが参考になると思います。

TreeViewからのFocus移動について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=23529&forum=7&start=0

TreeView に対してクリックした時の動きはこれで良くなると思います。その他にキーボードで選択した場合などの動きを確認すれば何とかいけそうな気がします。
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 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();
}
のコードというのは、一体何をしているコードで、何故これでうまくいくようになるのか、さっぱりわからないです。勉強不足ですみません。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-06-07 12:00
誤解したならすいません、ただ聞くだけじゃなくて何がわからないか書いてねってことでした。向こうでやるなら向こうでやったほうがわかりやすかった気もするけれどまぁいいか。

引用:

えりさんの書き込み (2007-06-07 11:18) より:

のコードというのは、一体何をしているコードで、何故これでうまくいくようになるのか、さっぱりわからないです。勉強不足ですみません。


VB だったら RemoveHandler と AddHandler そのままのコードですね。

引用:

じゃんぬねっとさんの書き込み(2005-08-10 18:42) より

Me.ActiveControl = Nothing で逃がしたところで、
Node を掴んでると無視されます。
それどころか、Me.Button1.Focus() の戻り値が True なのが憎いでしw


を受けて南部さんのそのコードが出てきたわけですよね。

_________________
かるあ のメモスニペット

スキルアップ/キャリアアップ(JOB@IT)