2017-08-26 10 views
-1

プロパティを設定befor別のコントロール(.NETリサイズ)からコントロールへの参照を取得:のHScrollBarと自分の制御:私は私の形で2つのコントロールを有する

public class MainTextBox : RichTextBox 

一部OnXChangeメソッドを上書きし、例えばOnFontChanged。このメソッドでは、HScrollBarへの参照が必要です。これは、InitializeComponentでproprtiesが変更されているため、これらのメソッドも呼び出されているということです。

だから、InitializeComponentメソッドの内部で、これが呼び出されたとき:

this.mainTextBox = new MainTextBox(); 
this.mainHScroll = new HScrollBar(); 

this.mainTextBox.Font = new System.Drawing.Font("Lucida Console", 11.25F, System.Drawing.FontStyle.Regular); 
//and so on 

OnFontChangedメソッドが呼び出され、このメソッドの中で私は、HScrollBarコントロールへの参照をしたいです。

これを実現する最も良い方法は何ですか?ネットのWinFormsについて

(注)この、あなたのMainTextBoxクラスで

+1

物事は「公然」で十分ですか? – DonBoitnott

+0

これを行うには、a)コンストラクタでインスタンスを渡すか、またはb)独自の初期化メソッドを記述し、そのようにインスタンスを渡すという2つのアイデアがあります。メインフォームでこの関数を手動で呼び出す必要があります。 – Michael

+0

@DonBoitnottまあ、私は物事を公にすることは適切ではないと思います。しかし、たとえ私がhScrollBarを公開したとしても、他のコントロールからそれを参照する方法はありますか? – MCpiroman

答えて

1

私は別のアイデアを持っているが...タイプHScrollbarのパブリックプロパティを追加するASP.NETません。これにEditorBrowsable属性を追加します。
MainTextBoxクラスのこのプロパティの設定者で、値が変更された場合はOnFontChangedを呼び出します。 OnFontChangedの内部で、公開のHScrollbarプロパティがnullかどうかを確認します。

そのように普通のInitializeComponentが正常に実行されます - HScrollbarプロパティを認識せずに、その時点でnullです。そしてvs-desginerでは、フォームの既存のHScrollbarインスタンスをMainTextBoxに割り当てることができ、変更によってOnFontChangedがトリガーされます。

私はあなたがOnFontChangeで、私はちょうど変更はVS-デザイナーに見えるようになるかどうかをテストするためのTextBoxのBackgroundColorを変更します何をしたいのか知らないので:ちょうどそれらをしていないです

public class MyTextBox: RichTextBox 
{ 
    private HScrollBar m_bar; 
    [EditorBrowsable] 
    [Category("own")] 
    public HScrollBar Bar 
    { 
     get 
     { 
      return m_bar; 
     } 
     set 
     { 
      if (m_bar != value) 
      { 
       m_bar = value; 
       OnFontChanged(EventArgs.Empty); 
      } 
     } 
    } 

    protected override void OnFontChanged(EventArgs e) 
    { 
     base.OnFontChanged(e); 
     if (m_bar == null) return; 
     BackColor = System.Drawing.Color.Red; 
    } 
} 
+0

あなたの答えを見ても、これは多かれ少なかれ私のやり方です。 – MCpiroman

関連する問題