代码之家  ›  专栏  ›  技术社区  ›  unrelativity

在运行时获取组件的值?

  •  1
  • unrelativity  · 技术社区  · 14 年前

    我正在尝试创建一个可以继承的NotifyIcon,以便添加自己的属性等。通过查看其他人编写的组件类,我取得了一些进展,如下所示,并且可以将组件拖到表单中。老实说,我对自己在做什么几乎一无所知,而且在互联网上似乎没有任何有用的教程。

    PrepareIcon 方法时,弹出的消息框显示为空,即使我已尝试更改设计器默认值 notifyIconInheritable1 . 我在designer中看到NotifyIcon出现,所以我对它的工作原理感到非常困惑。

    问题是;这有什么问题,或者我做错了什么,我是不是在浪费时间,根本不应该尝试这样做?

    namespace AwesomeNotifyIcon
    {
        [DefaultProperty("Text"), DefaultEvent("Click"), Description("Displays an icon in the notification area, on the right side of the Windows taskbar, during run time")]
        public partial class NotifyIconInheritable : Component
        {
            private NotifyIcon notifyIcon;
    
            public NotifyIconInheritable()
            {
                //PrepareIcon();
                InitializeComponent();
            }
    
            public NotifyIconInheritable(IContainer container)
            {
                if (container != null)
                {
                    container.Add(this);
                }
                PrepareIcon();
                InitializeComponent();
            }
    
            [Category("Appearance"), Description("The icon to associate with the balloon ToolTip."), DefaultValue(ToolTipIcon.None)]
            public ToolTipIcon BalloonTipIcon { get; set; }
    
            [Category("Appearance"), Description("The text to associate with the balloon ToolTip.")]
            public string BalloonTipText { get; set; }
    
            [Category("Appearance"), Description("The title of the balloon ToolTip.")]
            public string BalloonTipTitle { get; set; }
    
            [Category("Appearance"), Description("The icon to display in the system tray.")]
            public Icon Icon { get; set; }
    
            [Category("Appearance"), Description("The text that will be displayed when the mouse hovers over the icon.")]
            public string Text { get; set; }
    
            [Category("Behaviour"), Description("The shortcut menu to show when the user right-clicks the icon.")]
            public ContextMenuStrip ContextMenuStrip { get; set; }
    
            [Category("Behaviour"), Description("Determines whether the control is visible or hidden."), DefaultValue(false)]
            public bool Visible { get; set; }
    
            [Category("Data"), Description("User-defined data associated with the object.")]
            public object Tag { get; set; }
    
            [Category("Action"), Description("Occurs when the component is clicked.")]
            public event EventHandler Click;
    
            private void PrepareIcon()
            {
                notifyIcon = new NotifyIcon();
                notifyIcon.Dispose();
                MessageBox.Show(this.Text);
    
                if (Click != null)
                    notifyIcon.Click += Click;
            }
        }
    }
    

    以下是设计器中显示的属性:

    http://cl.ly/1vIF/content http://cl.ly/1vIF/content

    1 回复  |  直到 14 年前
        1
  •  3
  •   Dan Puzey    14 年前

    NotifyIconInheritable icon = new NotifyIconInheritable();
    icon.Text = "Some text";
    parent.Controls.Add(icon);
    

    之后 构造函数已运行。所以,在你打电话的时候 PrepareIcon ,的 Text 真的是空的。

    其他建议:正如亨克所说,你真的不应该打电话 Dispose() 在代码的这一点上。您也不应该显示来自构造函数的消息框,尽管希望它只是用于测试目的。最后,因为你在打电话 准备 .Click null .