gpt4 book ai didi

c# - 如何使对象成为窗口的委托(delegate)?

转载 作者:行者123 更新时间:2023-11-30 12:51:06 25 4
gpt4 key购买 nike

我正在尝试用 Xcode 4 找出 MonoMac,大多数事情似乎都有效。但是,我不知道如何让 windowWillClose: 工作。

我加了

[Export ("windowWillClose:")]
void windowWillClose(NSNotification notification)
{
Environment.Exit(0);
}

到 MainWindow.cs 并使 MainWindow 成为窗口的委托(delegate)。 (我尝试让 MainWindowController 成为委托(delegate),但这根本行不通。)

但是,当我关闭窗口时,不会调用委托(delegate)方法。

我忽略了什么?

最佳答案

配图:http://www.netneurotic.net/Mono/MonoMac-windowWillClose.html

这里的技巧是创建一个调用 Environment.Exit() 的方法来像任何其他 .NET 应用程序一样退出应用程序。

另一个技巧是注意 Environment.Exit() 在 Cocoa 对象处于事件状态时不起作用。但是 NSApplication.SharedApplication.Terminate(this) 有效。我不知道如何以这种方式返回错误代码。

Cocoa 以及 MonoMac 使用“代理”来允许一个对象在另一个对象发生某些事情时使用react。我们将使用这个概念在主窗口关闭时调用 Terminate()。

Cocoa 对象有“outlets”,它们看起来是指向其他对象的指针。我不知道这在技术上是否是正确的描述。没关系。其中一个导出是“委托(delegate)”,我们将其设置为包含窗口关闭时我们希望调用的方法的对象。因此,我们必须将主窗口的委托(delegate)导出设置为我们的对象。

我们将使用 MainWindow.cs 中定义的 MainWindow 类作为主窗口的委托(delegate)。我想这意味着我们正在使用一个对象作为它自己的委托(delegate)或类似的东西。它仍然有效。

要使 MainWindow 成为主窗口的代理并对主窗口关闭使用react,请按照以下步骤操作。

  1. 双击 MainWindow.xib 打开 Xcode。

  2. 在 Xcode 中,找到主窗口。这是一个看起来像 window 的大东西。

图 1:标题为“Window”的大东西是主窗口。

  1. 右键单击窗口的标题栏以显示窗口的导出。

您会看到一个名为“delegate”的 socket 。

图2:其中一个“Outlets”是“delegate”。

  1. 找到“对象库”和其中的蓝色框。蓝色框是一个对象。

图3:蓝色方框是一个物体。

  1. 将蓝色框拖到窗口左侧带有图标的灰色物体上。

图4:蓝色框属于窗口图标下方。

  1. 将蓝色框设为“MainWindow”对象。单击蓝色框并将其类更改为“MainWindow”。

图 5:更新蓝框的类名。

  1. 按住控制键并从窗口标题栏拖动到蓝色框中。然后在出现的菜单中选择“代表”选项。

图 6:按住 Control 键拖动时出现的菜单。

我们的 MainWindow 对象现在是主窗口的委托(delegate)。这意味着它可以对窗口发生的事情使用react。

  1. 将以下代码添加到 MainWindow.cs:

    [导出("windowWillClose:")]公共(public)无效 WindowWillClose(NSNotification 通知){ Console.WriteLine("windowWillClose:"); NSApplication.SharedApplication.Terminate(this);

[Export ("windowWillClose:")] 语句告诉编译器(大概是编译器,但也许其他一些实用程序在技术上会告诉编译器)以下方法声明是声明的 Objective-C 方法的 C# 等价物。该方法可以有一个不同的实际名称,但应该命名得足够相似,以便我们可以足够容易地识别它。我通常只是将第一个字母更改为大写版本以符合 C# 风格。

  1. 编译应用程序,修正所有拼写错误,然后运行它。尝试关闭窗口。该应用程序将退出。

如果不是,请重复此处所述的所有步骤,直到出现为止。

关于c# - 如何使对象成为窗口的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com