在与this question一起阅读this accepted answer之后,我尝试在C#中使用MonoMac实现给定的Objective-C解决方案:
- (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];
进入C#等价物,即使经过数小时的尝试和错误,以及大量的“谷歌搜索”,每个人都在谈论。
所以我的问题是:
如何将上述两行转换为可用的MonoMac C#代码?
答案 0 :(得分:4)
好的,经过另一堆尝试和错误后,我提出了以下工作解决方案。
这是我将委托分配给文本字段的地方:
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#.
我希望这在所有情况下都有效,我的第一次测试看起来很有希望。