「Xamarin.MacでNSTextField内でリターンキーが押された際に処理をする」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Administrator
1行目: 1行目:
NSTextFieldで[[リターンキー]]が押された際に処理をしたいことも多いと思う。
+
NSTextFieldで[[リターンキー]]([[エンターキー]])が押された際に処理をしたいことも多いと思う。[[キーボード]]と[[マウス]]をいったりきたりする[[UI]]とか止めてほしいと思っている人も多いはず。
[[キーボード]]と[[マウス]]をいったりきたりするUIとか止めてほしいと思っている人も多いはず。
+
ちなみに[[Mac]]では宗教上の理由により、[[キーボード]]のメイン部分にある大きいのが[[リターンキー]]で、[[テンキー]]に付いている小さいのが[[エンターキー]]と区別するらしぞ。
  
ちなみに[[Mac]]では宗教上の理由により[[キーボード]]のメイン部分にある大きいのが[[リターンキー]]で、[[テンキー]]に付いている小さいのが[[エンターキー]]と区別するらしぞ。
+
== 実装1 ==
 
 
==実装1==
 
 
リターンキーであれば何も考える必要はない。
 
リターンキーであれば何も考える必要はない。
 
リターンキーが押されたり、フォーカスが外れたりすると以下のイベントが順番に発生する。イベント設定はどちらでもいいと思う。
 
リターンキーが押されたり、フォーカスが外れたりすると以下のイベントが順番に発生する。イベント設定はどちらでもいいと思う。
20行目: 18行目:
 
</source>
 
</source>
  
==実装2==
+
== 実装2 ==
 
実装1はフォーカスが外れた際に問答無用で処理が走ってしまい微妙に不便だったりする。たとえば[[ウェブブラウザ]]の検索窓などでは[[リターンキー]]で検索を実行し、フォーカスがはずれただけの場合は何もしないというものが多い。これに対応するにはDoCommandBySelectorを使うとどういう理由で編集を終わろうとしているかを検出できるようだ<ref>https://github.com/xamarin/mac-samples/blob/master/SearchField/SearchFieldWindowController.cs</ref>。
 
実装1はフォーカスが外れた際に問答無用で処理が走ってしまい微妙に不便だったりする。たとえば[[ウェブブラウザ]]の検索窓などでは[[リターンキー]]で検索を実行し、フォーカスがはずれただけの場合は何もしないというものが多い。これに対応するにはDoCommandBySelectorを使うとどういう理由で編集を終わろうとしているかを検出できるようだ<ref>https://github.com/xamarin/mac-samples/blob/master/SearchField/SearchFieldWindowController.cs</ref>。
  
46行目: 44行目:
 
</source>
 
</source>
  
==関連項目==
+
== 関連項目 ==
 
* [[Xamarin.iOS/UIControl派生物にフォーカスを当てる]]
 
* [[Xamarin.iOS/UIControl派生物にフォーカスを当てる]]
==参考文献==
+
* [[Xamarin.Mac/NSTextFieldクラス]]
 +
* [[Xamarin.Mac/Xamarin.Mac/NSTokenFieldクラス]]
 +
 
 +
== 参考文献 ==
 
{{reflist}}
 
{{reflist}}
 
{{stub}}
 
  
 
[[category:MonoMac]]
 
[[category:MonoMac]]
 
[[category:Xamarin.Mac]]
 
[[category:Xamarin.Mac]]

2017年10月31日 (火) 05:27時点における版

NSTextFieldでリターンキーエンターキー)が押された際に処理をしたいことも多いと思う。キーボードマウスをいったりきたりするUIとか止めてほしいと思っている人も多いはず。 ちなみにMacでは宗教上の理由により、キーボードのメイン部分にある大きいのがリターンキーで、テンキーに付いている小さいのがエンターキーと区別するらしぞ。

実装1

リターンキーであれば何も考える必要はない。 リターンキーが押されたり、フォーカスが外れたりすると以下のイベントが順番に発生する。イベント設定はどちらでもいいと思う。

  • EditingEndedイベント
  • Activatedイベント
        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            textbox.EditingEnded += (sender,e) => Console.WriteLine("EditingEnded");
            textbox.Activated += (sender, e) => Console.WriteLine("Activated");
        }

実装2

実装1はフォーカスが外れた際に問答無用で処理が走ってしまい微妙に不便だったりする。たとえばウェブブラウザの検索窓などではリターンキーで検索を実行し、フォーカスがはずれただけの場合は何もしないというものが多い。これに対応するにはDoCommandBySelectorを使うとどういう理由で編集を終わろうとしているかを検出できるようだ[1]

        public override void AwakeFromNib()
        {
            base.AwakeFromNib();

            textbox.EditingEnded += (sender,e) => Console.WriteLine("EditingEnded");
            textbox.Activated += (sender, e) => Console.WriteLine("Activated");

            textbox.DoCommandBySelector = (NSControl control, NSTextView textView, Selector commandSelector) => {
                if (commandSelector.Name == "insertNewline:")
                {
                    // ここにリターンキーが押された時の処理を書く

                    // リターンキーが押された時の終了処理。
                    // これでEditingEndedイベントが飛ぶ。
                    textView.PerformSelector(sel:commandSelector, obj:null, delay:-1);
                    return true;
                }
                return false;
            };
        }

関連項目

参考文献