掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
データグリッド上のコンボボックスで、"←"キーでセルを左に移動させるには? (ID:115799)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ソースはリンク先で分かるから改造したとこだけ教えてくれる方が 有難かったかなぁ(^^;)…でないとオイラ…解析しなきゃいけないデショ?w >初心者なもので、このような低レベルな質問になってしまいますが 『継承』の時点で低レベルじゃないよ?こーゆー書き方ってボクは嫌い。 ボクの回答基準は相手の『誠意』であり『レベル』じゃないのデス。 逆に相手が『初心者』ってゆー言葉を出したら全部答えなきゃならないのか? それには疑問が残ります。 『初心者』っていっても幅がありますし、結局、相手の力量は書込みの内容から 判断しないといけません。こちらで判断できますし、寧ろこちらで判断すること だと思ってます。自称『初心者』って意味無いし、鬱陶しい場合が多いのでボクは 嫌ってます。ボクがメインで回答を付けている場合はこの言葉を使わないように しましょうw。機嫌を損ねます(爆)。…自分のやったことを見せれば他は必要無い と思うんだけどね…。社交辞令の謙遜(?)も必要かにゃ…。回答者に『あなたなら 分かるはずだから答えて下さい!』と強要されている感じがして謙遜になってない 気がするんですよねぇ。『わたしは分かりません』と宣言されてるみたいにも感じ ます。オイラだって分かるもののみ答えてたら3割程度しか答えられませんって(汗)。 ほとんどの回答はその場で考えてますからねぇ。質問者の問題なのにボクだけ考え て、ボクだけ調べて…答えだけ盗まれるのはイヤナノ。 さて、ざっと解析しましたが、基本は http://dobon.net/vb/dotnet/samples/datagridcomboboxcolumn.html の DataGridComboBoxColumn(DataGridTextBoxColumn の継承)のままですよね?。 ただし、継承しているのは DataGridTextAlignColumn というユーザ定義の クラス。たぶん http://dobon.net/vb/dotnet/datagrid/aligncolumnheaderonly.html ↑これ?…こーゆー情報こそ省略されては困るんですが…(^^;)まぁ、…探しますけどね(TT) 改造した点は… DataGridTextAlignColumn の方は全く分からないけど、そのまま 使ってるとして、動作が変わってくる変更点として _comboBox.DropDownStyle = ComboBoxStyle.DropDown のユーザが入力可となってる所くらいですかねぇ。 2段階以上のユーザによる独自の継承をする場合はオーバーロードで動作が矛盾しない ように気をつけて下さいね。…特にどっかのコピペの場合は十分に動作を確認して下さい。 DataGrid から DataGridTableStyle.GridColumnStyles 経由で DataGridTextBoxColumn がどう動くかはあまり調べてないんだけど、Edit メソッドでコントロール _comboBox を表示して編集。選択項目が変われば _comboBox_SelectionChangeCommitted イベント。 テキスト編集中は _editing フラグを立てて、編集終了時に Commit 。SetColumnValueAtRow で 指定行の更新ですね。それとフォーカス移動時の _comboBox_Leave イベント。この辺りが データ編集の終了処理として関係しているわけです。 >いろいろ試してみたのですが、うまくいきません。 その『何を』『どう』試して『何が』上手くいかなかったかの情報が欲しい んですが?(^^;) ボクも『今』解析して『今』考えて『今』回答してるので、まいさんからの 情報が何もないと、最初から考えないといけないわけです。そこでまいさんの 試した内容が書き込まれていると参考に出来ます。ボクがもう一度試すのは 二度手間でしょ?。新しい動作のコーディングに関しては『質問者』はただの 『質問者』であってはいけないと思います。『回答者』の『協力者』でないと…。 『わたしには出来ませんのでどうにかして下さい』的な1から10までこちらで 考えないといけない質問なら、最初から回答する気はありませんので、ご了承 ください。 …まぁ、このコードだと DataGridComboBoxColumn クラスで例にならって イベントコードの追加でしょうか。とりあえず _comboBox.KeyDown あたりが 無難でしょうね。ローカル変数に _comboBox を持ってるわけですから、これ を使えばどういう状態なのか分かります。カーソル位置によって編集終了時 の処理を走らせて…でもそれだけだと移動が出来ませんね。…どうしますかねぇ。 とりあえず SendKeys.Send しちゃうのが一番修正が少ないように思います。 編集終了処理をしてコンボボックス隠した後(←隠さないと暴走の危険あり) SendKeys.Send("{LEFT}") か、タブを送っていいなら SendKeys.Send("+{TAB}") で _comboBox_Leave イベントが走って確定してくれますね。 確実にいくなら DataGrid のハンドル使って API の SendMessage かなぁ。 自分自身に送るなら Control.WndProc とか使えそうだけど…うーむ。 …そこそこ動くコードは書いたけど考え中…。とりあえず上に書いたような 方法を調べてコーディングしてみて下さい。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.