kei0425tan’s blog

技術的なことを主に

.Net DataGridViewのセルのチェックボックスの制御

DataGridView便利でよくつかいますよね?

日本人は表が好きなので、なんでもグリッドにすることが多いかと思います。

そこで、グリッドのセルにチェックボックスも、ウィザードで簡単に追加できるかと思います。
データの設定も、grid.DataSource = で一発で設定できるし便利便利!!

と思っていたのですが、チェックボックスの制御をしようと思うと途端に難しくなります。
普通は、各オブジェクトからイベントが発生するので、そのイベントに応じて処理を書けばよいのですが、DataGridViewのセルのチェックボックスからはイベントが発生しません。
普通は、CheckedChanged、CheckStateChanged、Clickなどのイベントを拾えるのに、、、、、


なので、定石としては、親のDataGridViewのCellMouseClickを拾うのがよいそうです。

ただし、全てのセルに対して、マウスクリックイベントが発生するため、DataGridViewのCellMouseClickを拾ったあとは
eから、RowIndexとColumnIndexを取得し、どのセルがクリックされたかを特定してイベントの処理を行います。

注意点としましては、DataGridViewのCellMouseClickを実行したあと、拾えない内部のチェックボックスのクリックイベントが発生して、データの書き換えを行うようなので、ダイアログボックスを表示したりすると表示がちぐはぐになります。
さらに、キャンセルをしたくても、強制的にチェックボックスのクリックイベントが発生するため、キャンセルできません。

対応するためには、DataGridViewでチェックボックスを定義する際には、ReadOnly = Trueに設定しておきましょう。
それによって、チェックボックスのオンオフのイベントは発生しません。
勝手に変わらないため、CellMouseClickイベントで自力でON/OFFの制御をしましょう。

というわけでサンプルです。

DataGridViewを作成し、列として、3つチェックボックスを追加しています。
ReadOnlyはTrueにしています。

f:id:kei0425tan:20170315155805j:plain

制御用のコードはこちら
If で判定して成立した場合には自力でValueを反転しています。
成立しない場合には、メッセージボックスを出力しています。

試しに、ReadOnlyをFalseにするとおかしな動きをするのがわかると思います。

    Private Sub DataGridView1_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
        Dim columnIndex = e.ColumnIndex
        Dim rowIndex = e.RowIndex
        Dim dgv As DataGridView = sender
        Dim row = dgv.Rows(e.RowIndex)
        If columnIndex = 0 OrElse row.Cells(columnIndex - 1).Value Then
            row.Cells(columnIndex).Value = Not row.Cells(columnIndex).Value
        Else
            MessageBox.Show("左のチェックボックスがONでないと変更できません。")
        End If
    End Sub

Nexus5Xシステムアップデート(2017年3月分)

Nexus5Xのシステムアップデートが降ってきたのでメモ

バージョンアップ自体は5分ほどで終了しました。

バージョンアップ前

Androidバージョン
7.1.1

Androidセキュリティパッチレベル
20017年2月5日

ベースバンドバージョン
M8994F-2.6.36.2.20

カーネルバージョン
3.10.73-gfe160e5
android-build@wpho2.hot.corp.google.com #1
Wed Dec 7 20:26:32 UTC 2016

ビルド番号
N4F26O


バージョンアップ後(太字が変更点)
Androidバージョン
7.1.1

Androidセキュリティパッチレベル
20017年3月5日

ベースバンドバージョン
M8994F-2.6.36.2.20

カーネルバージョン
3.10.73-gd3d680c
android-build@wpho11.hot.corp.google.com #1
Thu Jan 19 07:19:06 UTC 2017

ビルド番号
N4F26T

セキュリティアップデートみたいですね。
Android Security Bulletin—March 2017 | Android Open Source Project

スシローでラーメン

糖質制限中にどうしてもラーメンが恋しくなって食べたいときどうしますか?

実はスシローでラーメンが売ってるんですね。

濃厚えび味噌ラーメン 税抜300円

小さめに作られていて、1食のカロリーは288kcal
通常のラーメンの約半分ぐらいです。
糖質は調べきれなかったのですが、おそらく量が半分なので糖質も30gぐらいでしょう。

普通のラーメン屋さんに行くとなかなか少ない量を頼むことはできないので回転ずしでラーメンが食べられるのはありがたいです。

味のほうも、海老がかなり効いていておいしかったです。

他にもいろいろ食べてみました。

塩カルビ 120円

海老チーズ 120円

タコの唐揚げ 300円

すしドック 120円


中に入っているウインナーはシャウエッセンだそうです。

フレッシュ苺のメルバ 200円

メルバっていうのは人の名前みたいですね。
ストロベリーアイスと苺と生クリームとカステラでした。

ミルクレープのメルバっていうのもあったみたいで、そっちのほうがおいしそうでした。

