泥庭

2016年11月2日

[C#読書会]日付時刻のソート

Filed under: .NET, C#, 読書会, 未分類 — yone64 @ 11:26 PM
ちょっと間が空きました。今回は4.4です。三日坊主すら難しいですね。
日付のソートのお話

(more…)

広告

2015年3月26日

【WPF】TreeViewにStyleを適用しよう

Filed under: 未分類 — yone64 @ 7:29 PM
タイトルは嘘ではないですが、TreeViewにStyleをした場合に遭遇したバグ(?)と戦った記録です。
TreeView向けのStyleを作りたい方は、残念ながらご期待に添えないです…

なお、今回戦ったバグは、↓とほぼほぼ同じです。
EvaluateOldNewStates() throws exception when updating TreeViewItem.IsSelected
https://social.msdn.microsoft.com/Forums/vstudio/en-US/36f5037a-18ce-43e7-8784-644d60ee9812/evaluateoldnewstates-throws-exception-when-updating-treeviewitemisselected?forum=wpf

なお、今回の再現確認には、↓を利用しています。(MSDN Forumでも出てきていたのでw)
WPF Themes https://www.nuget.org/packages/Wpf.Themes/1.1.0
で、出来上がりのコードは↓にあるので、適宜参照してください。
https://github.com/yone64/TreeViewSample/tree/master/TreeViewSample

(more…)

2014年12月9日

【WPF】DisplayにWindowを整列させたい

Filed under: 未分類 — yone64 @ 11:46 PM

タイトルのような要件があるばあい、対象DisplayのWidthとHeightが必要になります。
# 最近だと、モニターが複数あることも珍しくないので、そういう場合の想定も必要になりますね。

で、WPFに閉じた世界だと、WidthとHeightが取れないようで(探し方が甘いだけかも)、WinFormsのScreenクラスを使う羽目になります。

なんだ、Formsを参照に加えるだけやん。と、思ったアナタ。甘すぎです。

取得できる座標系がForms座標系で、使いたい座標系がWPF座標系ということは、常にDPIを考えながら変換しないといけないということなのですよ。残念!

というわけで、明日はぐらばく先生の下記記事を読んでお勉強予定です。

Windows 8.1 で加わった Per-Monitor DPI と WPF での対応方法

メンドー

2014年12月1日

Room metro #28 でしゃべってきました。

Filed under: .NET, WPF, 勉強会, 未分類 — タグ: , , , — yone64 @ 11:12 PM

先日行われた、Room metro #28 「XAML Day」で、しゃべってきました。

ネタかぶりしなさそうなWF(Window Workflow Foundation)がらみのはずなのに、まさかのネタかぶりとかありましたが、実際はWPFのコードしか書いてないのでかぶってないはず(

資料は、↓で公開しています。

また、デモに使ったコードは↓です。

https://github.com/yone64/Metro28

2014年4月6日

【WPF】Ribbonを使う(その①)

Filed under: .NET, WPF, 未分類 — タグ: , , — yone64 @ 7:24 PM

.NET Framework 4.5から、Robbonコントロールが標準で追加されています(※1)。とっても今更感満載ですが、このRibbonコントロールを使う機会があったので備忘録をかねてまとめておきます。
(※1)
http://msdn.microsoft.com/ja-jp/library/ms171868(v=vs.110).aspx#client

なお、Ribbonは下記によくまとまっているので、併せてご参照ください。(むしろそっちだけで十分かも)

[WPFリボン プログラミング] 連載一覧 (第1回~第14回)
http://blogs.msdn.com/b/ttanaka/archive/2011/03/09/wpf-1-14.aspx

Ribbon | HIRO’s.NET Blog
http://blog.hiros-dot.net/?page_id=3436

外観

RibbonといえばOffice2007で導入されたあれですが、Officeのバージョンやアプリケーション間で微妙に違っています。ほぼ、Application Buttonと、そのボタンをクリックして表示されるPaneの違いですが、WPFのRibbonはWindows7のPaintのそれに一番近いです。

image
【Windows7版のPaint】

準備

それでは、さっそく使ってみましょう。標準で追加されているとはいえ、そのままでは使えません。最初は参照設定がついていないので、参照追加が必要です。

image

参照を追加すると、Ribbonコントロール関係のコントロールが追加できるようになります。めっちゃ数が多い。

image

続きは次回

 

2014年2月10日

C#erのためのVB.NET覚書(まとめ

Filed under: 未分類 — タグ: — yone64 @ 5:31 PM

まとまるかどうかはさておき、VB.NETでのお仕事がひと段落したので、個人的に気になった点ベスト5をば。

第5位 Char

C#ではCharは数値状態で扱えますが、VB.NETでは一文字として扱います。
なお、Charの配列はStringと暗黙的に変換します。

↓過去エントリー
https://yone64.wordpress.com/2013/02/14/c%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEvb-net-%E8%A6%9A%E6%9B%B8/

第4位 配列

これはVB6時代の負の遺産を引きずってる筆頭だと思うのですが、配列の宣言が異なりますよ。
まぁ、要素数を指定して配列を定義することはあまりないですけどね。

↓過去エントリー
https://yone64.wordpress.com/2013/02/14/cer%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEvb-net%E8%A6%9A%E6%9B%B8/

第3位 自動実装プロパティー

VB.NETでは自動実装プロパティーのバッキングフィールドにアクセスできるんですね。
Propertyでは、「_」から始まるフィールドが、Eventでは「Event」が末尾についたデリゲートが自動生成され、プログラム中からアクセスが可能です。
# あっ、Eventは自動実装プロパティーじゃないや

Public Class Class1

    Public Property Property1 As String

    Public Event MyEvent As EventHandler

    Public Sub Method1()

        Me.Property1 = "aa"
        Me._Property1 = "bb"

        RaiseEvent MyEvent(Me, EventArgs.Empty)
        Dim a = MyEventEvent

    End Sub

End Class

第2位 Nothing

NothingはC#でいうところのdefault(T)に当たります。なので、

Dim i As Integer = Nothing

みたいな宣言も可能です。あと、難しいのは比較。= Nothingだったり、Is Nothingだったりですね。空文字列=NothingがTrueになるのはよくわかりません。

Module Module1
    Sub Main()

        Dim s1 As String = Nothing
        Dim s2 As String = String.Empty
        Dim s3 As String = "abc"

        If s1 Is Nothing Then
            Console.WriteLine("s1 Is Nothing")
        Else
            Console.WriteLine("s1 IsNot Nothing")
        End If

        If s2 Is Nothing Then
            Console.WriteLine("s2 Is Nothing")
        Else
            Console.WriteLine("s2 IsNot Nothing")
        End If
        If s3 Is Nothing Then
            Console.WriteLine("s3 Is Nothing")
        Else
            Console.WriteLine("s3 IsNot Nothing")
        End If

        Console.WriteLine("--")

        If s1 = Nothing Then
            Console.WriteLine("s1 = Nothing")
        Else
            Console.WriteLine("s1 <> Nothing")
        End If
        If s2 = Nothing Then
            Console.WriteLine("s2 = Nothing")
        Else
            Console.WriteLine("s2 <> Nothing")
        End If
        If s3 = Nothing Then
            Console.WriteLine("s3 = Nothing")
        Else
            Console.WriteLine("s3 <> Nothing")
        End If

        Console.WriteLine("--")

        Dim ni1 As Integer? = Nothing
        Dim ni2 As Integer? = 0
        Dim ni3 As Integer? = 123

        If ni1 Is Nothing Then
            Console.WriteLine("ni1 Is Nothing")
        Else
            Console.WriteLine("ni1 IsNot Nothing")
        End If
        If ni2 Is Nothing Then
            Console.WriteLine("ni2 Is Nothing")
        Else
            Console.WriteLine("ni2 IsNot Nothing")
        End If
        If ni3 Is Nothing Then
            Console.WriteLine("ni3 Is Nothing")
        Else
            Console.WriteLine("ni3 IsNot Nothing")
        End If

        Dim i1 As Integer = Nothing
        Dim i2 As Integer = 0
        Dim i3 As Integer = 123

        If i1 = Nothing Then
            Console.WriteLine("i1 = Nothing")
        Else
            Console.WriteLine("i1 <> Nothing")
        End If
        If i2 = Nothing Then
            Console.WriteLine("i2 = Nothing")
        Else
            Console.WriteLine("i2 <> Nothing")
        End If
        If i3 = Nothing Then
            Console.WriteLine("i3 = Nothing")
        Else
            Console.WriteLine("i3 <> Nothing")
        End If

    End Sub
End Module

結果

image

第1位 3値論理

SQLとかでよくあるやつですね。VB.NETではNull許可型同士の比較はBooleanではなく、Boolean?型になります。これ、Nullable型の時だけなんですよね。なぜ?って感じ。

Module Module1
    Sub Main()

        Dim ni1 As Integer? = Nothing
        Dim ni2 As Integer? = 0
        Dim ni3 As Integer? = 1

        Dim flag1 = (ni1 = ni2)

        Console.WriteLine(flag1 Is Nothing)

    End Sub
End Module

image

2013年8月25日

第2回 LINQ勉強会

Filed under: 未分類 — yone64 @ 12:59 AM

例によって、めっちゃ日があいてしまった。

と言うことで、LINQ勉強会で喋ってきました。今回は喋るだけじゃなくて、半分主催みたいな感じ。(本当は主催なんだけど、偉大なる先人方にほぼオンブにダッコだったので。)

と言うわけで資料です。

<SlideShare>

<SkyDrive>

<ハンズオン用ソリューション>
https://github.com/yone64/LinqStudy2

今回のハンズオンは、WPFを使用しました。ViewModelにLINQで変換式を書くと、画面の方も同時に更新されてステキな感じ。

2013年3月12日

Null許可型

Filed under: .NET, 未分類 — タグ: — yone64 @ 10:06 PM

VisualStudio勉強会に参加してきました。
で、Null許可型の話題があって、以前はまった気がする。と思いながら、検証コード。

int? a = 1;
int b = 1;

Console.WriteLine("a is int " + (a is int));
Console.WriteLine("a is int? " + (a is int?));
Console.WriteLine("b is int " + (b is int));
Console.WriteLine("b is int? " + (b is int?));

Console.WriteLine("a.GetType() is " + a.GetType());
Console.WriteLine("b.GetType() is " + b.GetType());

結果は↓、Nullable型かどうかの判定ってできなかったんだよなぁ、確か。

image

2013年2月23日

Hyper-VにCentOSをインストールする

Filed under: 未分類 — yone64 @ 11:45 PM

最近、お仕事が.NET系ではなくなって、とっても残念な感じです。C#書きたいよう。LINQ~。

というわけで、久々(9年ぶり!?)にJava+Linuxを触ることになってます。で、CentOSをセットアップする機会があったので、復習を兼ねてHyper-V(Windows8Pro)にCentOSをインストールしてみます。業務でやったのはVMWareESXi上なのでちょっと違いますが。
目標は、Redmine+Git+Jenkins環境の構築を再現すること。しかし、業務でセットアップした際には丸二日かかったので。そこまでいけるかは謎。

前準備
・CentOSのイメージダウンロード(
こちら)。今回はminimalを指定。
・Hyper-V用統合のダウンロード(
こちら

仮想マシンの作成は基本デフォルトのまま、メモリだけ動的メモリを選択しておきました。
あとは、ほとんどそのままの設定でインストールが可能だと思います。

  • Install or Upgrade an exisitng system を選択
    image
  • media test は、Skipで
    image
  • ここはOKしか選べないので。
    image
  • 一応日本語を選択。
    image
  • 結局英語になったのかな?
    image
  • キーボード種別を選択
    image
  • TimeZoneはTokyoに
    image
  • Passwordを設定
    image
  • インストールするドライブの設定?
    image
  • たぶんDiskの中身がなくなるよって言ってる気がする。全然OKなのでそのまま次へ。
    image
  • 再起動して終了。
    image

次は、Hyper-V統合をば

Hyper-V統合のDiskをマウントして、install.shを実行する。
※VMWareToolの場合は、Perlのインストールが必要だったが、Hyper-Vは何もいらない様子。

# mount /dev/cdrom /media
# cd /media//RHEL63
# ./install.sh
# reboot

インストール直後はネットワークが無効になっているので、ネットワークを有効にします。NICは認識されているとこを確認します。

#ifconfig
#ifconfig -a

image 
image

ネットワークカードの設定を修正します。私の場合は、ファイルがなかったので新規作成になりました。HWADDRは環境に合わせて修正が必要です。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

image

あと、networkの設定を行います。これもファイルがなかったので新規作成。

# vi /etc/sysconfig/network

image

ネットワーク設定をリロードして終了。

# /etc/init.d/network reload

image

とりあえず、これで、ネットにつながるようになったので、yumが使えます。

2013年2月14日

C#erのためのVB.NET覚書

Filed under: .NET, 未分類 — タグ: , — yone64 @ 4:07 PM

配列編です。いろいろ気持ち悪い。

Module Module1

    Sub Main()

    End Sub

    Sub Array1()
        ' 1次元配列の宣言 括弧はどっちでも同じ
        Dim arrA As String() = Nothing
        Dim arrB() As String = Nothing

        ' 配列を決まった長さで初期化する方法 ※すべて要素数6で初期化
        Dim arrC As String() = New String(5) {}
        Dim arrD() As String = New String(5) {}
        ' 変数名に括弧が付く場合は、そのまま初期化が可能
        Dim arrE(5) As String
        ' どちらも型推論できるけど、括弧の有無が気持ち悪い
        Dim arrF = New String(5) {}
        Dim arrG() = New String(5) {}

        ' 配列を要素で初期化する
        Dim arrH As String() = New String() {"1", "2", "3"}
        Dim arrI As String() = {"1", "2", "3"}
        Dim arrJ = {"1", "2", "3"}
        Dim arrK() As String = New String() {"1", "2", "3"}
        Dim arrL() As String = {"1", "2", "3"}
        Dim arrM() = {"1", "2", "3"}

        'いろんな代入
        arrA = New String(1) {}         '要素数2
        arrA = New String(0) {}         '要素数1
        arrA = New String(-1) {}        '要素数0 (キモッ
        arrA = New String() {}          '要素数0
        arrB = New String(1) {"1", "2"}
        arrB = New String() {"1", "2"}
        arrB = {"1", "2"}
    End Sub


    Sub Array2()
        ' 2次元配列の宣言
        Dim arrA As String(,) = Nothing
        Dim arrB(,) As String = Nothing

        ' 初期化
        Dim arrC As String(,) = New String(1, 2) {}
        Dim arrD = New String(1, 2) {}
        Dim arrE(,) As String = New String(1, 2) {}
        Dim arrF(,) = New String(1, 2) {}
        Dim arrG(1, 2) As String


        Dim arrH As String(,) = New String(,) {{"1", "2", "3"}, {"a", "b", "c"}}
        'これは2次元配列扱いだそうです。
        Dim arrI As String(,) = {{"1", "2", "3"}, {"a", "b", "c"}}
        Dim arrJ = {{"1", "2", "3"}, {"a", "b", "c"}}

    End Sub


    Sub ArrayOfArray()
        ' 多段配列の宣言
        Dim arrA As String()() = Nothing
        Dim arrB()() As String = Nothing

        ' 初期化
        Dim arrC As String()() = New String(1)() {}
        Dim arrD = New String(1)() {}
        Dim arrE()() = New String(1)() {}
        Dim arrF(1)() As String

        ' 要素で初期化 
        ' New String()は省略できない 2次元配列との兼ね合い?
        Dim arrH As String()() = New String()() {New String() {"1", "2"}, New String() {"a", "b", "c"}}
        Dim arrI = {New String() {"1", "2"}, New String() {"a", "b", "c"}}


    End Sub
End Module

 

Older Posts »

WordPress.com Blog.