プログレスバーの色を変更するには??【.NET】

解決


π+  2004-09-27 10:27:31  No: 116546

ProgressBar.BackColorや.ForeColorを変更するにはどうしたらいいのでしょうか。。
調べてみると、このメンバはControl.BackColorをオーバーライドしますとあったのですが、オーバーライドってどう意味なのでしょうか><;
いろいろ試したのですがうまくいかなかったので質問させていただきました><よろしくお願いします!


魔界の仮面弁士  2004-09-27 11:44:24  No: 116547

> ProgressBar.BackColorや.ForeColorを変更するにはどうしたらいいのでしょうか。。

Comctl32.dll のバージョンが 4.71 以上であれば、色を変更する事は
できるのですが、残念ながらそれは、.NET Framework の機能としては
用意されていないのです。

この場合は、Windows API を直接呼び出すことで、プログレスバーの色を
変更する事が可能です。もしも API を使いたくないなら、GDI+ を使って、
自分でプログレスバーを自作してしまうのも手でしょう。

 <System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)> Structure COLORREF
     Public Red As Byte
     Public Green As Byte
     Public Blue As Byte
     Public Sub New(ByVal Red As Byte, ByVal Green As Byte, ByVal Blue As Byte)
         Me.Red = Red
         Me.Green = Green
         Me.Blue = Blue
     End Sub
     Public Sub New(ByVal Color As System.Drawing.Color)
         Me.Red = Color.R
         Me.Green = Color.G
         Me.Blue = Color.B
     End Sub
 End Structure

 Private Declare Auto Function SendMessage Lib "user32" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As COLORREF) As Integer

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Const PBM_SETBKCOLOR  As Integer = &H2001I
     Const PBM_SETBARCOLOR As Integer = &H0409I

     SendMessage( ProgressBar1.Handle, PBM_SETBKCOLOR , 0I, New COLORREF(Color.Red   ) )
     SendMessage( ProgressBar1.Handle, PBM_SETBARCOLOR, 0I, New COLORREF(Color.Yellow) )
 End Sub


π  2004-09-28 05:59:55  No: 116548

お返事おくれてしまってすみません。
Dllのヴァージョンによってできないことなんてあるんですね><勉強になりました。上記コードをためさせてもらいました><
実行したのですが、SendMessageにアクセスできないためオーバーロードの解決に失敗しましたとでるのですが、これもバージョンが関係あるのでしょうか><


魔界の仮面弁士  2004-09-28 12:20:23  No: 116549

VB.NET 2002 でも VB.NET 2003 でも (2005 でも)、上記のコードで動くと思いますが…。
もしかして、SendMessage を Class Form1 内で定義していないのでは?

> オーバーライドってどう意味なのでしょうか
> オーバーロードの解決に失敗しましたとでるのですが
言葉の意味だけ書くと、こんな感じですかね。

オーバーロード:
  戻り値や引数の数やデータ型(シグネチャ)が異なる
  同名の関数やメソッドを複数定義する事。メソッドの多重定義。

オーバーライド:
  継承元の基本クラスで定義されたメソッドを、
  継承先のクラスで再定義すること。メソッドの書き換え。

シャドウ:
  継承元の基本クラスで定義されたメソッドを、
  継承先のクラスで隠蔽化すること。

シャドウとオーバーライドの違いは、実例を見た方が分かりやすいかも知れません。
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_10/vbnet2_10_02.html
# 上記も含めて、「@IT」の記事は参考になるものが多いので、
# 一通り目を通しておくと、勉強になるかと思います。
http://www.atmarkit.co.jp/fdotnet/basics/oop_index/index.html
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/index/index.html


π  2004-09-28 22:57:25  No: 116550

ご回答ありがとうございます!!ん〜ちょっと私には言葉が難しいですが、なんとなくはわかってきたような気がしました。参考ページありがとうございます!じっくり読ませてもらいます><!いつもいつも感謝しています><
プログレスバーの色変更無事にできました!!!!!フォーム内で宣言していませんでした><Praivateはいつも一番上に宣言してるもので><なんかほんと右も左もわからなくてサポートしていただいてすみませんです!!ありがとうございました><


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加