Xamarin.Macで、NSScrollViewのスクロールのイベントを取得するには

NSScrollViewにはスクロールのイベントはありません。

NSScrollViewのスクロールのイベントを取得するには、NSScrollViewのContentViewの”NSViewBoundsDidChangeNotification”の通知を受け取ります。

NSNotificationCenter.DefaultCenter.AddObserver(
    new NSString("NSViewBoundsDidChangeNotification"),
    (NSNotification notification) =>
    {
        var contentView = notification.Object as NSClipView;
        var location = contentView.Bounds.Location;
        Label.StringValue = new NSString($"location X:{location.X} Y:{location.Y}");
    },
    ScrollView.ContentView);

サンプルプログラム

Githubからサンプルプログラムをダウンロードできます。

Xamarin.Macでマウスカーソルの座標と押されているボタンを取得するには

マウスの座標を取得するには

マウスの座標はNSEventクラスのCurrentMouseLocationプロパティで取得します。

座標が画面座標になります。画面の左下の座標が(X:0, Y:0)になります。

var location = NSEvent.CurrentMouseLocation;

押されているマウスのボタンを取得するには

押されているマウスのボタンはNSEventクラスのCurrentPressedMouseButtonsプロパティで取得します。

var buttons = NSEvent.CurrentPressedMouseButtons;

サンプルプログラム

サンプルプログラムはGithubからダウンロードできます。

Xamarin.Macで、マウスの座標と押されているマウスのボタンを取得するサンプルアプリケーションです。

更新ボタン(またはcontrol+Aキー)を押すと、その時のマウスの座標と押されているマウスのボタンを表示します。

RubyのModule#includeメソッドのインクルードの順序について

Module#includeメソッドは、引数に複数のモジュールを指定できます。

複数のモジュールを指定したとき、インクルードの順序はrubyリファレンスマニュアルによると、次のように書かれています。

引数に複数のモジュールを指定した場合、 最後の引数から順にインクルードします。

instance method Module#include (Ruby 2.5.0)

実際に、複数のモジュールを引数に指定してみます。

module M1; end
module M2; end

class C
  include M1,M2
end

p C.ancestors
// => [C, M1, M2, Object, Kernel, BasicObject]

includeメソッドを複数回呼び出す場合は、呼び出した順にインクルードされます。

module M1; end
module M2; end

class C
  include M1
  include M2
end

p C.ancestors
// => [C, M2, M1, Object, Kernel, BasicObject]

Visual Studio 2017で使用している拡張機能

備忘録です。
Visual Studio 2017で使用している拡張機能です。

XAML Styler

XAMLのソースコードを整形する。
一貫したコーディングスタイルと読みやすさを維持できる。

Word Highlight With Margin

単語が選択されると、他の場所の同じ単語を強調表示する。

Solution Error Visualizer

エラーや警告のあるファイルをソリューションエクスプローラーに強調表示する。
強調表示されたファイルの上にマウスが移動すると、エラーや警告のメッセージをポップアップ表示する。

Fix Mixed Tabs

スペースとタブが混在するファイルを開いたとき、スペースかタブのどちらかに変換する。