• ベストアンサー

PictureBoxの背景色変更(VB.NET)

最近、VB.NETを勉強し始めた初心者です。 スクロールバーとテキストボックスを利用し PictureBoxの背景色を変更させるプログラムを作りたいのですが 色変更のやりかたがわかりません。 赤・緑・青に対応した3本のスクロールバーと3つのテキストボックスを用意し スクロールバーを動かす、もしくはテキストボックスに値を直接入力すし ボタン1を押すと、PictureBoxの背景色が入力した値に応じて変わるように設定します。 スクロールバーを動かした時は、テキストボックスにスクロールバーの値を表示させます。 実行直後は赤・緑・青の全てが0ですので、黒になっています。 (なお、値の最大は255です) また、実行直後のテキストボックスは「0」と表示するようにします。 ボタン2を押すとすべての値が初期化され、実行直後と同じ状態になります。 いろいろと調べたのですが、未だにわからず困っています。 それぞれの配置やスクロールバーの値の範囲設定等はすべて書き終えています。 やりかたがわかるかたがいましたら、教えていただけますか。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

PictureBoxの背景色なら BackColorプロパティです BackColorプロパティは Color構造体のデータを受け取ります Color構造体は RGBの数値から色を作成するには FromArgbメソッドを使います PictureBox1.BackColor = Color.FromArgb( TextBox1.Text, TextBox2.Text, TextBox3.Text) といった具合にします TextBox1が赤 TextBox2が緑 TextBox3が青 といった順番です

laybial
質問者

補足

ありがとうございます。 >PictureBox1.BackColor = Color.FromArgb( TextBox1.Text, TextBox2.Text, TextBox3.Text) これは、テキストボックスに入力した数値が色として反映されるということでしょうか? スクロールバーを動かしたときの動作はまた別なのか、それとも同じなのか よろしければ教えていただくと助かります。 スクロールバーを動かして数値を変更するというのが 申し訳ないのですが、やってみたところいまいちわかりませんでしたので……。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

逆の操作は if HScrollVar1.Value <> CInt( TextBox1.Text ) Then   HScrollBar1.Value = CInt( TextBox1.Text ) end if といった具合でいいと思いますよ

laybial
質問者

お礼

ありがとうございました!できました! 本当に助かりました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

ごめんなさい m(__)m Color.FromArgb(TextBox1.Text,TextBox2.Text,TextBox3.Text) これは エラーにありますね ・・・ ♯ VB6の癖が付いていて <-- いい訳ですね CInt関数や IntegerのPaurseなどを使って文字列から数値に変換しないといけませんでした 普通のテキストボックスですと文字も入力可能ですよね たとえば『12あ』とか NumericUpDownは数値(数字)しか受け付けません HScrollBarのValueChangedイベントでリアルタイムに色を変更したいのであれば PictureBox1.BackColorを更新する処理も必要です

laybial
質問者

補足

ありがとうございます。 No1~2を参考にさせていただき、実際にやってみましたが 数値を入力、もしくはスクロールバーをいじって 背景色を変更することはできました。 数字以外の文字や空白ですとエラーが出るので それはエラー処理をしたいと思っています。 しかし、スクロールバーをいじらず、テキストボックスにのみ数値を入力し ボタン1(変更)を押したとき、スクロールバーが対応する数値に移動しません。 (色は入力した数値のとおりに変わるのですが スクロールバーが0の位置から動かない状態です) 入力した数値に対応してスクロールさせたいのですが その際に、文字列から数値に変換するのが必要なのでしょうか? たびたびの質問で失礼します……。

回答No.3

