none
2つのラベルを透過にして重る→解決しました(^人^)感謝♪ RRS feed

  • 質問

  • 学校でVB6をちょっとかじっただけの超初心者です。 初歩的な用語でお返事頂けるとありがたいです。 おねがいします。

     

    ■2つのラベルを透過にして重ねたいのですが、ラベルが重なり合うと、下にあるラベルは欠けてしまいます。

    VB6では、透過の設定にすれば重ねられたのですが、Visual Basic 2005 Express Editionでは、BackColorをtransparentにしても、フォームが透けてしまってダメです。つまり、下のラベルまで欠けてしまいます。

    フォームのスペースの都合上、どうしてもラベルを重ねないとなりません。

    何か、解決法があるのでしょうか?  どうか教えてください。お願いします。

    2006年5月1日 10:53

回答

  • TransParentは透明にするというよりも,背景に親コントロールを描画するという感じなので,上になるコントロールのParentを下になるコントロールにすれば下のコントロールが透けて見えるようになります。普通にコントロールを配置すると親コントロールがフォームになるのでフォームまで透けて見えるような感じになってしまいます。
    2006年5月1日 13:09
  • Label1のLocationがそのままなので,見えないところに移動してしまうためではないでしょうか。

    ためしにLabel1.Location=New Point(0,0)を挿入してみてください。Label1とLabel2が重なって表示されませんか?

    2006年5月1日 20:36
  • k_kazu です。
    解決されたようですが、Label を 非表示にして Form の Paint イベントの中で Labelの 文字を描画すると言う方法もあります。
    デザイン画面でラベルの位置を調整できるので便利だと思います。

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Label1.Visible = False 
            Label2.Visible = False
        End Sub

        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            DrawLabel(Label1, e)
            DrawLabel(Label2, e)
        End Sub

        Private Sub DrawLabel(ByVal label As Label, ByVal e As PaintEventArgs)
            Dim labelBursh As New SolidBrush(label.ForeColor)
            e.Graphics.DrawString(label.Text, label.Font, labelBursh, label.Left, label.Top)
            labelBursh.Dispose()
        End Sub

    2006年5月2日 4:40

すべての返信

  • TransParentは透明にするというよりも,背景に親コントロールを描画するという感じなので,上になるコントロールのParentを下になるコントロールにすれば下のコントロールが透けて見えるようになります。普通にコントロールを配置すると親コントロールがフォームになるのでフォームまで透けて見えるような感じになってしまいます。
    2006年5月1日 13:09
  • 返信ありがとうございます。

    >上になるコントロールのParentを下になるコントロールにすれば

    という事は、 Label1.Parent = Label2  という事でしょうか?

    これを書くと、なぜだか? 上のLabel1が消えてしまって見えなくなっちゃいます。???

    う~ん。さっぱり???です。orz

    2006年5月1日 14:41
  • Label1のLocationがそのままなので,見えないところに移動してしまうためではないでしょうか。

    ためしにLabel1.Location=New Point(0,0)を挿入してみてください。Label1とLabel2が重なって表示されませんか?

    2006年5月1日 20:36
  • YAS.sさんのおっしゃる通りでした。ありがとうございます。 解決しました^^

    初心者は無視されるかと心配でしたが助かりました。

    YAS.sさんに(^人^)感謝♪ ありがとうございました。

    2006年5月2日 2:00
  • k_kazu です。
    解決されたようですが、Label を 非表示にして Form の Paint イベントの中で Labelの 文字を描画すると言う方法もあります。
    デザイン画面でラベルの位置を調整できるので便利だと思います。

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Label1.Visible = False 
            Label2.Visible = False
        End Sub

        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            DrawLabel(Label1, e)
            DrawLabel(Label2, e)
        End Sub

        Private Sub DrawLabel(ByVal label As Label, ByVal e As PaintEventArgs)
            Dim labelBursh As New SolidBrush(label.ForeColor)
            e.Graphics.DrawString(label.Text, label.Font, labelBursh, label.Left, label.Top)
            labelBursh.Dispose()
        End Sub

    2006年5月2日 4:40
  • (/_<。)ビェェン せっかくなんですが・・・ ダメです。うまくいきません。
    k_kazuさんのコードをコピペして書いてみましたが、ラベルは2つとも表示されません。

    何処が悪いのか???

    せっかく教えていただいたのですが、スキルの無い自分には無理っぽいです。

    k_kazuさん。ありがとうございました。出来なくてごめんなさい。

    2006年5月2日 5:35