• ベストアンサー

コード上でコントロール配置

いつもお世話になっております。 コード上でコントロールを配置したいのですが、うまくいきません。 Dim location As New Point(100, 100) Dim button As Button button = New Button button.Height = 50 button.Weight = 50 button.Location = location button.Visible = True 何が足りないのか・・教えていただきたいです。。

質問者が選んだベストアンサー

  • ベストアンサー
  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

ボタンを配置する先が不明なので、表示されないのでしょう。 Me.Controls.Add(button) ##Weight->Widthの間違い? ただし、これでボタンが配置できたとしても、イベントの処理 は行えませんよ。

guttten
質問者

お礼

なるほど!! できました。 そしてwidthの間違いでした。 身長体重になってましたね(笑 イベントの処理はaddhandlerでやって、無事解決しました。

関連するQ&A

  • 【VB2005】コントロールを配列に。

    下記のコードを変更して、コントロールの値を配列に代入して、 その値をもとに、ボタンを複製して追加したいと思っています。 Public Class frmStart Dim btnNewButton1 As New Button Private Sub frmStart_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load NewButton1.Text = "処理1" btnNewButton1.ForeColor = Color.DimGray btnNewButton1.Location = New Point(10, 100) btnNewButton1.Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton1) end sub End Class やりたいことは、Dim btnNewButton() As New Button のようにデータを配列にして、 btnNewButton(0).ForeColor = Color.DimGray btnNewButton(0).Location = New Point(10, 100) btnNewButton(0).Size = New Size(180, 30) btnNewButton(1).ForeColor = Color.DimGray btnNewButton(1).Location = New Point(380, 100) btnNewButton(1).Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton(0))     Me.Controls.Add(btnNewButton(1)) という事をしたいのですが、方法が解らなくて困ってます。 お知恵を貸してください。

  • VB2005 コードでのコントロールのコピーについて

    いつもお世話になっています。 独学でVBの勉強をしているものなのですが、 どうしてもわからないことがあるので教えてください。 デザイナの画面で配置したテキストボックスなどのコントロールを、 コードでコピーして複数配置するようにしたいんです。 そこで、デザイナでTextBox1を配置して、 コードで以下のように記述しました。 Dim MyTextBox1 As New TextBox MyTextBox1 = TextBox1 Me.Controls.Add(MyTextBox1) すると、デザイナ画面で配置したテキストボックスが無くなって、 新たにコードで作成したテキストボックスだけが、 画面に表示されてしまうんです。 実際に行いたいことは、複数のコントロールをパネル上に配置して、 そのパネルをコードで複数作成することなのですが、 そもそもそのようなことはできないのでしょうか? かなり的外れな質問になってしまっているかもしれませんが、 お分かりでしたら教えてください。 よろしくお願いします。

  • ユーザーコントロールのDrawToBitmap

    vb.net(VisualStudio2015)で作成したユーザーコントロール内の画面を「DrawToBitmap」で取得しフォーム内に表示したいのですが上手く表示できません。もしご存知の方がいましたらご教授して頂けますと助かります。宜しくお願い致します。 Private SecondScreen as New UserControl1 'ユーザーコントロール内の画面を取得 Dim mBitmap as New Bitmap(SecondScreen.Width,SecondScreen.Height) SecondScreen.DrawToBitmap(mBitmap,New Rectangle(0,0,SecondScreen.Width,SecondScreen.Height)) . . . '取得した画面をフォームに表示 Dim g as Graphics = e.Graphics g.DrawImage(mBitmap,new Rectangle(0,0,SecondScreen.Width,SecondScreen.Height)) いくつか省略箇所がありますが、上記の方法ですとユーザーコントロール内の画面が取得できなく、「SecondScreen.Visible=True」で一度表示させてから取得すると表示されます。 フォーム内にユーザーコントロールを張り付けて表示させるのではなく、一度「DrawToBitmap」で取得させてから表示させたいのです。 お手数ですが、ご教授お待ちしています。 宜しくお願い致します。

  • コントロールの配列について

    VB2005で質問です。 初心者のため勉強しながら作成している為かうまくできません。コントロール配列を使ってボタンを204個、 チェックボックスを768個表示するプログラムを作りました。 6個のボタンのうち、1個のボタンをクリックすると128個のチェックボックスがONし、 別の6個のボタンのうち1個は、128個のチェックボックスがOFFし、 96個のボタンは、1個押すと8個のチェックボックスがONし、残りの96個はOFFするプログラムを作成していますが、 配列に登録した名前でクリックイベントハンドラーを作成すると 「HANDOLES句には、それを含む型または基本型の1つで定義されたWith Events変数が必要です」というエラー表示が出ます。 またチェックボックスも同じように名前は宣言されていませんと出ますが、 どう直せば良いか把握できていないのでどなたか教えて貰えないでしょうか。 Dim chkIo(768) As System.Windows.Forms.CheckBox Dim btnIdOn(6) As System.Windows.Forms.Button Dim btnIdOff(6) As System.Windows.Forms.Button Dim btnIoOn(96) As System.Windows.Forms.Button Dim btnIoOff(96) As System.Windows.Forms.Button Const strName1 As String = "chkIo" Const strName2 As String = "btnIdOn" Const strName3 As String = "btnIdOff" Const strName4 As String = "btnIoOn" Const strName5 As String = "btnIoOff" Dim i As Integer Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For c = 0 To 5 For i = 0 To 127 Checkboxio() Next b = 0 ButtonIoOn() b = 0 ButtonIoOff() ButtonIdOn() ButtonIdOff() Next End Sub Public Sub Checkboxio() chkIo(i) = New CheckBox With chkIo(i) .Size = New Size(15, 15) If i < 8 Then a = i b = 0 Contchk() 以下省略 ElseIf i < 128 Then a = i - 120 b = 15 Contchk() End If End With Me.Controls.Add(chkIo(i)) End Sub Public Sub Contchk() With chkIo(i) .Location = New Point((a * 25) + (290 * c) + 80, (b * 35) + 75) a = a + (10 * b) + (200 * c) .Tag = a .Name = strName1 & a.ToString End With End Sub Public Sub ButtonIoOn() For i = 0 To 15 btnIoOn(i) = New Button With btnIoOn(i) a = i .Size = New Size(15, 15) .Location = New Point((290 * c) + 19, (b * 35) + 74) a = a + (20 * c) .Name = strName4 & a.ToString b = b + 1 End With Me.Controls.Add(btnIoOn(i)) Next End Sub Public Sub ButtonIoOff() For i = 0 To 15 btnIoOff(i) = New Button 以下省略 Next End Sub Public Sub ButtonIdOn() 以下省略 End Sub Public Sub ButtonIdOff() btnIdOff(c) = New Button With btnIdOff(c) .Size = New Size(15, 15) .Location = New Point((290 * c) + 154, 29) .Name = strName3 & c.ToString End With Me.Controls.Add(btnIdOff(c)) End Sub ここからエラーがでたプログラムです Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIdOn.Click, btnIdOn1.Click, btnIdOn2.Click, btnIdOn3.Click, btnIdOn4.Click, btnIdOn5.Click, btnIdOff0.Click, _ btnIdOff1.Click, btnIdOff2.Click, btnIdOff3.Click, btnIdOff4.Click, btnIdOff5.Click, btnIoOn0.Click  Select Case DirectCast(sender, Button).Name Case btnIoOn0.Name For i = 0 To 7 Me.chkIo(i).Checked = True Next End Select End Sub

  • C# ユーザーコントロール作成

    C#で以下のようなユーザーコントロールを作成しています。 ・labelA、LabelBを2つ配置しただけのユーザーコントロール(UserA)を作成。 これをFormから動的に生成したいと考えています。 具体的には以下のようなコードを書きました。 UserA wUsr = new UserA(); wUsr.Location = new Point(1,1); this.Controls.Add(wUsr); この結果、ラベルはForm上に生成されなかったのですが、コードに間違いが あるのでしょうか?。 お分かりになるかたがいらっしゃればお教え頂ければと思います。 以上です。

  • 【VB.net】フォーム間でのやり取りについて

    先日、同じような質問をさせて頂いたのですが、 解決に至らなかったため、もう少し質問内容を工夫しますので、再度質問させてください。 ・実行したいプログラム フォーム1のボタン1をクリックすると、フォーム2を開くと同時にフォーム2ボタン1がvisible=Trueになる。 フォーム1のボタン2をクリックすると、フォーム2を開くと同時にフォーム2のボタン1がvisible=Falseになり、ボタン2がvisible=Trueになる。 ・書いたコード ---------------- Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim f As New Form2 f.Owner = Me f.Show() DirectCast(Me.Owner, Form2).Button1.Visible = True DirectCast(Me.Owner, Form2).Button2.Visible = False End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim f As New Form2 f.Owner = Me f.Show() DirectCast(Me.Owner, Form2).Button1.Visible = False DirectCast(Me.Owner, Form2).Button2.Visible = True End Sub End class ---------------- ・問題点 「nullreferenceexceptionはハンドルされませんでした オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが発生します。 「DirectCast(Me.Owner, Form2).Button1.Visible = True」の部分のエラーです。 手書きで申し訳ありませんが、書きたいプログラムの参考画像も載せておきます。 数日前より調べては試し調べては試しと試行錯誤していますが、 正直手詰まりになっており、非常に困っております。 この他にも、フォーム間で命令を出しあいたい場面が多々あるのですが、 プロパティを変える程度のコードでつまずいていて、先に進めません。 手直しした簡単なサンプルコードを書いて頂けると非常に助かります。 以上、何卒よろしくお願い致します。

  • 動的コントロールができない

    フォームをロードしたときに ラベルを動的に貼り付けたいんですが、 Controls.Addの部分でエラーが出てしまって 手が付けれません。 どなたかお助けください。 Dim i As Integer Dim l_week As Label For i = 1 To 6 Set l_week = PN_HEAD.Controls.Add("VB.label", "label" & i) With l_week .Width = CInt(Math.Round(PN_HEAD.Width / 7)) .Height = CInt(Math.Round(PN_HEAD.Height)) .Left = (i Mod 7) * .Width .Top = 0 .Caption = aWeekDayName(i) .Alignment = ContentAlignment.MiddleCenter .Visible = True End With Next

  • NewはCreateObjectと同じ意味?

    Sub test01() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True End Sub Sub test02() Dim objIE As New InternetExplorer objIE.Visible = True End Sub この二つのコードを比較した場合、 Dim objIE As New InternetExplorer で宣言すれば、 Set objIE = CreateObject("InternetExplorer.application") がなくても、 objIE.Visible = True をしてみるとブラウザが立ち上がっているのですが、 これは NewはCreateObjectと同じ意味という事でしょうか?

  • 【VB.net】

    フォーム1のボタンをクリックすると、フォーム2を開くと同時にフォーム2ボタンがvisible=Trueになる、というコードを書きましたが、エラーが発生します。 ---------------- Dim f As New Form2 f.Owner = Me f.Show() DirectCast(Me.Owner, Form2).Button1.Visible = True ---------------- 「nullreferenceexceptionはハンドルされませんでした オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが出ます。 ・Button1の(Name)は間違いない ・Button1のvisible初期設定をTrueにしてもFalseにしても同じエラーが発生した なぜエラーが発生してしまうのでしょうか。 以上、よろしくお願い致します。

  • VBプログラムエラー

    Private number As Integer Private rows As Integer Private columns As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim form2 As New Form() ' Create a button to add to the new form. Dim button1 As New Button() ' Set text for the button. button1.Text = "Scrolled Button" ' Set the size of the button. button1.Size = New Size(1000, 800) ' Set the location of the button to be outside the form's client area. button1.Location = New Point(form2.Size.Width + 200, form2.Size.Height + 200) ' Add the button control to the new form. form2.Controls.Add(button1) ' Set the AutoScroll property to true to provide scrollbars. form2.AutoScroll = True ' Display the new form as a dialog box. form2.ShowDialog() If Not Integer.TryParse(TextBox1.Text, rows) OrElse _ Not Integer.TryParse(TextBox2.Text, columns) OrElse _ Not Integer.TryParse(TextBox3.Text, number) Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Me.Bounds = New Rectangle(10, 10, 1300, 900) Dim cnt As Integer = 0 For k As Integer = 1 To number For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 tb.Name = "tb" + cnt.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + 80 tb.Left = (j - 1) * 60 + 70 * (columns * (k - 1)) + 10 tb.Width = 50 Next Next Next End Sub スクロール画面を作成し、 そのスクロール画面上にボタンを1つ作り、 テキストボックスが出てくるようにしたいです。 どうすればできるのでしょうか 。 これはわかるところまで作成しています。

専門家に質問してみよう