ロカボで回転ずしはありえないかと思いますが、自分で量が調整できるし、最近は握りずし以外のメニューも充実しているので、これはこれでありかなって思います。

でも、ネタだけ食べてシャリを残すのは見苦しい気がしますのでやめたほうがいいですよー。

てけてけで昼のみ

kawasaki-mores.jp

昼飲み用のメニューもありました。

サントリーモルツ 180円

後ろにあるのはお通しのキャベツ300円です。

モツ煮 290円

焼き鳥盛り合わせ 398円

このお店ではにんにく醤油がお勧めだそうです。
左から

  • レバー串
  • 砂肝串
  • 皮串
  • ぼんじり串
  • ど根性串

でした。

Sガスト 辛味噌チキンカツ&若鶏南蛮定食

今日はクイックレストラン Sガストに行ってきました。

期間限定(2017/3/9 5:00~3/22まで)で以下のメニューがありました。

  • 辛味噌チキンカツ&若鶏南蛮定食 500円
  • 辛味噌チキンカツ&ハンバーグ定食 590円
  • 辛味噌チキンカツ&豚肉てり旨炒め定食 690円

この中で辛味噌チキンカツ&若鶏南蛮定食が130円引きとお得だったため、そちらにしました。

自販機にはライスなしがなかったため、いつものように仕方なくライス少な目。
それで食券を渡す時に、「ライスなしでお願いします、、、、」といったところなんと50円返金されました。

これはうれしいですね。
ローテーションの仲間入りです。

お味のほうですが、キャベツに最初からドレッシングが掛かっているため、いつものようにメインをおかずにキャベツを食べる作戦だと、ちょっと味が濃すぎました。だからと言ってドレッシングもなしにするのもさみしいからなぁ。。。どうしましょ。

それ以外は、鶏肉ダブルでしたが、タルタルソースと辛味噌で味が違ったため、楽しめました。

あと、Sガストでは味噌汁が店内でだしを取っているらしく売りだそうです。
しっかりダシの味がしておいしかったです。

他にも定食メニュー多いのでまた来ようと思います。

paizaをswiftでやったら泣きそうになった話 D062:ひな祭り

といわけで、swiftをやってみたのですが、やばいですね。

とりあえず練習なので、paizaのD062:ひな祭りをやってみました。

paiza.jp

環境構築は面倒なので、いつものようにこちらを使います。
Web-based online coding environment | paiza.IO

どうせググれば何とかなるだろうと思いつつ、何もわからないまま挑戦。
これは、まず標準入力をsplitして、、、、、
ってここから躓きました。

paizaのswiftはバージョン3なのですが、ウェブの情報では、2と3が混在しており、全然違う方法が見つかります。

結論としては、以下で、スペースで区切って、ついでに数値化します。

import Foundation

let input_line: String = readLine()!
var arr = input_line.components(separatedBy: " ").map{Int($0)!}

import Foundationをしないと、componentsが使えないそうです。

そのあと、文字列をsubstringすれば完成だなと思ったのですが、こちらも大変でした。

引数がindexなのですが、なぜか数字で指定できません。
swiftにはindex型とういうのがあるらしく、それで指定する必要がありました。

なので、普通に数字で指定できるjavascript互換のsubstring,substrを作成してみました。

javascriptでは、こういう拡張を勝手にするのは悪手になっていますが、swiftではどうなんでしょう??
多分、使わないほうがよいかと思います。

てんぐ チキンカツ特製デミグラスソースセット

今日はまたまた会社の近所の天狗でランチ

メニューはこちら

メニューは以下になります。全て税込500円

  • 炭火焼鶏もも
  • 塩だれ焼き鶏重
  • チキンカツカレーライス
  • 鶏の唐揚げセット
  • チキンカツ特性デミグラスソースセット

さらにご飯大盛り、ご飯、味噌汁お代わり無料です。

その中からロカボになりそうな「チキンカツ特性デミグラスソースセット」を注文しました。
いつもの通りご飯は抜きです。
今回は付け合せにキャベツがあったので、前回同様キャベツましにしてみました。

以下が入っていました。

  • チキンカツ4個
  • 付け合せキャベツ
  • 漬物(たぶん野沢菜
  • 味噌汁(アオサ)

www.fatsecret.jp

一口かつの炭水化物は1個5.65gだそうです。
食物繊維が0.4gだそうなので、糖質は5.25gということになりますね。

なので、糖質は4つで21gです。
さらに今回デミグラスソースを使ってます。

www.fatsecret.jp

量はよくわかりませんが、20gにしておきましょう。
食物繊維がないので、全て糖質と考えると、1.84gになります。
あんまり気にしなくてもよさそうですね。

なので、1食25gちょっとですね。
唐揚げのほうが少し糖質少な目で済むようです。

今度から唐揚げにしようかな