2

この質問この受け入れられた回答を読んだ後、指定されたObjective-CソリューションをC#のMonoMacで実装しようとしました:

- (BOOL)control:(NSControl*)control
    textView:(NSTextView*)textView
    doCommandBySelector:(SEL)commandSelector
{
    BOOL result = NO;

    if (commandSelector == @selector(insertNewline:))
    {
        // new line action:
        // always insert a line-break character and don’t cause the receiver
        // to end editing
        [textView insertNewlineIgnoringFieldEditor:self]; 
        result = YES;
    }

    return result;
}

テキスト ボックスにデリゲートを割り当てて、DoCommandBySelectorメソッドをオーバーライドすることができました。私が管理しなかったのは、行を翻訳することです

if (commandSelector == @selector(insertNewline:))

そしてライン

[textView insertNewlineIgnoringFieldEditor:self]; 

何時間にもわたる試行錯誤を繰り返した後でも、多くの「Google 検索」と一緒に C# に相当するものに変換すると、誰もが話題にしています。

だから私の質問は:

上記の 2 行を実際の MonoMac C# コードに変換するにはどうすればよいですか?

4

1 に答える 1

4

OK、試行錯誤を繰り返した後、次の実用的なソリューションを思いつきました。

ここでデリゲートをテキスト フィールドに割り当てます。

textMessage.Delegate = new MyTextDel();

これが実際のデリゲートの定義です。

private class MyTextDel : NSTextFieldDelegate
{
    public override bool DoCommandBySelector (
        NSControl control, 
        NSTextView textView, 
        Selector commandSelector)
    {
        if (commandSelector.Name == "insertNewline:") {
            textView.InsertText (new NSString (Environment.NewLine));
            return true;
        }

        return false;
    }
}

だから私自身の質問に答えるために、行:

if (commandSelector == @selector(insertNewline:))         // Objective-C.

に変換:

if (commandSelector.Name == "insertNewline:")             // C#.

そして行:

[textView insertNewlineIgnoringFieldEditor:self];         // Objective-C.

(おおまかに)次のように変換されます。

textView.InsertText (new NSString (Environment.NewLine)); // C#.

これがすべての状況下で機能することを願っています。私の最初のテストは有望に見えます。

于 2012-10-22T20:13:11.417 に答える