- ベストアンサー
256色で任意の色を作成する時、1~255の入力制限をする方法
VB.NETで最近プログラムを作り始めました。 テキストボックスより255色の色を入力するように作ったのですが、0以下と256以上の数値を入力するとエラーが出てしまいます。 入力者が256以上の数値及び0以下の数値を入力した時に、256以上の場合255色に、0以下の場合0に強制的に数値を変更させて、エラーが出ないようにする方法を教えて下さい。 作成したプログラムは以下の通りです。(ラジオボタンで塗りつぶす場所を変更しています) Dim grph As System.Drawing.Graphics = Me.CreateGraphics Dim fillbrush As New SolidBrush(Color.FromArgb(R, G, B)) Dim drawpen As New Pen(Color.Blue, 3) If RButMimi.Checked Then grph.FillRectangle(fillbrush, 耳B1, 耳B2, 耳3, 耳4) grph.FillRectangle(fillbrush, 耳A1, 耳A2, 耳3, 耳4) ElseIf RButMe.Checked Then grph.FillRectangle(fillbrush, 目A1, 目A2, 目3, 目4) grph.FillRectangle(fillbrush, 目B1, 目B2, 目3, 目4) ElseIf RButKao.Checked Then grph.FillRectangle(fillbrush, 縦, 横, 横幅, 縦幅) End If
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>入力直後にエラーが表示されてしまい ということは質問文に書いてあるコードはテキストボックスを ハンドルとするイベント内に既に書かれているんですね? 上記コードがどのイベントか分からないとなんともいえません。 でも、とりあえず問題を回避するには 4行目、「If RButMimi.Checked Then」の直前にでも IF TextBox1.text < 0 or TextBox1.text > 255 Then exit sub 'SubかFunctionか分からないけどとにかく処理を中断する end if としておいたらどうでしょう?
その他の回答 (3)
- pen_pen_pen
- ベストアンサー率65% (52/79)
Public Event??? 普通じゃないですか?私ヘンな事言ってるかな? Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If TextBox1.Text.Length > 0 Then TextBox1.Text = Math.Min(Math.Max(Val(TextBox1.Text), 1), 255) End If End Sub でいけましたよ。 すみません。前回のコードに一部ミスありました。 0を許可しちゃってましたね。 あ。あとValueChangedじゃなくてTextChangedでした。
お礼
>普通じゃないですか?私ヘンな事言ってるかな? いいえ。私がプログラムをよく理解していないので、変な事を言ってます。 すみませんでした。 教えて頂いたコードを利用して、プログラムが思った通りの結果になるよになりました。 まだまだ宣言や、宣言する場所等、基礎知識の勉強をしないと質問自体が分かりにくくなり、教えていただく方が分からない質問になってしまう事を痛感しました。変な質問に丁寧にご回答していただいて本当にありがとうございました。
- pen_pen_pen
- ベストアンサー率65% (52/79)
テキストボックスに数値をキーインしてもらうんですね? NumericUpDownコントロールを使ってはいかがでしょうか? キーインもできるし、数値しか入力できないし、何より入力する数値の範囲を指定できますので、範囲外の値を入れられることはあり得ません。 テキストボックスにするなら、 ValueChangedイベント(?)で ~.Text = Math.Min(Math.Max(Val(~.Text), 0), 255) にしたら超えることはないかな。
お礼
ご回答ありがとうございます。 ValueChangedのイベントを試そうとやってみたんですが、 Public Eventで書いていいのかPrivate Eventで書いていいのか良く分からず、 とりあえず参考資料に載っていたPublic Eventで書いてみたのですが、 「~.Text」の所をテキストボックス名で書くと、「宣言されていません」 と表示されてしまいます。どう宣言したら良いのか教えて頂けますか? こんな初歩的な質問ですみません。 自分の知らない方法を教えて貰ったので、とても勉強になります。
- siddhaartha
- ベストアンサー率25% (45/175)
テキストボックスのLostForcusイベントで 入力されている値が256以上の場合255色に、 0以下の場合0に書き換えてやればいいと思われます。
補足
回答ありがとうございます。 IF文で書き換えるように書いたのですが、デバッグで確認すると入力直後に エラーが表示されてしまい、書き換えが実行されていないようです。 どの部分にどのように書き換えのプログラムを入れればいいのか教えていただけますでしょうか?
お礼
ご回答ありがとうございます。 お礼が遅くなってすみません。 アドバイスして頂いた事を参考にやっと動くようになりました。 本当にありがとうございます! 何とか思った通り、255以上の時にはエラーメッセージと255の数値 に変更される設定が使えるようになりました。 表示が255にならない所は次の課題ですが(^^; 本当にありがとうございました。助かりました。