none
透明なボタンの作成方法 RRS feed

  • 質問

  • 透明なボタンを使いたいと考え、enabled=true、visible=false と設定してテストしてみたのですが、全く反応しなくなってしまいました。透明なボタンを作成する方法は何かありませんでしょうか?

    2009年11月1日 8:44

回答

  • HTML のクリッカブルマップのようなものをお考えでしょうか?
    なんにせよ、Visible が false なものはそもそも GUI として存在しないものという扱いです。
    FlatStyle を Flat に設定し、Button.BackColor 及び FlatAppearance の各背景色プロパティを Transparent に、BorderSize を 0 にすればとりあえず見えなくなります。
    親コントロールの MouseUp イベントなどでクリックされた位置が目的の領域内かどうかをチェックするという手もあります。
    • 回答としてマーク yukaaki 2009年11月22日 1:01
    2009年11月1日 8:57
  • 昔からの挙動なので、今後変わるのは望み薄かもしれません。
    “透明”ということならば WPF を使ってみてはいかがでしょうか。

    と、これだけではなんなので試しに作ってみました。
    プロジェクト新規作成で WPF アプリケーションを選択してOKボタン押下。
    window1 が表示されるので、リッチテキストボックスをツールボックスからドラッグ&ドロップ。
    さらにその上にボタンを2つ置き、プロパティの Opacity をそれぞれ 0.5 と 0 に設定。
    F5 で開始。
    半透明なボタンと見えないボタンが表示(?)されました。

    • 回答としてマーク yukaaki 2009年11月22日 1:01
    2009年11月12日 1:30
  • We are routing this bug to the product unit who works on that specific feature area.
    The team will review this issue and make a decision on whether they will fix it or not for the next release.

    "bug" との表現が現れましたので、調査の結果バグだという認識はされたようですね。
    この文章で "bug" という表現になっていますが、開発チームを交えてバグと判断されたわけではありません。(「担当者にアサインしたよ」ぐらいのニュアンスだと推測される)
    この文章の後に、開発チームから「By Design」(設計による)と言われてクローズされることもあります。

    一例:
    https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=483653


    なお、Connect を通じて修正されたとしても、大抵は次のメジャーバージョンか、Service Pack が対象になります。
    現実問題として、進行中の開発案件に対して効果は得られないと思うべきです。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に困った第三者の方が検索しやすくなります。
    • 回答としてマーク yukaaki 2009年11月22日 1:01
    2009年11月12日 14:25
    モデレータ

