1

コントロールで迷っていRichTextBoxます。

私は幅100pxのRichTextBoxコントロールを持っています。WinForm動的に作成してからインスタンスを参照したい。

Formだから、私がRichTextBox呼ばれたと仮定すると、私rtbResultは次のことができると思ったでしょう:

    RichTextBox rtb = new RichTextBox();
    rtb.Text =  "Hello all";
    rtb.Width = 50;
    rtbResult = rtb;

コードを実行すると、元のサイズが 100px (幅 50 ではない) の結果がRichTextBoxページに表示されません。

ライブではテキストの強調表示を使用しているため、 である必要があることに注意してくださいRichTextBox。上記の例は、質問をより簡潔にするために削除されています。

私が間違っていることはありますか?

4

2 に答える 2

4

あなたがしたことはこれとそれほど違いはありません:

RichTextBox r1 = new RichTextBox();
r1.Text =  "I am RTB #1";
Controls.Add(r1);

RichTextBox r2 = new RichTextBox();
r2.Text =  "I am RTB #2";

これで、ページにRichTextBoxという名前が付けられましr1た。これを行う場合:

r1 = r2;

フォーム内のコントロールを新しいものに置き換えるのではなくRichTextBox、同じ参照を変数に割り当てるだけですr1。フォームにはまだ古いコントロールがありますが、両方の変数 (r1r2) が同じオブジェクトを指しています。

元の値を新しい値で単純に更新できない場合はRichTextBox、古い値を削除して新しい値を同じ位置に追加することができます。

r2.Bounds = r1.Bounds;
Controls.Remove(r1);
Controls.Add(r2);

これは非常に単純です。多くのプロパティを古いものから新しいものにコピーする必要があります (DockなどTabIndex)。さらに、順序も重要であるためControls.SetChildIndex()、適切な配置を呼び出す必要がある場合があります (これは、実際に何を持っているかによって異なります)。やるべきこととあなたのコードはどうですか)。

于 2013-03-04T12:16:31.607 に答える
2

rtbResult、コントロールへの参照を含む単なる変数であり、コントロール自体ではありません。その変数に新しいコントロールを配置すると、変数を変更するだけで、元のコントロールはフォーム内に残り、新しいコントロールはどのフォームにも属さないため、どこにも表示されません。

新しいコントロールをフォームに追加して、表示できるようにする必要があります。次に例を示します。

somePanel.Controls.Add(rtb);
于 2013-03-04T12:16:38.550 に答える