5

パネルに動的に追加したいいくつかのラベルとたくさんのTextBoxがあります。テキストボックスは正常に追加され、完全に表示されますが、ラベルは表示されません。ラベルを追加するために使用しているコードは次のとおりです。

言語は、.NET 3.5 WinFormsアプリケーション用に記述されたC#です。

Label lblMotive = new Label();
lblMotive.Text = language.motive;
lblMotive.Location = new Point(0, 0);

Label lblDiagnosis = new Label();
lblDiagnosis.Text = language.diagnosis;
lblDiagnosis.Location = new Point(20, 0);

panelServiceMotive.Controls.Add(lblMotive);
panelServiceMotive.Controls.Add(lblDiagnosis);

panelServiceMotiveは、前述のTextBoxだけでなく、ラベルも表示する必要があるPanelコントロールです。languageは、自己記述型のLanguageクラスのオブジェクトであり、正常に機能し、ここでは関係ありません。

それが助けを得るのに十分な情報であることを願っています。

4

4 に答える 4

1

主な問題は、パネルに追加するコントロールの場所にあるようです。Locationプロパティは、親コントロール(子コントロールを追加するコントロール)の左上隅を基準にしたコントロールの左上端の座標を保持します。コードを見ると、コントロールを重ねて追加しているように見えます。常にを設定することに注意してくださいlblDiagnosis.Location = new Point(0, 0);。コードからコントロールを追加する場合、最初に追加するコントロールは、同じ場所に追加する他のすべてのコントロールをカバーします(デザイナーを使用する場合とは異なります)。

次のような方法で、ラベルに問題がないかどうかを確認できます。

Label lblMotive = new Label();
lblMotive.Text = language.motive;
lblMotive.Location = new Point(0, 40);

Label lblDiagnosis = new Label();
lblDiagnosis.Text = language.diagnosis;
lblDiagnosis.Location = new Point(0, lblMotive.Location.Y + lblMotive.Size.Height + 10);

panelServiceMotive.Controls.Add(lblMotive);
panelServiceMotive.Controls.Add(lblDiagnosis);
于 2012-12-04T09:42:15.987 に答える
1

私はあなたのコードを空のフォームアプリケーションに投げただけで、それは完全にうまく機能します:

private void button1_Click(object sender, EventArgs e)
{
  Panel panelServiceMotive = new Panel();

  Label lblMotive = new Label();
  lblMotive.Text = "motive";
  lblMotive.Location = new Point(0, 0);

  Label lblDiagnosis = new Label();
  lblDiagnosis.Text = "language";
  lblDiagnosis.Location = new Point(100, 0);

  panelServiceMotive.Controls.Add(lblMotive);
  panelServiceMotive.Controls.Add(lblDiagnosis);

  this.Controls.Add(panelServiceMotive);
}

投稿されたコードからはわからない、コードに何か問題があるはずです。

于 2012-12-04T10:00:55.743 に答える
0

'language.Motive''language.diagnosis'でテキストを何に設定していますか?これはリソースファイルまたは文字列constなどからのものですか?

これらをハードコードされた値に設定するか、最初にnullがないことを確認することをお勧めします。

また、テキストボックスが互いに重なっている可能性があるため、テキストボックスの場所を変更してみてください。

于 2012-12-04T09:42:10.960 に答える
0

実行時にラベルを追加する必要がありますか? より簡単な方法は、フォーム デザイナーでラベルを追加し、実行時にテキストを更新することです。設計時に必要なラベルの数がわからない場合は、ListBox や DataGridView などの別のコントロールが適している場合があります。または、 FlowLayoutPanelをラベルの代替コンテナーとして見てください。通常のパネルとは異なり、コントロールのレイアウトを自動的に管理します。

于 2012-12-04T09:52:29.900 に答える