C#」タグアーカイブ

[WPF] DataGridのComboBoxやCheckBoxを1クリックで操作する

今頃WPFの話です。

以前からWPFに興味は合ったものの、どうにも良くわからなくて放置してたのですが、仕事でWPFを触る機会があって、それでちょっと覚えたので
個人的に使ってる自作ツール(C#2.0で当然Windows.Formで作成)をWPF化しようとしています。

で、前バージョンではDataGridViewを使っていて、セルのタイプがCheckBoxやComboBoxタイプだと1クリック目で編集可能状態、2クリック目で編集っていう2クリックの操作が必要になるんですね。
で、1クリックで操作したい場合、DataGridView.CellEnterイベントで目的のセルだった場合にDataGridView.BeginEdit(false);とかすると、目的を達成できます。

で、WPFではDataGridコントロールを使う訳ですが、DataGridViewと同様に編集するのに2クリック必要なんですね。
でもCellEnterに相当するイベントは見当たらないので同じ方法は使えないっぽい。

で、ググって出てくる日本語のサイトだと、DataGridTemplateColumn使ってUpdateSourceTriggerにPropertyChangedとか指定してる方法が見つかるんだけど、
ソレとは別の方法が海外サイトにあって、自分のケースではソッチのほうが合ってたのでちょっと改良してみた。きっと忘れるから未来の自分へのメモ。

        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsMouseOver" Value="True" />
                        <Condition Property="IsReadOnly" Value="False" />
                    </MultiTrigger.Conditions>
                    <Setter Property="IsEditing" Value="True" />
                </MultiTrigger>
            </Style.Triggers>
        </Style>

これをWindow.Resources要素の中で定義するだけ。
元のコードはTriggerでIsMouseOverがTrueの場合にIsEdittingの設定するだけだったけど、それだとIsReadOnly無視して編集できちゃうのでMultiTriggerにしてみた。
これなら普通にDataGridComboBoxColumnやDataGridCheckBoxColumn使えるので楽ちん。

あ、件の自作ツールは公開することは無いです。こんなん公開できねぇ・・・
類似画像検索ツールのWPF化は・・・需要ないだろうしなぁ。

DataGridViewの列追加が遅い → 列を非表示にして追加すればいいよ

普通DataGridViewを使う状況って、DBから取得したデータの表示/編集とかに使うと思うんだけど、
それはつまり行方向のデータ、つまりレコードが大量にある状況での使い方ですね。
大抵の場合、行>列です。
行数は1000とか10000とか扱っても、列は多くても精々20列とかその程度じゃないでしょうか。

なので、大量の行の追加(Rows.Add/AddRange)や仮想モードにおける行数の設定(RowCount)を使ってるときは気づかなかったのですが、

仕事でテーブルのデータを列方向に表示したいって要望があって、しかも仮想モードを使用する前提があって、
とりあえず行の場合と同じように、列を1000個設定してみたんですが

恐ろしいほど時間が掛かったのですよ。

続きを読む

漢字変換候補一覧を得る

久しぶりに技術系エントリー。

C#で独自仕様のソフトウェアキーボードを作ってほしい、という依頼を受けたので、いまその仕事をしています。
UIはまぁ、独自仕様とはいうものの、要はケータイ入力方式なだけですけどね。
で、UI周りはサクサクと作れたわけです。いやまぁまだ完成してませんが。

一番の問題は漢字変換で、読み仮名から漢字の変換候補の一覧を得る方法。
よみがなの文字列を引数にセットしたら、変換候補一覧が返ってくるような関数が欲しいわけです。

てっきりWin32 APIで簡単にできるもんだと楽観視していたのですが、こいつがどうにも厄介で。
なかなか苦労させられました。

結果を言えば、条件付きで出来た。です。
続きを読む

.NET Frameworkで共有メモリ使うメモ

.NET Framework4.0からメモリマップドファイルがサポートされたみたいですが、実務で4.0ってまだあまり使われてないよね。多分。

で、実際仕事で.NET Framework2.0でメモリマップドファイル使う事になって、ちょっと手こずったのでメモ。
言語はVBだけど、C#でも同じようにできます。

続きを読む

人狼ったー補助ツールv01

最近人狼ったーのログをニヤニヤしながら見てます。参加はしてません。

で、参加してないっつーのに、なんか衝動的に補助ツールとか作ってる自分がいた。
自分でもどういうつもりで作ったのか分かんない。
でもせっかく作ったから公開してみる。

jinro1
人狼ったー補助ツールv01
誰得。
いっそ人狼ったー参加してみるか・・・
キャラ画像ファイルは同梱してない。

観戦しながら使ってみたけど、メモ帳のほうがマシだわこれ。公開中止

C#は発作的になにか作ろうと思ったときに使いやすいね。