プロが教えるわが家の防犯対策術!

フォームに配置したボタンをクリックしてテキストボックスからピクチャーボックスに切り替えるプログラムを作っていますがどうすればいいのかわかりません教えてください。

質問者からの補足コメント

  • うーん・・・

    htmlではなくてvisual basicです。

      補足日時:2017/11/08 16:14
  • うーん・・・

    3つ以上のツールを順番に切り替える場合もお願いします。(例)ピクチャーボックス⇒テキストボックス⇒ラベルetc

      補足日時:2017/11/08 18:10
  • うーん・・・

    表示されている2つ以上のツールを同時にまるごと切り替える場合もお願いします。(例)ピクチャーボックス1&テキストボックス1⇒ラベル1&テキストボックス2⇒コンボボックス&ピクチャーボックス2 etc

      補足日時:2017/11/10 10:47
  • うーん・・・

    自作のトレインビジョンを開発しています。表示されている2つ以上のツールを下記の例のように順番に同時にまるごと切り替える場合もお願いします。(例)ピクチャーボックス1とテキストボックス1ペア⇒ラベル1とテキストボックス2ペア⇒コンボボックスとピクチャーボックス2ペア⇒ etc

      補足日時:2017/11/14 09:47
  • うーん・・・

    表示されている2つ以上のツールを下記の例のように順番に同時にまるごと切り替える場合(例)ピクチャーボックス1とテキストボックス1ペア⇒ラベル1とテキストボックス2ペア⇒コンボボックスとピクチャーボックス2ペア⇒ etc のvb.netのコードはどうやって書けばよいのでしょうか?お願いします。

      補足日時:2017/11/17 18:29
  • うーん・・・

    No.4を参照してNo.5をやってみましたが今度は例外エラー(型 'System.IndexOutOfRangeException' のハンドルされていない例外が mscorlib.dll で発生しました 追加情報:インデックスが配列の境界外です。)が出ました。この場合はどうすればいいのですか。教えてください。後、コードもお願いします。

      補足日時:2017/11/21 12:41
  • うーん・・・

    問題のコードはこちらです。
    Private con1() As Object
    Private con2() As Object
    Private j As Integer

      補足日時:2017/11/21 16:40
  • うーん・・・

    続き
    con1 = New Object() {Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9, Label10, Label11, Label12, Label13, Label14, Label15, Label16, Label7, Label8, Label9, PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6, PictureBox7, PictureBox8, PictureBox9, PictureBox10, PictureBox11, PictureBox12, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5,

      補足日時:2017/11/21 16:42
  • うーん・・・

    続き
    TextBox6, TextBox7, TextBox8}
    con2 = New Object() {PictureBox13, TextBox9}
    j = 0
    For n As Integer = 0 To con1.Length - 1
    con1(n).visible = True
    If n = j Then con1(j).visible = True
    Next
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    j += 1

    No.9の回答に寄せられた補足コメントです。 補足日時:2017/11/21 16:44
  • うーん・・・

    続き
    If j > con.Length Then j = 0

    For n As Integer = 0 To con1.Length - 1
    con1(n).visible = False
    con2(n).visible = False
    If n = j Then con1(j).visible = True
    If n = j Then con2(j).visible = True
    Next
    End Sub

      補足日時:2017/11/21 16:44

A 回答 (10件)

これならエラーは出ますよ。



元々ペアとなる2つのコントロールをcon1とcon2に入れなきゃいけないように提案した物ですが、明らかに数が違いますよね?
その辺がおかしな原因でしょう。

>If j > con.Length Then j = 0

conと言う変数は無くなっているはずなのに存在しているのは何故?

とにかく con1 con2 のコントロール数が極端に違うのに別な理由があるのでしょうか?

順番によって2つであったり3つであるとかなら、もう一つの質問
https://oshiete.goo.ne.jp/qa/10071179.html
で使っているジャグ配列にすべきと思いますけど。

con = New Control()() {
New Control() {PictureBox1, TextBox1},
New Control() {Label1, TextBox2},
New Control() {ComboBox1, PictureBox2}}

組む相手を増やしたいなら例えば
New Control() {PictureBox1, TextBox1,TextBox3},
と順番によって2つ以上でも同時に変化をさせられます。

単にペア数を増やすなら
New Control() {コントロール名をカンマ区切りで},
を追加していくだけです。
    • good
    • 0

コードをお願いされて書いたとしても、そちらの環境がどうなっているのかはわからない状況です。


こちらで幾ら自分でControlを配置してコードを作成しても、実際は違う内容の事をしているのかどうかさえわかりません。
厳密には知恵袋と別の質問の方にこちらで検証した物は載せています。
それがダメだって言うのであれば、こちらは検証できない状態になってしまい回答も困難です。

本来はエラーの出るコードを提示して頂く方が確実だと思いますよ。
もしかしたらうちのは古いバージョンを使っていますが、そちらは最近のバージョンであるならその辺で動きが違うのかも?しれませんし。
この回答への補足あり
    • good
    • 0

