コントロール名の選択 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 mitchin  (社会人)
投稿日時
2009/6/11 04:26:57
koma1 はイメージリソースですか?
PictureBox.Image プロパティは Image 型なので、Image またはその派生クラスのオブジェクトじゃないと格納できません。
エラーになってしまうのが、コンパイルエラーなのか実行時エラーなのか判りませんが、Option Strict が On になっていないなら On にしてみてください。
実行時にエラーが発生するなら、どういう例外が発生するか確認してみてください。
PictureBox.Image プロパティは Image 型なので、Image またはその派生クラスのオブジェクトじゃないと格納できません。
エラーになってしまうのが、コンパイルエラーなのか実行時エラーなのか判りませんが、Option Strict が On になっていないなら On にしてみてください。
実行時にエラーが発生するなら、どういう例外が発生するか確認してみてください。
投稿者 まだまだ  (中学生)
投稿日時
2009/6/11 03:22:16
ご回答ありがとうございます。
daiveさんのはいろいろなプログラムで使えそうです。ありがとうございます。
mitchinさんのはとても短くて手軽に使えます。ありがとうございます。
おかげ様でピクチャーボックスのイメージは消せたのですが、mitchinさんの方法で
DirectCast(Me.Controls.Item(strPicrrc), PictureBox).Image = My.Resources.koma1
(strPicrrcはコントロール名)
と書くとエラーになってしまいます。
なぜでしょうか?
daiveさんのはいろいろなプログラムで使えそうです。ありがとうございます。
mitchinさんのはとても短くて手軽に使えます。ありがとうございます。
おかげ様でピクチャーボックスのイメージは消せたのですが、mitchinさんの方法で
DirectCast(Me.Controls.Item(strPicrrc), PictureBox).Image = My.Resources.koma1
(strPicrrcはコントロール名)
と書くとエラーになってしまいます。
なぜでしょうか?
投稿者 mitchin  (社会人)
投稿日時
2009/6/10 06:15:38
ControlCollection.Itemプロパティは Control 型なので Image プロパティはありません。
PictureBox にキャストする必要があります。
この場合、PictureBox1 はフォーム直下に配置されていないと見つからず、例外が発生します。
Panel や GroupBox などのコンテナに配置されていても見つけられるようにするには Find メソッドを使ったほうがいいと思います。
PictureBox にキャストする必要があります。
DirectCast(Me.Controls.Item("PictureBox1"), PictureBox).Image = Nothing
この場合、PictureBox1 はフォーム直下に配置されていないと見つからず、例外が発生します。
Panel や GroupBox などのコンテナに配置されていても見つけられるようにするには Find メソッドを使ったほうがいいと思います。
Dim ControlArray() As Control = Me.Controls.Find("PictureBox1", True)
If ControlArray.Length > 0 Then '見つかった時
DirectCast(ControlArray(0), PictureBox).Image = Nothing
End If
投稿者 daive  (社会人)
投稿日時
2009/6/10 06:05:57
Option Strict On '必要がない限りON がいいかと
Option Explicit On '必要がない限りON がいいかと
Public Class xxxxx
:
中略
:
For i = 1 To 5
If IsNothing(Me.Controls("PictureBox" & i.ToString("0"))) = False Then
If System.IO.File.Exists(FILE_JATextBox.Text) Then
CType(Me.Controls("PictureBox" & i.ToString("0")), PictureBox).Image = Image.FromFile(FILE_JATextBox.Text) 'JA
Else
CType(Me.Controls("PictureBox" & i.ToString("0")), PictureBox).Image = Nothing
End If
End If
Next
:
中略
:
Dim strDmmy As String
Dim Ret As DialogResult
With Me.OpenFileDialog1
.Title = "画像ファイルの選択"
.Filter = "画像 ファイル (*.bmp)|*.bmp|ピクチャ (*.jpg;*.ico)|*.jpg;*.ico|全て (*.*)|*.*"
.FilterIndex = 1
.DefaultExt = "bmp"
.InitialDirectory = PrmPath
.FileName = ""
End With
Ret = Me.OpenFileDialog1.ShowDialog
If Ret = Windows.Forms.DialogResult.OK Then
strDmmy = Me.OpenFileDialog1.FileName
Label10.Text = strDmmy
'
CType(PrmImg, PictureBox).Image = Image.FromFile(strDmmy) '表示中のデータを更新
CType(PrmTXT, TextBox).Text = strDmmy
'
Else
'エラー処理
End If
:
中略
:
Dim Btt As Button
Btt = CType(sender, Button)
'
GB_OkNg.Tag = Btt.Tag
GB_OkNg.Top = Btt.Top + Btt.Height
GB_OkNg.Left = Btt.Left
GB_OkNg.Visible = True
’こんな感じでいかがでしょうか?
Option Explicit On '必要がない限りON がいいかと
Public Class xxxxx
:
中略
:
For i = 1 To 5
If IsNothing(Me.Controls("PictureBox" & i.ToString("0"))) = False Then
If System.IO.File.Exists(FILE_JATextBox.Text) Then
CType(Me.Controls("PictureBox" & i.ToString("0")), PictureBox).Image = Image.FromFile(FILE_JATextBox.Text) 'JA
Else
CType(Me.Controls("PictureBox" & i.ToString("0")), PictureBox).Image = Nothing
End If
End If
Next
:
中略
:
Dim strDmmy As String
Dim Ret As DialogResult
With Me.OpenFileDialog1
.Title = "画像ファイルの選択"
.Filter = "画像 ファイル (*.bmp)|*.bmp|ピクチャ (*.jpg;*.ico)|*.jpg;*.ico|全て (*.*)|*.*"
.FilterIndex = 1
.DefaultExt = "bmp"
.InitialDirectory = PrmPath
.FileName = ""
End With
Ret = Me.OpenFileDialog1.ShowDialog
If Ret = Windows.Forms.DialogResult.OK Then
strDmmy = Me.OpenFileDialog1.FileName
Label10.Text = strDmmy
'
CType(PrmImg, PictureBox).Image = Image.FromFile(strDmmy) '表示中のデータを更新
CType(PrmTXT, TextBox).Text = strDmmy
'
Else
'エラー処理
End If
:
中略
:
Dim Btt As Button
Btt = CType(sender, Button)
'
GB_OkNg.Tag = Btt.Tag
GB_OkNg.Top = Btt.Top + Btt.Height
GB_OkNg.Left = Btt.Left
GB_OkNg.Visible = True
’こんな感じでいかがでしょうか?
投稿者 まだまだ  (中学生)
投稿日時
2009/6/10 05:11:02
何度もすみません
あの方法ではPictureBoxでは通用しませんでした。
これができるような方法はないでしょうか?
ご教授願います。
あの方法ではPictureBoxでは通用しませんでした。
Dim strPic As String = "PictureBox1"
Me.Controls(strPic).Image = Nothing
これができるような方法はないでしょうか?
ご教授願います。
投稿者 まだまだ  (中学生)
投稿日時
2009/6/10 03:11:39
すいません
何かの拍子にいいサイトが開いて解決しました。
ごめんなさい。
同じことで困っている人がいるかもしれないので、URLを掲載しておきます。
http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22640204.html
何かの拍子にいいサイトが開いて解決しました。
ごめんなさい。
同じことで困っている人がいるかもしれないので、URLを掲載しておきます。
http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/Q_22640204.html
投稿者 まだまだ  (中学生)
投稿日時
2009/6/10 03:03:26
こんにちは
VB2008を使っています。
ある変数「Number」があります。
そしてフォームの上にはボタンが10個あります。
ボタンの名前はそれぞれbtn1,btn2,…,btn10となっています。
で、もうひとつのボタンbtnClickを押すと、Numberの中に入っている変数の数に応じて、10個のボタンのうち1つのボタンのテキストが変わるものを作りたいです。
こんな感じなのを作りたいのです。
でも上のではうまくいきません。(いかないのはわかっているけれど…)
どうすれば動くのでしょうか?
ご教授願います。
VB2008を使っています。
ある変数「Number」があります。
そしてフォームの上にはボタンが10個あります。
ボタンの名前はそれぞれbtn1,btn2,…,btn10となっています。
で、もうひとつのボタンbtnClickを押すと、Numberの中に入っている変数の数に応じて、10個のボタンのうち1つのボタンのテキストが変わるものを作りたいです。
'btn2のテキストを変わるようにする
Dim Number As Byte = 2
Private Sub btnClick_Click(…
Dim ControlName As String = "btn" & Str(Number)
ControlName.Text = "選択"
End Sub
こんな感じなのを作りたいのです。
でも上のではうまくいきません。(いかないのはわかっているけれど…)
どうすれば動くのでしょうか?
ご教授願います。
書き忘れてすみません。
今動かしてみると何事もなかったかのように動きます。
ありがとうございました。