1

特定のイベントが発生したときにポップアップを表示および非表示にしようとしています。ポップアップは適切に表示および非表示になっていますが、そのラベルはすべて空白です。私は元々、フォームを表示する前にラベルを入力しようとしていましたが、そのロジックをすべてコメントアウトしました。ラベルはすべて空白ですが、スペースは各ラベルに適切に割り当てられています (スクリーンショットを参照)。

私のポップアップコントロール:

public MyPopUp()
{
    InitializeComponent();
}

私の別のクラス:

MyPopUp _MyPopUp;

protected override void OnLoad(IServiceProvider myServiceProvider)
{
    _MyPopUp = new MyPopUp();
}

protected override void WhenSomethingHappens() {
    _MyPopUp.Show();
}

protected override void WhenSomethingElseHappens() {
    _MyPopUp.Hide();
}

これが私の designer.cs ファイルの一部です。ラベルの 1 つからコードをコピーして貼り付けただけですが、フォームの他の 5 つのラベルにはほぼ同じコードがあります。

private System.Windows.Forms.Label label1;

private void InitializeComponent()
{
    this.label1 = new System.Windows.Forms.Label();
    this.SuspendLayout();
    // 
    // label1
    // 
    this.label1.AutoSize = true;
    this.label1.Location = new System.Drawing.Point(58, 9);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(41, 13);
    this.label1.TabIndex = 0;
    this.label1.Text = "Some Label Text"; 
    // 
    // MyPopUp
    // 
    this.Controls.Add(this.label1);
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
    this.Name = "MyPopUp";
    this.Text = "Some Text";
    this.ResumeLayout(false);
    this.PerformLayout();
}

スクリーンショット

4

4 に答える 4

3

Refresh() 関数を呼び出して、すべての子コントロールのクライアント領域を強制的に無効にする、つまり再描画する必要があります。

あなたの場合:

protected override void WhenSomethingHappens() {
    _MyPopUp.Show();
    _MyPopUp.Refresh();
}
于 2014-07-06T11:52:26.100 に答える
1

これは、フォームをモードレスで実行しているためです。

必要に応じて、モーダルに実行して、フォント/背景色が適切であることなどを確認できます。

System.Windows.Forms.Application.Run(YourFormName);

次に DoEvent 行をモードレス呼び出しに追加します。

Form2 F2 = new Form2();
F2.Show();
System.Windows.Forms.Application.DoEvents();

そして、それはそれを行う必要があります!

于 2014-12-16T16:23:49.060 に答える
0

テストを行ったところ、ラベル テキストが消える可能性があることがわかりました。ForeColorが と同じ場合、ラベル テキストは消えBackColorます。ラベル追加コードから、これらの色を指定していないことがわかります。WinForms コントロールは、定義されていない場合、親コントロール (この場合はフォーム自体) から多くのプロパティを継承します。これはおそらく、フォームの と が同じであり、これがラベルに伝播するForeColorことを意味します。この問題を解決するには、フォームまたはラベルBackColorの色を変更してください。ForeColor

于 2013-03-20T13:32:56.497 に答える