次のクラスがあるとします
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()
)