Option Explicit On Option Strict On Option Compare Binary Option Infer Off ' VB2008以上。SharpDevelop 3 alphaには出てこないや~ Class Q3795334A Public Shared Sub Main(args As String()) Dim hoge As Q3795334B hoge = New Q3795334B() hoge.ShowDialog End Sub End Class Class Q3795334B Inherits System.Windows.Forms.Form Private PictureBox1 As System.Windows.Forms.PictureBox Private Button1 As System.Windows.Forms.Button Private Button2 As System.Windows.Forms.Button Private NumericUpDownR As System.Windows.Forms.NumericUpDown Private NumericUpDownG As System.Windows.Forms.NumericUpDown Private NumericUpDownB As System.Windows.Forms.NumericUpDown '最初の予定とはだいぶ違うけどいいよね?これくらい '>テキストボックスより『NumericUpDown』コントロールの方がいいかもしれませんね '賛成。テキストボックスでやると, 'System.FormatException 'とか 'System.ArgumentOutOfRangeException 'を気にしないといけない '中々すばらしくムカつくのでTrackBarを使ってみることに 'http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2012622&SiteID=7 Private TrackBarR As System.Windows.Forms.TrackBar Private TrackBarG As System.Windows.Forms.TrackBar Private TrackBarB As System.Windows.Forms.TrackBar Sub New() Me.Size = New System.Drawing.Size(800,600) PictureBox1 = New System.Windows.Forms.PictureBox() Button1 = New System.Windows.Forms.Button() Button2 = New System.Windows.Forms.Button() NumericUpDownR = New System.Windows.Forms.NumericUpDown() NumericUpDownG = New System.Windows.Forms.NumericUpDown() NumericUpDownB = New System.Windows.Forms.NumericUpDown() TrackBarR = New System.Windows.Forms.TrackBar() TrackBarG = New System.Windows.Forms.TrackBar() TrackBarB = New System.Windows.Forms.TrackBar() PictureBox1.Width = 400 PictureBox1.Height = 500 PictureBox1.Left = 20 PictureBox1.Top = 20 PictureBox1.BackColor = System.Drawing.Color.White Button1.Width = 100 Button1.Height = 20 Button1.Left = 420 Button1.Top = 20 Button1.Text = "適用" Button2.Width = 100 Button2.Height = 20 Button2.Left = 420 Button2.Top = 60 Button2.Text = "リセット" NumericUpDownR.Width = 50 NumericUpDownR.Height = 20 NumericUpDownR.Left = 420 NumericUpDownR.Top = 100 NumericUpDownR.Maximum = 255 NumericUpDownR.Minimum = 0 NumericUpDownG.Width = 50 NumericUpDownG.Height = 20 NumericUpDownG.Left = 420 NumericUpDownG.Top = 140 NumericUpDownG.Maximum = 255 NumericUpDownG.Minimum = 0 NumericUpDownB.Width = 50 NumericUpDownB.Height = 20 NumericUpDownB.Left = 420 NumericUpDownB.Top = 180 NumericUpDownB.Maximum = 255 NumericUpDownB.Minimum = 0 TrackBarR.Width = 250 TrackBarR.Height = 20 TrackBarR.Left = 480 TrackBarR.Top = 100 TrackBarR.Maximum = 255 TrackBarR.Minimum = 0 TrackBarR.TickFrequency = 10 TrackBarG.Width = 250 TrackBarG.Height = 20 TrackBarG.Left = 480 TrackBarG.Top = 140 TrackBarG.Maximum = 255 TrackBarG.Minimum = 0 TrackBarG.TickFrequency = 10 TrackBarB.Width = 250 TrackBarB.Height = 20 TrackBarB.Left = 480 TrackBarB.Top = 180 TrackBarB.Maximum = 255 TrackBarB.Minimum = 0 TrackBarB.TickFrequency = 10 Reset() Me.Controls.Add(PictureBox1) Me.Controls.Add(TrackBarR) Me.Controls.Add(TrackBarG) Me.Controls.Add(TrackBarB) Me.Controls.Add(NumericUpDownR) Me.Controls.Add(NumericUpDownG) Me.Controls.Add(NumericUpDownB) Me.Controls.Add(Button1) Me.Controls.Add(Button2) AddHandler TrackBarR.ValueChanged ,AddressOf TrackBar_OnValueChanged AddHandler TrackBarG.ValueChanged ,AddressOf TrackBar_OnValueChanged AddHandler TrackBarB.ValueChanged ,AddressOf TrackBar_OnValueChanged AddHandler NumericUpDownR.ValueChanged ,AddressOf NumericUpDown_OnValueChanged AddHandler NumericUpDownG.ValueChanged ,AddressOf NumericUpDown_OnValueChanged AddHandler NumericUpDownB.ValueChanged ,AddressOf NumericUpDown_OnValueChanged AddHandler Button1.Click, AddressOf Button1_OnClick AddHandler Button2.Click, AddressOf Button2_OnClick End Sub Private Sub TrackBar_OnValueChanged(sender As Object, e As System.EventArgs) NumericUpDownR.Text = TrackBarR.Value.ToString() NumericUpDownG.Text = TrackBarG.Value.ToString() NumericUpDownB.Text = TrackBarB.Value.ToString() End Sub Private Sub Button1_OnClick(sender As Object ,e As System.EventArgs) Dim r As Integer = Decimal.ToInt32(NumericUpDownR.Value) Dim g As Integer = Decimal.ToInt32(NumericUpDownG.Value) Dim b As Integer = Decimal.ToInt32(NumericUpDownB.Value) PictureBox1.BackColor = System.Drawing.Color.FromArgb(255,r,g,b) End Sub Private Sub Button2_OnClick(sender As Object ,e As System.EventArgs) Reset() End Sub Private Sub NumericUpDown_OnValueChanged(sender As Object, e As System.EventArgs) TrackBarR.Value = Decimal.ToInt32(NumericUpDownR.Value) TrackBarG.Value = Decimal.ToInt32(NumericUpDownG.Value) TrackBarB.Value = Decimal.ToInt32(NumericUpDownB.Value) End Sub Private Sub Reset() NumericUpDownR.Value = 0 NumericUpDownG.Value = 0 NumericUpDownB.Value = 0 TrackBarR.Value = 0 TrackBarG.Value = 0 TrackBarB.Value = 0 PictureBox1.BackColor = System.Drawing.Color.FromArgb(255,0,0,0) End Sub End Class 'こんな感じ?