No.7です。



一応知恵袋ではObjectの変わりにControlで宣言した回答を載せてます。
    • good
    • 0

自作のトレインビジョンと質問の内容の関連性はわかりませんが、検証していないのであくまで参考になるかも?という回答です。



Private con1() As Object

con1 = New Object() {TextBox1, PictureBox1, Label1, ComboBox1, ListBox1} ' ここに配置したコントロール名を書く

この1次元配列を使う方法をやめ、

Private con1()() As Object

con1 = New Object()() {
New Object() {TextBox1, Label1},
New Object() {ComboBox1, ComboBox2},
New Object() {ListBox2, PictureBox1}}

のようにジャグ配列について調べてみては?
・・・実際これほど不特定且つ複数種のコントロールを使う必要があるのか?と言う疑問はありますけど。
この先については他の回答者にお任せします。
    • good
    • 0

あとから条件をコロコロ変えて来られても大変ですので、明確に『何を知りたいのか?』を含めて改めて質問を立て直すべきと思いますよ。


私こちらのサイトはたまにしか来てませんし。
    • good
    • 0

結局最終的に何がしたいのかわからないので、手間がかかるだけです。


組み合わせ自体も統一性が見られませんし。

No.4の回答にあるコードを参照して

Private con() As Object
con = New Object() {TextBox1, PictureBox1, Label1, ComboBox1, ListBox1} ' ここに配置したコントロール名を書く

これを2つ用意して

Private con1() As Object
Private con2() As Object

con1 = New Object() {TextBox1, PictureBox1, Label1, ComboBox1, ListBox1} ' ここに配置したコントロール名を書く
con2 = New Object() {TextBox2, PictureBox2, Label2, ComboBox2, ListBox2} ' ここに配置したコントロール名を書く

---
If i > con.Length Then i = 0

ここを

If i > con1.Length Then i = 0

---
For m As Integer = 0 To con.Length - 1

ここを

For m As Integer = 0 To con1.Length - 1

---

con(m).visible = False
If m = i Then con(i).visible = True

これも2つ用意して

con1(m).visible = False
con2(m).visible = False
If m = i Then con1(i).visible = True
If m = i Then con2(i).visible = True

が手っ取り早いと思いますよ。(コントロールの順番は好きに並べ替えて)
それぞれ行をくっつけて書いてますが、元のコードを良く見て書く位置を間違えないように。
3つなら3つに、4つなら4つに増やせば出来るかと。
    • good
    • 1

No.3です。



TextBox1, PictureBox1, Label1, ComboBox1, ListBox1
があるとして、

Private con() As Object
Private i As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
con = New Object() {TextBox1, PictureBox1, Label1, ComboBox1, ListBox1} ' ここに配置したコントロール名を書く
i = 0

For m As Integer = 0 To con.Length - 1
con(m).visible = False
If m = i Then con(i).visible = True
Next

End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
i += 1
If i > con.Length Then i = 0

For m As Integer = 0 To con.Length - 1
con(m).visible = False
If m = i Then con(i).visible = True
Next
End Sub
    • good
    • 0

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


PictureBox1.Visible = False
TextBox1.Visible = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
With TextBox1
.Visible = Not .Visible
End With

With PictureBox1
.Visible = Not .Visible
End With
End Sub

とか?
    • good
    • 0

#1です。



うっかりHTMLと勘違いして回答してしまいました。
VBAでしたね。 申し訳ありません。

#1は無視してください。m(__)m
    • good
    • 0

こんにちは



>テキストボックスからピクチャーボックスに切り替える~~
ピクチャーボックスというのは画像と考えてよいのでしょうか?

いずれにしろ、異なる要素の切り替えになるので、それぞれを表示/非表示などで切り替えて、片方だけを表示するということになると思います。
HTML内に先に両方を用意しておいても良いですし、スクリプトで要素を生成することも可能です。

以下は、単純に切り替え表示する一例です。
フェードアウト等で入れ替えることなども可能ですので、研究してみてください。
(ボタンをクリックするごとに、表示が入れ替わる一例です。)

<!DOCTYPE HTML PUBLIC>
<html lang="ja">
<head><title>Sample</title>
<style type="text/css">
form textarea, form img{ width:200px; height:100px; }
</style>
</head>
<body>

<form>
<p>
<textarea>hogehoge</textarea>
<img src="./A.jpg" alt="" style="display:none">
</p>
<button id="trigger" type="button" value="click">click</button>
</form>

<script type="text/javascript">
document.getElementById("trigger").addEventListener("click", function(){
var img = this.form.querySelector("p img");
var f = img.style.display == "none";
img.style.display = f?"":"none";
this.form.querySelector("p textarea").style.display = f?"none":"";
}, false);
</script>
</body>
</html>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!