Monobjc :: 添加 NSStatusItem

发布于 2024-08-20 08:28:17 字数 1381 浏览 6 评论 0原文

我正在尝试从 Mono 的 Monobjc 桥中添加 NSStatusItem。 该函数被调用,并且不会引发异常,但我的图标没有出现:(。

这是我的代码:

#define DEBUG_APP
using System;
using Monobjc.Cocoa;
using Monobjc;
namespace YvanSoftware.TwitMenu
{
  [ObjectiveCClass]
 public class TwitMenuController : NSObject
    {

  [ObjectiveCField]
  NSStatusItem _statusItem;

  [ObjectiveCMessage("awakeFromNib")]
  public void AwakeFromNib() 
  {
   try {
    if (_statusItem == null) {
     NSMenu menu = new NSMenu("");
     _statusItem = NSStatusBar.SystemStatusBar.StatusItemWithLength(32f);
     _statusItem.Image = NSImage.ImageNamed("twitter.png");
     NSMenuItem menuItem = new NSMenuItem("Send tweet!",new IntPtr(),"");
     menuItem.ActionEvent += new ActionEventHandler(showTweetWindow);
     menu.AddItem(menuItem);
     _statusItem.Menu = menu;
     DebugPrint("Status item added??");
    }
   } catch (Exception ex) {
    DebugPrint(ex.Message); 
   }
  }

  public TwitMenuController(IntPtr i)  : base(i) {}

  public TwitMenuController() {} 

  public void showTweetWindow(Id sender) {
   Console.WriteLine("Not implemented. (0x01)");
  }

  [ObjectiveCMessage("showAbout:")]
  public void showAbout() {
   Console.WriteLine("Not implemented (0x02)"); 
  }

  void DebugPrint(string s) {
#if DEBUG_APP
   Console.WriteLine("*** DEBUG: " + s + " ***");
#endif
  }
    }
}

提前致谢,

Yvan

I'm trying to add an NSStatusItem from within the Monobjc bridge for Mono.
The function gets called, and doesn't throw an exception, but my icon doesn't appear :(.

Here 's my code:

#define DEBUG_APP
using System;
using Monobjc.Cocoa;
using Monobjc;
namespace YvanSoftware.TwitMenu
{
  [ObjectiveCClass]
 public class TwitMenuController : NSObject
    {

  [ObjectiveCField]
  NSStatusItem _statusItem;

  [ObjectiveCMessage("awakeFromNib")]
  public void AwakeFromNib() 
  {
   try {
    if (_statusItem == null) {
     NSMenu menu = new NSMenu("");
     _statusItem = NSStatusBar.SystemStatusBar.StatusItemWithLength(32f);
     _statusItem.Image = NSImage.ImageNamed("twitter.png");
     NSMenuItem menuItem = new NSMenuItem("Send tweet!",new IntPtr(),"");
     menuItem.ActionEvent += new ActionEventHandler(showTweetWindow);
     menu.AddItem(menuItem);
     _statusItem.Menu = menu;
     DebugPrint("Status item added??");
    }
   } catch (Exception ex) {
    DebugPrint(ex.Message); 
   }
  }

  public TwitMenuController(IntPtr i)  : base(i) {}

  public TwitMenuController() {} 

  public void showTweetWindow(Id sender) {
   Console.WriteLine("Not implemented. (0x01)");
  }

  [ObjectiveCMessage("showAbout:")]
  public void showAbout() {
   Console.WriteLine("Not implemented (0x02)"); 
  }

  void DebugPrint(string s) {
#if DEBUG_APP
   Console.WriteLine("*** DEBUG: " + s + " ***");
#endif
  }
    }
}

Thanks in advance,

Yvan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柒夜笙歌凉 2024-08-27 08:28:17

您必须在创建后立即保留 _statusItem 变量:

_statusItem = NSStatusBar.SystemStatusBar.StatusItemWithLength(32f);
_statusItem.Retain();

You have to retain the _statusItem variable right after its creation:

_statusItem = NSStatusBar.SystemStatusBar.StatusItemWithLength(32f);
_statusItem.Retain();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文