すべての返信

  • HTML のクリッカブルマップのようなものをお考えでしょうか?
    なんにせよ、Visible が false なものはそもそも GUI として存在しないものという扱いです。
    FlatStyle を Flat に設定し、Button.BackColor 及び FlatAppearance の各背景色プロパティを Transparent に、BorderSize を 0 にすればとりあえず見えなくなります。
    親コントロールの MouseUp イベントなどでクリックされた位置が目的の領域内かどうかをチェックするという手もあります。
    • 回答としてマーク yukaaki 2009年11月22日 1:01
    2009年11月1日 8:57
  • いったんは問題なく動作したと思ったのですが、問題がまだ残っていま
    した。

    教えていただいた設定のボタンをフォームの上に直接のせてテストした
    限り、何の問題もありませんでした。

    ただ、透明ボタンを使いたかった本来の目的は、RichTextBox内に複数
    の文章を表示し、各文章の上にそれぞれ透明ボタンをのせておき、クリ
    ックされたらその文章を読み上げる(音声ファイルを再生)というもの
    でした。

    そしてRichTextBox上に教えていただいた設定のボタンを重ねたところ、
    なんとRichTextBoxを突き抜けてフォームが見えてしまいました。別の
    ボタンの上に重ねた場合もフォームまで見えてしまいますので、そのよ
    うな仕様のようです。
    (PhotoshopやIllustratorのレイヤの感じで考えていましたが、違った
     ようです)

    こうなると、クリックされた位置から判断するしかないのでしょうか。
    透明ボタンだと文章のうえにカーソルをのせるとその形状が「指先」な
    どに変わるので気持ちが良かったのですが。

    2009年11月1日 13:03
  • こうなると、クリックされた位置から判断するしかないのでしょうか。
    透明ボタンだと文章のうえにカーソルをのせるとその形状が「指先」などに変わるので気持ちが良かったのですが。

    RichTextBox のクリック位置で判断した方が、実装上の手間も省ける上、ボタンを重ねるより遥かに素直な方法だと思います。
    また RichTextBox の Cursor プロパティを IBeam から Hand に変えれば、お望みの動作が得られると思います。
    2009年11月3日 2:51
    モデレータ
  • Micrisoft connection から問題提起したところ、最初は「調査する」との返事があり、その後1週間ほどして以下の回答が来ました。

    We are routing this bug to the product unit who works on that specific feature area.
    The team will review this issue and make a decision on whether they will fix it or not for the next release.

    "bug" との表現が現れましたので、調査の結果バグだという認識はされたようですね。
    でも、「次期リリースで修正するかどうかは今後決定する」とのこと、
    修正しないという決定もあるんですね・・・ToT
    2009年11月12日 0:03
  • 昔からの挙動なので、今後変わるのは望み薄かもしれません。
    “透明”ということならば WPF を使ってみてはいかがでしょうか。

    と、これだけではなんなので試しに作ってみました。
    プロジェクト新規作成で WPF アプリケーションを選択してOKボタン押下。
    window1 が表示されるので、リッチテキストボックスをツールボックスからドラッグ&ドロップ。
    さらにその上にボタンを2つ置き、プロパティの Opacity をそれぞれ 0.5 と 0 に設定。
    F5 で開始。
    半透明なボタンと見えないボタンが表示(?)されました。

    • 回答としてマーク yukaaki 2009年11月22日 1:01
    2009年11月12日 1:30
  • We are routing this bug to the product unit who works on that specific feature area.
    The team will review this issue and make a decision on whether they will fix it or not for the next release.

    "bug" との表現が現れましたので、調査の結果バグだという認識はされたようですね。
    この文章で "bug" という表現になっていますが、開発チームを交えてバグと判断されたわけではありません。(「担当者にアサインしたよ」ぐらいのニュアンスだと推測される)
    この文章の後に、開発チームから「By Design」(設計による)と言われてクローズされることもあります。

    一例:
    https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=483653


    なお、Connect を通じて修正されたとしても、大抵は次のメジャーバージョンか、Service Pack が対象になります。
    現実問題として、進行中の開発案件に対して効果は得られないと思うべきです。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に困った第三者の方が検索しやすくなります。
    • 回答としてマーク yukaaki 2009年11月22日 1:01
    2009年11月12日 14:25
    モデレータ
  • >なお、Connect を通じて修正されたとしても、大抵は次のメジャーバージョンか、Service Pack が対象になります。
    >現実問題として、進行中の開発案件に対して効果は得られないと思うべきです。

    です。

    Connect は、Microsoft 製品を改善するためのフィードバックを受け付ける場所であって、Microsoft 製品を使用している人の問題を解決するのを第1の目的とはしていません。

    Connect にフィードバックした結果、Work around が示されることもありますが、あくまでもそれは回答者の善意なので、オマケみたいなもんです。

    解決を必要としているなら、サポート窓口に問い合わせて、サポート契約を結んでください。

    サポート契約には費用が発生しますが、MSDN サブスクリプションに加入していれば、年間1~2件程度(サブスクリプションのレベルによって数が異なります)のサポート契約を無償で行うことができます。

    結果、問題の原因が Microsoft 製品のバグであると判明した場合、無償問い合わせ権が戻ってきます。

    ただし、通常のサポート契約の場合、基本的には「問題を回避するための Work around」が示されるだけの場合が多く、結果として、希望する解決が得られない場合もあります。

    問い合わせ内容が既知の問題である場合など、Microsoft 側で対応する Hotfix を持っている場合には Hotfix が提供されることもありますが、通常のサポート契約は新規の Hotfix をすぐに作成するためのトリガにはなりません。

    非常に緊急度の高いセキュリティ問題などの場合、Hotfix が作成する場合もあると思いますが、かなり例外的な措置と考えるべきでしょう。

    Hotfix の作成は、原則として Microsoft プレミアムサポート契約を結んだ顧客からの要請によるようです。
    2009年11月22日 2:11
  • そしてRichTextBox上に教えていただいた設定のボタンを重ねたところ、
    なんとRichTextBoxを突き抜けてフォームが見えてしまいました。


    こちらの記事が参考になるかもしれません。

    PictureBox上のLabelの背景が透明にならない問題の解決法: .NET Tips: C#, VB.NET, Visual Studio
    http://dobon.net/vb/dotnet/control/labelonpicturebox.html

    PictureBoxコントロールの上に配置したLabelコントロールはBackColorプロパティをTransparentにしても透明に なったようには見えません。これはLabelコントロールの親コントロールがフォームであり、フォームにあわせてLabelコントロールの背景が設定され るためです。

    よってこの問題を解決するには、Labelの親コントロールをPictureBoxにすればよい訳です。

    RichTextBox の上に Hongliang さんご提示のボタンを重ね、以下のコードを追加します。

    Me.RichTextBox1.Controls.Add(Me.Button1)

    これで RichTextBox1 の背景色とボタンの色が同化しました。

    2009年11月24日 9:05
  • かなり前の質問のようですが…
    ラベル貼っちゃダメですか?

    labelを作成

    BackColorをフォームの透明色に(特にいじってなければ[Transparent]だったはず)

    Textを空に

    これで透明なラベルが出来上がります。
    AutoSizeをFalseにすればサイズも変えれますし…

    Private Sub Label_Click(sender As Object, e As EventArgs) Handles Label.Click

    の後にコード書けばクリックした時に動くし、透明だと思うんですが…
    だいぶ前の質問なので意味が無いかもしれませんがとりあえず…

    • 編集済み HsaSheep 2015年1月5日 5:16
    2015年1月5日 5:13
  • スレッドをよく見るとわかると思いますが、「”透明”としたときに何が背景に映るのか」が問題です。
    元の質問では、リッチテキストボックスに重ねて、リッチテキストボックスが透けて見えることを期待していたはずですが、フォームの背景が見えたと言うことです。
    これは Label であっても同じ性質を持っています。


    2015年1月5日 12:59
    モデレータ