Visual Studio Community 2013始めました。

Visual Studio Community 2013が出ましたね。Expressでは使えなかった拡張が使えるようになりました。これのためにProの購入を考えては踏み止まって、ということを繰り返していたところなのでやっと来たかという感じ。

真っ先に入れたのがVsVim。お仕事ではPHPStorm + ideavimなので、この環境に慣れ切った指で素のVSでC#を書くのはちょっと腰が重かったのです。

Ctrl+n、Ctrl+pを上下に割り当てて、インテリセンスの選択もカーソルを使わないようにしているのですが、Ctrlを押しているとインテリセンスが半透明になってしまうのが邪魔になっていて回避策を模索中。この機能が付いた当時はとても嬉しかったんですけどね。

あとはPython Tools for Visual Studio。まだしっかりとは試せていないのですが、ClipboardExtenderの拡張スクリプト(IronPython)を書くのが捗りそうです。

MSさん超GJです。

MetroスタイルアプリでUser-Agentを指定しつつクッキーも使ってHTTP通信したい

※この記事はWindows8RPについて書いていますがわかりません。当然今後のことも本当のところも分かりません。

User-Agent指定してダウンロードするコード

 

とっても簡単です。でもこれクッキー使えないんですよね。

そこで、クッキー使えそうなコード。

 

確かにここを見るとUser-AgentヘッダーはHeadersプロパティから変えられないからUserAgentプロパティから変更しろって書いてるんだけどなー。

WinRTの時だけ違う方法があるのだろうか。かれこれ数日間悩んでるんで、上手く書けたらアウトプットしますよ。

 

ってことで数日悩んでやっと出来ました。HttpClientHandlerクラスが鍵でしたね。

 

TwitterizerでUserStreamを利用する

TwitterのAPIライブラリ、Twitterizer Ver 2.3.1を使ってUserStreamを利用しようと以下のコードを書いたんです。

何度試しても404が返ってくる。実はこれ、ベータ版のアドレスにアクセスしてるんですよ。これがソースコード

no title

がっつりとハードコーディングされちゃっててどうにもなりません。自家ビルドして使う?嫌ですよ、そんなの。面倒じゃないですか。幸い、このStartUserStreamメソッドは短いです。じゃあStartUserStreamメソッドを呼び出してる部分のコードをURLだけ置き換えた同じ内容のコードに書き換えればいいじゃない!

以下の3行までは問題ないです。

URLを置き換えるだけです。WebRequestBuilderクラスはpublicなので問題なく利用出来ます。引数に渡しているthis.Tokensはコンストラクタに渡したインスタンスそのものなので、こちらのスコープで保持しているものに置き換えればいいです。

問題は最後の行ですね

引数に渡しているStreamCallbackっての、これprivateなメソッドなんですよ。これはリフレクションで取ってくることにしました。

リフレクションで取ってきたメソッドをInvokeするコードをAsyncCallbackデリゲートで包んであげればOKじゃんって寸法です。

で、最終的なコードがこんな感じ

 

これでめでたくUserStreamが使えるようになりました。ちなみにtrunkの最新のソースコードでもURLはベータ版のものがベタ書きのままでした。中の人忙しいのかな…。

C#|WebBrowserで表示中のWebページのファビコンを取得

Visual Basic 中学校 掲示板

http://rucio.groupsite.jp/commu/ThreadDetail.aspx?ThreadId=9423

こんなやりとりがありまして。

最初の返信でWikipediaのリンクだけ示したのは、眠くてまともにコードが書けなかったからです。

その後、管理人のるきおさんがコードを書いていたので、僕も書きたくなったわけです。

眠くなかったのでサクっと出来ました。折角なのでC#に書き直してここに記録。

 

 

C#|PropertyGridコントロールに表示されるプロパティ名を変更するには?

PropertyGridコントロールに表示されるプロパティ名を変更するには?

SPDVer 1.74に取り込み完了。

とメモしておけば万一上記リンクが切れてもSPDVer 1.74のコードからサルベージ可能。あにすのコード保管庫に転載するわけにもいかないしね。

あにすのコード保管庫はあにすが書いたコードの保管庫だけど、あにすが書いてないコードも保管したいな。何か良い方法は無いだろうか。公開ブックマーク的なものがあればいいのかな。

C#|テキストボックス上でのD&Dでフォームを移動する

TextBoxコントロール上でのドラッグ&ドロップでフォームを移動させようとした場合、文字列を選択する操作とバッティングしないようにする必要がある。

以下の実装で良い感じに動いた。


 

素早くドラッグ&ドロップしたときに文字が選択されてしまいフォームの移動がキャンセルされるのを回避する為にdAndDMoveFlag(センスねー名前w)でフラグを立てている。

あとはそんなに難しいことしてないと思う。

※textBox1のTextが空の場合にLinesプロパティの境界外を参照して例外が発生していたので修正した。

※気が変わったので違うロジックでゴッソリと書き換えた。

C#|System.Windows.Forms.ColorDialogのバグ?

ColorDialogクラスのCustomColorsプロパティが期待通りに動作しない。

フォームの背景色をColor.FromArgb(50, 100, 150)に設定している。ちなみにこんな色。

ClpBdImg0[1]

ボタンがクリックされるとColorDialogのCustomColorsプロパティにColor.FromArgb(50, 100, 150)を設定して表示する。

おかしい、追加した色が黒く表示されている。色の作成ボタンを押してRGB値を見てみると

ColorDialogBug2[1]

RとBが反転している。これは困った。

ここに解決策があった。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14475&forum=7

ToArgbではなくColorTranslator.ToWin32()を使えばいいとのこと。これで期待通りに動作した。

めでたしめでたし。

C#|IronPython|C#でIronPython2.0をホスティングする

http://www.voidspace.org.uk/ironpython/ip_in_ip.shtml (英語)

英語は読めないからソースだけ読んで参考にしました。

【参照設定】

IronPython2.0のディレクトリより

IronPython.dll

Microsoft.Scripting.Core.dll

Microsoft.Scripting.dll

【Form1.cs】

using System;

using System.Windows.Forms;

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

public partial class Form1 :Form {

  public Form1() {

    InitializeComponent();

  }

  private void button1_Click(object sender, EventArgs e) {

    ScriptEngine engine = Python.CreateEngine();

    ScriptSource source =

        engine.CreateScriptSourceFromFile(“./test.py”);

    ScriptScope scope = engine.CreateScope();

    //IronPythonにformという変数名でthisを渡す。

    scope.SetVariable(“form”, this);

    //ここで実行

    source.Execute(scope);

    //IronPythonのtestVarという変数のオブジェクトを取得する。

    object value = scope.GetVariable(“testVar”);

    this.button1.Text = (string)value;

  }

}

【test.py】

form.Text = “Hello,World!”

testVar = “test”

こんな感じで、IronPython側にオブジェクトを渡してIronPython側で操作したり、IronPython側のオブジェクトをC#側で取得することが出来ました。

IronPythonとのオブジェクトのやり取りはScriptScopeオブジェクトを通して行うんですね。

これだけでもかなり面白いです。IronPython1.0からはかなり勝手が変わったようです。