如何使对象成为窗口的委托
本文关键字:窗口 何使 对象 | 更新日期: 2023-09-27 18:10:58
我试图找出MonoMac与Xcode 4和大多数事情似乎工作。然而,我不知道如何让windowwwillclose:工作。
我添加了
[Export ("windowWillClose:")]
void windowWillClose(NSNotification notification)
{
Environment.Exit(0);
}
到MainWindow.cs,并使MainWindow成为该窗口的委托。(我试过让MainWindowController作为委托,但那根本不起作用。)
然而,当我关闭窗口时,委托方法没有被调用。
我忽略了什么?
附图:http://www.netneurotic.net/Mono/MonoMac-windowWillClose.html
这里的技巧是创建一个方法,调用Environment.Exit()来退出应用程序,就像任何其他。net应用程序一样。另一个技巧是注意Environment.Exit()在Cocoa对象处于活动状态时不起作用。但是nsapplication。sharedapplication。terminate (this)可以工作。我不知道怎么返回错误代码
Cocoa和MonoMac使用"委托"来允许一个对象在另一个对象发生某些事情时做出反应。我们将使用这个概念在主窗口关闭时调用Terminate()。
Cocoa对象有"outlets",看起来像是指向其他对象的指针。我不知道这种描述在技术上是否正确。没关系。其中一个出口是"委托",我们将其设置为包含我们希望在窗口关闭时调用的方法的对象。因此,我们必须将主窗口的委托出口设置为我们的对象。
我们将使用MainWindow.cs中定义的MainWindow类作为主窗口的委托。我想这意味着我们使用一个对象作为它自己的委托或类似的东西。它仍然可以工作。
要使MainWindow成为主窗口的委托并响应主窗口的关闭,请遵循以下步骤。
双击主窗口。
在Xcode中找到主窗口。这是一个看起来像窗户的大东西。
图1:标题为"窗口"的大东西是主窗口。
- 右键单击窗口的标题栏,显示窗口的出口。
你将看到一个名为"delegate"的出口。
图2:其中一个"outlet"是"delegate"
- 找到"Object Library"和其中的蓝色框。蓝框是一个对象。
图3:蓝色的盒子是一个物体。
- 将蓝色方框拖到窗口左侧带有图标的灰色方框。
图4:蓝色方框位于窗口图标下方。
- 将蓝色框设置为"MainWindow"对象。点击蓝色方框,将其类更改为"MainWindow"。
图5:更新蓝色框的类名。
- 按下控制键并从窗口标题栏拖动到蓝色框中。然后在出现的菜单中选择"委托"选项。
图6:ctrl -拖动时出现的菜单
我们的MainWindow对象现在是主窗口的委托。这意味着它可以对发生在窗口上的事情做出反应。
在MainWindow.cs中添加以下代码:
(出口(windowWillClose: "))(NSNotification通知){Console.WriteLine("windowWillClose:");NSApplication.SharedApplication.Terminate(这);
}
[Export ("windowWillClose:")]语句告诉编译器(可能是编译器,但可能是其他一些实用程序在技术上做了被告知),下面的方法声明是Objective-C方法声明的c#等效。方法可以有不同的实际名称,但命名应该足够相似,这样我们就可以很容易地识别它。我通常只是把第一个字母改成它的大写版本,以符合c#风格。
- 编译应用程序,修复所有的拼写错误,然后运行它。试着关上窗户。应用程序将退出。
如果没有,重复这里告诉的所有步骤,直到出现
您提到,您将MainWindowController
作为委托,我建议创建从NSWindowDelegate
继承的单独/内部类,覆盖WillClose (NSNotification notification)
方法并将其设置为窗口委托。任务完成。
class MyDelegate:NSWindowDelegate
{
public override void WillClose (NSNotification notification)
{
}
}
在AwakeFromNib方法中添加:
Window.Delegate = new MyDelegate();