如果类是静态的,如何处理事件?

时间:2015-06-17 06:45:15

标签: c# events inner-classes access-levels

假设您有以下课程

public class Message : Control, IDisposable {

    internal static class _Text : RichTextBox {

        protected override void OnLinkClicked( LinkClickedEventArgs e ) {
            System.Diagnostics.Process.Start(e.LinkText);
        }

        public _Text() {
            BorderStyle = System.Windows.Forms.BorderStyle.None;
            BackColor = Color.Orange;
            ForeColor = Color.White;
            ReadOnly = true;
            this.Font=new Font( "Segoe UI", 10 );
            Text="";
            Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
            ScrollBars = RichTextBoxScrollBars.None;
        }
    }

    public Message() {
        SetStyle( ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer|ControlStyles.ResizeRedraw|ControlStyles.SupportsTransparentBackColor|ControlStyles.UserPaint, true );
        UpdateStyles();
        DoubleBuffered = true;
        _Text.ContentsResized+=_Text_ContentsResized;
        _Text.Location = new Point(15,5);
        _Text.Width = Width - 15;
        this.Controls.Add( _Text );
        _Text.Visible = true;
    }


    void _Text_ContentsResized( object sender, ContentsResizedEventArgs e ) {
        _Text.Height = e.NewRectangle.Height;
        base.Height = _Text.Height + 10;
    }

}

上述代码中报告的问题(作为示例)如下:

_Text.ContentsResized+=_Text_ContentsResized;报告

  

非静态方法

需要对象引用

......(等)

this.Controls.Add( _Text );报告

  

Message._Text是一种类型,但正被用作变量

并且事件处理程序_Text_ContentsResized的内容报告的错误与此处描述的第一个错误报告的相同(如下所示)

  

非静态方法

需要对象引用

......(等)

保持概念性理念,我希望内部控件_Text是父控件Message的静态和更自然的元素,但仍然能够访问它的属性和事件。对于属性,我可能会为get / set创建一个静态包装器,但是我仍然无法处理来自该对象的任何事件。

所以问题是 - 如何在不创建对象的后期副本(_Text t = new _Text())的情况下将事件从静态对象/类提升到非静态调用者

0 个答案:

没有答案