
最近、VB.NETを勉強し始めた初心者です。
スクロールバーとテキストボックスを利用し
PictureBoxの背景色を変更させるプログラムを作りたいのですが
色変更のやりかたがわかりません。
赤・緑・青に対応した3本のスクロールバーと3つのテキストボックスを用意し
スクロールバーを動かす、もしくはテキストボックスに値を直接入力すし
ボタン1を押すと、PictureBoxの背景色が入力した値に応じて変わるように設定します。
スクロールバーを動かした時は、テキストボックスにスクロールバーの値を表示させます。
実行直後は赤・緑・青の全てが0ですので、黒になっています。
(なお、値の最大は255です)
また、実行直後のテキストボックスは「0」と表示するようにします。
ボタン2を押すとすべての値が初期化され、実行直後と同じ状態になります。
いろいろと調べたのですが、未だにわからず困っています。
それぞれの配置やスクロールバーの値の範囲設定等はすべて書き終えています。
やりかたがわかるかたがいましたら、教えていただけますか。
お願いします。
No.1ベストアンサー
- 回答日時:
PictureBoxの背景色なら BackColorプロパティです
BackColorプロパティは Color構造体のデータを受け取ります
Color構造体は RGBの数値から色を作成するには FromArgbメソッドを使います
PictureBox1.BackColor = Color.FromArgb( TextBox1.Text, TextBox2.Text, TextBox3.Text)
といった具合にします
TextBox1が赤 TextBox2が緑 TextBox3が青 といった順番です
この回答への補足
ありがとうございます。
>PictureBox1.BackColor = Color.FromArgb( TextBox1.Text, TextBox2.Text, TextBox3.Text)
これは、テキストボックスに入力した数値が色として反映されるということでしょうか?
スクロールバーを動かしたときの動作はまた別なのか、それとも同じなのか
よろしければ教えていただくと助かります。
スクロールバーを動かして数値を変更するというのが
申し訳ないのですが、やってみたところいまいちわかりませんでしたので……。
No.4
- 回答日時:
ごめんなさい m(__)m
Color.FromArgb(TextBox1.Text,TextBox2.Text,TextBox3.Text)
これは エラーにありますね ・・・
♯ VB6の癖が付いていて <-- いい訳ですね
CInt関数や IntegerのPaurseなどを使って文字列から数値に変換しないといけませんでした
普通のテキストボックスですと文字も入力可能ですよね
たとえば『12あ』とか
NumericUpDownは数値(数字)しか受け付けません
HScrollBarのValueChangedイベントでリアルタイムに色を変更したいのであれば
PictureBox1.BackColorを更新する処理も必要です
この回答への補足
ありがとうございます。
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.asp …
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
'こんな感じ?
この回答への補足
具体的な回答をありがとうございます。
大変助かりました。
一応、質問文に書いた形式で作ってみたいので
いただいた回答を参考に、作成してみたいと思います。
蛇足かもしれませんが、テキストボックスで作成しようとすると
どういう点が問題になるのでしょうか?
最大入力文字数はあらかじめ設定し、0~255以外の数値が入力された場合は
エラーのメッセージボックスを出すようにしようと思いますが
やはりNumericUpDownというもののほうが良いでしょうか?
No.2
- 回答日時:
テキストボックスより『NumericUpDown』コントロールの方がいいかもしれませんね
HScrollBarのValueChangeイベントなどで
TextBox1.Text = HScrollBar1.Value
などとすれば スクロールバーとテキストボックスの連動が出来ますよ
Button2をクリックした際には
HScrollBar1.Value = 0
などで初期化してやり
PictureBox1.BackColor = Color.Black
などとしてみてはいかがでしょう
この回答への補足
何度もありがとうございます。
こちらを見落としていましたので質問が重複して申し訳ないですが
>TextBox1.Text = HScrollBar1.Value
これが、スクロールさせたときの動作になるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- gooブログ 記事の下にスクロールバーが表示される 2 2022/08/19 20:42
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- Windows 10 (続き2)2つのウィンドウ選択時の表示について 3 2023/08/21 22:41
- Visual Basic(VBA) テキストボックスの値を該当セルに登録する方法 2 2022/11/23 18:47
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- Excel(エクセル) 条件付き書式の設定方法を教えて下さい。 2 2023/04/14 18:12
このQ&Aを見た人はこんなQ&Aも見ています
-
picturebox の BackColor は透明に出来ないのですか?
Visual Basic(VBA)
-
フォームの再読み込み
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
5
vb.net 画像の透過について
Visual Basic(VBA)
-
6
VB.NETで画像の拡大・縮小
Visual Basic(VBA)
-
7
ピクチャーボックスに点を打つ .NET
Visual Basic(VBA)
-
8
VB2008で定数に色の設定をしたいです。(初心者)
Visual Basic(VBA)
-
9
DataGridView、1セルに複数コントロール
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックス(VBA)でEnter...
-
ユーザーフォームに日付を表示...
-
テキストボックスがセルと連動...
-
Enabled=Falseのテキストボック...
-
カスタムコントロールInputMan...
-
C# TEXTが空白であるLABELは何...
-
Wordテキストコントロールが未...
-
Access 標題について
-
エクセルの画像にツールチップ...
-
コンボボックスのセンタリング
-
チェックボックスの文字色の変え方
-
VB6でPNGファイルを扱うには?
-
VB.NETで縦書表示をしたいので...
-
エクセル入力規制リスト行数
-
中国文字のプログラムでの取り扱い
-
VBA シートのボタン名を変更し...
-
worksheetFunctionクラスのVloo...
-
ユーザーフォームを表示中にシ...
-
パソコンへの「Dropbox...
-
「Columns("A:C")」の列文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームに日付を表示...
-
テキストボックス(VBA)でEnter...
-
エクセルの画像にツールチップ...
-
Wordテキストコントロールが未...
-
コンボボックスの高さを変更し...
-
Enabled=Falseのテキストボック...
-
ADOのCursorLocationプロパティ
-
MSFlexGrid
-
checkbox付きListViewで デフ...
-
VBからエクセルのテキストボ...
-
PictureBoxの背景色変更(VB.NET)
-
VB.NETで縦書表示をしたいので...
-
デザインモードを解除すると消...
-
エクセル入力規制リスト行数
-
C# アプリ終了時に設定を記憶...
-
DataGridViewで行の展開みたい...
-
VB6でLabelの最前面にText Box...
-
VB.NET ToolTipの表示条件について
-
C# TEXTが空白であるLABELは何...
-
チェックボックスの文字色の変え方
おすすめ情報