laybial
質問者

補足

具体的な回答をありがとうございます。 大変助かりました。 一応、質問文に書いた形式で作ってみたいので いただいた回答を参考に、作成してみたいと思います。 蛇足かもしれませんが、テキストボックスで作成しようとすると どういう点が問題になるのでしょうか? 最大入力文字数はあらかじめ設定し、0~255以外の数値が入力された場合は エラーのメッセージボックスを出すようにしようと思いますが やはりNumericUpDownというもののほうが良いでしょうか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

テキストボックスより『NumericUpDown』コントロールの方がいいかもしれませんね HScrollBarのValueChangeイベントなどで TextBox1.Text = HScrollBar1.Value などとすれば スクロールバーとテキストボックスの連動が出来ますよ Button2をクリックした際には HScrollBar1.Value = 0 などで初期化してやり PictureBox1.BackColor = Color.Black などとしてみてはいかがでしょう

laybial
質問者

補足

何度もありがとうございます。 こちらを見落としていましたので質問が重複して申し訳ないですが >TextBox1.Text = HScrollBar1.Value これが、スクロールさせたときの動作になるのでしょうか?

関連するQ&A

  • GUIアプリケーション

    ユーザーがボタンを押すと,キャンバスの色を変更するためのスクロールバーを持った.ダイアログボックスが表示されます. スクロールバーは3つあり,それぞれ赤,緑,青の輝度を調整します. ダイアログボックスを消すためのボタンも用意します. このようなアプリケーションを作りたいのですができません RGBの値を読み取りキャンバスの色を変えるだけのアプリならできるのですが。。

  • PictureBoxの描画を消さない方法

    VisualBasic2005において、プログラミングを制作しています。 計測器にて計測した値を読み込み、くり返し処理を用いてPictureBoxに描画したいのですが、前のデータを消さずに次のデータをプロットしていく方法がわかりません。 前のデータを消さずに塗り足していく方法はないでしょうか? また、この値はコンボボックスから読み込んでいるのですが、くり返し処理によってコンボボックスの値を読み取る場合、終了値はどのように設定すればいいのでしょう? 初期値はいいとして、終了値は計測回数によって変わるため明確な値はないのですが、「値がなくなったら終わり」ということを指定するにはどうコードを組めばいいのでしょうか? ご指導よろしくお願いいたします。 全体的な流れを記しておきます。 計測→コンボボックスに値を格納→ボタンによってコンボボックスの値を(全て)読み込み、PictureBoxに全て描画 コンボボックスの値の読み込み、描画にくり返し処理を用いています。 よろしくお願いいたします。

  • テキストボックスに入力した色に背景色を変える

    教えてください。 テキストボックスに入力されたカラーコード又はカラーネームに背景色を変更させたいのですが、onchangeを使えばいいのはわかるのですが、入力された値をどうやって表示されるかよくわかりません。ボタンを使って変更させるのはわかるのですが…。 よろしくお願いいたします。

  • VBAで背景色

    以前にも同じような質問をしたのですが、応用できなかったので改めて質問させていただきます。申し訳ありません。 VBAを使って、入力された値によってセルの背景色を変更したいです。 C列からAF列までのセルに 「1」から始まる値が入力されたら背景を黄色 例:「1テスト」 「2」から始まる値が入力されたら背景を緑色 例:「2VBA」 「3」から始まる値が入力されたら背景を水色 例:「3教えて」 「4」から始まる値が入力されたら背景を赤  例:「4終了」 にするVBAが欲しいです。 例えば、C1に入力した「1テスト」という値を、D1~AF1にコピーすれば C1~AF1の背景が黄色になるようにしたいわけです。 かつ、B列にはその行で背景が黄色のセルの数を返せれば最高です。 どの部分が「C列からAF列」を指すのかをご説明いただけると大変ありがたいです。 よろしくお願いします。

  • メニューやメッセージボックスの背景色の変更方法

    Win XPを使っています。 実は、画面のプロパティの配色をいじっていて、結果的に「規定(青)」に戻したのですが、メニューバーとメッセージボックスの背景色が淡い緑色になってしまっており、チラチラして見にくくて困っています。もとのグレーに戻したいのですが、詳細設定のどこを探しても該当部分が見当たりません。 どなたか、グレーに戻す方法、あるいはフリーソフトを教えてください。

  • Java初心者ですが・・・

    Java初心者ですが・・・ こんにちは 早速ですが質問させていただきます アプレットで、正解のときはテキストフィールドの背景色が赤系、 不正解なら青系の色になる、百ます計算をつくってみたのですが、 すべてのテキストフィールドに答えを入力して、ボタンを押すと、 きちんと判定されるのですが、 空白のテキストフィールドがあると、コマンドプロンプトに 大量にメッセージが表示されて、きちんと動作しなくなります おそらく、テキストフィールドのgetTextや、 Integer.parseIntのエラーだと思うのですが、 空白のテキストボックスがある場合、その背景色を黄色系の色にするには、 どのようにすればよいのでしょうか あと、javascriptの、resetのボタンのように、ボタンから、 すべてのテキストフィールドをクリアするには どのようにすればよいのでしょうか お手数ですがよろしくお願いします

    • ベストアンサー
    • Java
  • テキストの背景色を変える。

    onClickで、テキストの背景色を変えたいのですが。 その処理を外部ファイルに記述したいのです。 HTMLファイルでは下記のように記述し、 <・・・・・ <td><input type="button" value="テキストを赤に" onClick="Col001(tC1)"><input type="text" name="tC1" size="20" value=""></td> ・・・・・> JavaScript外部ファイルでは、 function Col001(objText){ alert(objText.value); objText.document.bgColor='red'; } と記述しています。 すると、ページ全体の色が変わってしまいます。 alert(objText.value);では、 テキストボックスtC1に入力されている値が 正常に表示されるのですが・・・。 テキストボックスの背景色だけを変える場合には どのようにしたらいいのでしょうか? どなたか教えてください。 よろしくお願いします。

  • ACCESS VBA;コマンドボックスでラベルの背景色を変えたいのですが

    選択したコマンドボックスで指定したテキストボックスの背景色を変えたいのですが、原理がわかりません。よろしくお願いします。 例;コマンド0(標題:赤)とコマンド1(標題;青)とラベル2とラベル3があるとします。 まず、ラベルのどちらかをクリックすると境界線スタイルの色が変わり、次にコマンドボックスを押すと、選択したラベルの背景色が赤か青に変わるようにしたいのです。 ラベルには半角スペースを入れて形が見えるようにしておき、境界線はクリック時に Me!ラベル2.BorderColor=vbRed などとすればとりあえず、色は変わる事はわかりました。その後どうすればよいのでしょうか? ちなみに実際にはコマンドボタンが5個くらいでラベルは30位で作るつもりです。サイトや本屋も探したつもりですが意外とないのですね・・・。よろしくお願いします。

  • 特定の文字列なら背景色が赤色に・・

    エクセル2010ですが、ユーザ-フォーム上のテキストボックス1が 特定の文字列 "柴" "黒柴" "チワワ"ならテキストボックス2の背景色が赤に テキストボックス1が"ぶるどっぐ" "猫" ならテキストボックス3の背景色が赤になるというコードを教えていただけませんか? よろしくお願いします。

  • エクセルの条件付き書式について

    エクセルを使用しております。 セルで条件を指定して、テキストボックスの背景色を変更したいと思っております。 (例) セルに1と入力されたら、テキストボックスが赤になる。 セルに2と入力されたら、テキストボックスが青になる。 マクロは使用出来ないため、条件付き書式などで出来ればと思っているのですが、良い方法があればご教示願います。 よろしくお願いいたします。