• 締切済み

コントロール作成

visualBasic2008無料版 で コードによるコントロールの作成が突然できなくなりました。 質問1 システム変更ですか? 質問2 コードでボタンコントロールの作成コードを教えてください。 URLの貼り付けは、ご遠慮ください。

みんなの回答

回答No.3

VB2005で補足に提示したコードを実行してみたところ、実行時にNullReferenceExceptionが2箇所発生しました。エラーが発生しないよう、下記の通りに修正してみましたのでお試しくだされ。 Option Strict On Public Class Form1 Private bt() As Button Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load Array.Resize(Me.bt, 5) ' ※1 For i As Integer = 0 To 4 Me.bt(i) = New Button() ' ※2 With Me.bt(i) ' ※2 .Name = "bt" + i.ToString .Text = "ボタン" .Location = New Point(i * 30, 0) .Size = New System.Drawing.Size(80, 20) End With ' ※3 Me.Controls.Add(Me.bt(i)) ' ※3 Next End Sub End Class ※1については、動的配列の要素数が定義されていなかったので付け加えました。 ※2については、オブジェクト(ここではButton)が生成される前にWithを使っていることでNullReferenceが発生していたようです。入れ替えたらちゃんと動きました。 ※3については、特にエラーにはならなかったのですが、Withの内側でWithに使った変数を直接扱うのはトラブルの元になりやすいので、AddメソッドをWith~Endの外側に出しました。 あと、お気づきかとは思いますが、ボタンの幅が80なのに生成時の座標が30ずつしかずらしていないので、各ボタンの全景は見えていません。

gcqd75ce
質問者

お礼

使えるようになりました。 Array.Resize(Me.bt, 5) ' ※1 ココのコードがわかりませんが、ちょっと勉強してみます。 ありがとうございました。

  • mako_tyo
  • ベストアンサー率37% (61/161)
回答No.2

>質問1 システム変更ですか? システム変更とは何のシステム変更ですか? >質問2 コードでボタンコントロールの作成コードを教えてください。 Private bt As Button Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load Me.bt = New Button() Me.bt.Name = "bt" Me.bt.Text = "ボタン" Me.bt.Location = New Point(0, 0) Me.bt.Size = New System.Drawing.Size(80, 20) Me.Controls.Add(Me.bt) End Sub >コードによるコントロールの作成が突然できなくなりました。 エラーが出てビルドが通らないのですか? コントロールが作成できないわけないので、自分の作成手順、環境を見直してみてください。

gcqd75ce
質問者

お礼

1個しか作れないです。 Option Strict On Public Class Form1 Private bt() As Button Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load For i As Integer = 0 To 4 With Me.bt(i) Me.bt(i) = New Button() .Name = "bt" + i.ToString .Text = "ボタン" .Location = New Point(i * 30, 0) .Size = New System.Drawing.Size(80, 20) Me.Controls.Add(Me.bt(i)) End With Next End Sub End Class 大量に作れなくなりました (2日前からです。)

noname#187541
noname#187541
回答No.1

こんばんは。 質問1 普通に出来るのでシステム変更はありません。 質問2 フォームのロード時に作成します。 Private Button1 As System.Windows.Forms.Button 'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load 'Buttonクラスのインスタンスを作成する Me.Button1 = New System.Windows.Forms.Button() 'Buttonコントロールのプロパティを設定する Me.Button1.Name = "Button1" Me.Button1.Text = "押してね" 'サイズと位置を設定する Me.Button1.Location = New Point(10, 10) Me.Button1.Size = New System.Drawing.Size(80, 20) 'フォームに追加する Me.Controls.Add(Me.Button1) End Sub

gcqd75ce
質問者

お礼

1個生産だと使えるようです。 2日前は100個コントロールを生産できましたけど。 ちなみに大量生産コードも教えてください。 マイクロソフト社のシステム変更かな?

関連するQ&A