2010年8月31日火曜日

[.NET]ドッキングウィンドウ

テスト用のドライバを作成していたのですが、プロパティーグリッドを表示しっぱなしにしておくと、画面が狭くなってしまうので、ドッキングウィンドウにできないかと思って調査してみました。

調査すると1つめにヒットするのは「.NETでDocking Windowを使う」ですが、そこに乗っていない「DigitalRune Docking Windows for .NET」というライブラリを使ってみました。

使い方は簡単でした(コード割愛)ドッキングされる側のウィンドウはFORMなんですが、基本クラスを手動で変更する必要がありました。
その他は、サンプルがついているので、必要な部分をカットアンドペーストでいけると思います。

このライブラリは商用で使うには有償になりますが、フリーウェアではフリー?になるようです。
ライセンス関係の規約がPDFで提供されています。私の低レベルな英語力ではフリーになると読み取れました。。。ご利用の際はご確認ください。

その他、エディタのライブラリなどあるようです。今度調べてみよう。

2010年8月23日月曜日

[.NET]QRコード関係のライブラリ

QRコード関係のライブラリを探していたのですが、フリーで使えてかつ、エンコードとデコードの両方をサポートしているものがありました。

QRコードをアプリケーションで作成するには?[C#、VB]

備忘録用にメモ。

2010年8月19日木曜日

[.NET]メモリマップファイル

C#4.0から使えるようになったメモリマップファイルですが、興味本位でちょっと触ってみました。
コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    //using System.IO.MemoryMappedFiles;

    MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("TestMMF"1024);
    using (MemoryMappedViewAccessor mmfa = mmf.CreateViewAccessor())
    {
        var data = "1192つくろう鎌倉幕府! " + DateTime.Now.ToString();
        var byteData = Encoding.UTF8.GetBytes(data);
        mmfa.WriteArray(0, byteData, 0, byteData.Length);
        mmfa.Flush();
    }
}

private void button2_Click(object sender, EventArgs e)
{
    MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("TestMMF"1024);
    using (MemoryMappedViewAccessor mmfa = mmf.CreateViewAccessor())
    {
        var buf = new byte[1024];
        mmfa.ReadArray(0, buf, 0, buf.Length);

        int len = 0;
        for (len = 0; len < buf.Length; len++)
        {
            if (buf[len] == 0x00)
            {
                break;
            }
        }

        var str = Encoding.UTF8.GetString(buf, 0, len);

        MessageBox.Show("結果=[" + str + "]");
    }
}


結果、プロセス間で情報を共有できました。
しかし、System.IOとの連携というか、私が見つけられなかっただけなのかもしれませんが、Stream系のクラスとうまく連携できないようです。
そのあたり今度調査してみよう。

2010年8月15日日曜日

[他]Do-It-Yourself シリーズ

先日、某BBSを見ていると、Do-It-Yourself シリーズなるページが紹介されていました。
ASP.NET/xamlの2種類があるようです。

順を追って学習できそうなので、よさそうな感じです。

2010年8月12日木曜日

[.NET]大文字小文字を区別しないで一括置換する

テストのドライバで、結果で指定されているURLプロトコルをHTTPSからHTTPに一括置換していました。
まぁローカルのIISでHTTPSを使えるようにするのが面倒だったのが理由なんですが。

で、とりあえず、string.Replaceで簡単に実装していました、時々httpsとなっているものがあり、置換されず通過してくるケースがありました。
で、置換する必要のある文字のパターンも増える可能性があり、大文字・小文字の区別なく一括置換できないものかと調べてみると、正規表現でいけることがわかりました。コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    //using System.Text.RegularExpressions;
    var str = "abc/ABC/aBcC/aAaB/aABCc";
    System.Diagnostics.Debug.Write(Regex.Replace(str, "abc""123", RegexOptions.IgnoreCase));

    // 出力は↓こんな感じ
    // 123/123/123C/aAaB/a123c
}

いやー意外と簡単。

2010年8月10日火曜日

[他]VS2010Expressでは、.NET Frameworkへのステップインが可能?

先日何気なく、C#2010の設定画面を見ていると、デバッグの設定で「シンボル」というのがあることに気づきました。これって、2008のときにexpressより上位のエディションに搭載された.NET Frameworkにステップインする機能では?

ということで、早速設定してみました。でデバッグしてみたんですが、ステップインしませんでした(textBox1.Refresh())。キャッシュのフォルダも空。何か条件があるのだろうか?

2010年8月2日月曜日

[SQL]大文字・小文字が異なる場合のみを抽出する(SQLServer)

SQLServerでは大文字と小文字を区別しません。Oracleはどうなんだろう?
で、先日、大文字で登録されたデータと小文字で登録されたデータの混在があり、困っている。と相談されました。
SQL上では'A'='a'がなりたちますが、プログラム側では'A'≠'a'なので、その辺で困っている模様でした。

とりあえず、
update T_TEST2 SET text1=upper(text1)


でできるんじゃない?と教えてあげたのですが、対象のレコードと個数が知りたい。とのことでした。
ということで、これで、いかが?と提示したところ、喜んでかえって行きました。

--だめな例
--select * from T_TEST2 where text1<>upper(text1)
--OKな例
select * from T_TEST2 where convert(varbinary,text1)<>convert(varbinary,upper(text1))


convertのvarbinaryは、指定の値を16進数で表現します。ソレをUPPERと組み合わせて差が出たものが対象。という事になります。
他のDBでも同じようなストアド・関数があれば実現できると思います。

2010年8月1日日曜日

[Excel]セル内の箇条書きの個数を判別する

Excelで表を作成したときに、1のセル内に、とある条件を箇条書きにしたものと、箇条書きの個数を1行に表現したいということがありました。
もちろん手入力すればいいのですが、後で修正するのが面倒だし、間違える恐れがあるので、コレの自動化を考えてみました。
もちろんマクロを使えば計算できることはわかっていたのですが、マクロを使わずにできないか。と考えて実施してみました。答えは単純で、特定の文字を除いたレングスを取ればよい。という事になります。

たとえば、A1セルに「・」で表現した箇条書きがあり、A2セルに個数を表現する場合、以下のとおりです。

=LEN(A1)-(LEN(SUBSTITUTE(A1,"・","")))