フォームが出力されません

このQ&Aのポイント
  • Visual Studio2019で作成したテンキー相当のフォームが表示されない。
  • ソースコードの一部を編集したが、エラーが発生してコンパイルできない。
  • Tkパラメータの指定を変更してみたが、フォームは表示されない。
回答を見る
  • ベストアンサー

フォームが出力されません

すみません。2日間悩んでいます。 Visual Studio2019でテンキー相当のフォームを作りましたが、フォームが表示されません。 ソースはBisual Basicで作成しています。 自分でフォームを読み込んでやらないとダメかなと思い、★を追加しましたが 今度は、★の行で下記のエラーとなりコンパイルが通りません。 単純なロジックなのに、エラー番号やフォームが表示されない等、いろいろ調べましたがわからず悩んでいます。 ちなみに★のパラメタのTkの指定をやめ、()だけにするとエラーはなくなりますが やはりフォームは表示されません。 申し訳ないですが、テンキー相当のフォームが表示できるようご教授をお願いします。 エラー BC30518 これらの引数で呼び出せるアクセス可能な 'Run' がないため、オーバーロードの解決に失敗しました: 'Public Shared Overloads Sub Run(mainForm As Form)': 型 'Tenkey' の値を 'Form' に変換できません。 'Public Shared Overloads Sub Run(context As ApplicationContext)': 型 'Tenkey' の値を 'ApplicationContext' に変換できません。 Public Class Tenkey Private keta As Integer = 0 '/***********************************************/ '/* 初期化処理(フォームのロード) */ '/***********************************************/ Public Shared Sub Main() Dim Tk As New Tenkey Tk.TextBox1.Select() 'テキストボックスにカーソルを移動 Tk.TextBox1.TextAlign = HorizontalAlignment.Right 'テキストボックスを右詰めで入力 MsgBox("テンキーを出力します") ★ Application.Run(Tk) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click In_check(1) End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click In_check(2) End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click In_check(3) End Sub : : :

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

  • ベストアンサー
回答No.4

> Partial Class Tenkey > Inherits System.Windows.Forms.UserControl 上記を見ると、Tenkeyクラスは、FormじゃなくてUserControlとして作成されていますね。 ということは、 Dim frm As New Form frm.ClientSize = New System.Drawing.Size(500, 500) Tk.Size = New System.Drawing.Size(500, 500) frm.Controls.Add(Tk) frm.Show() みたいに、フォームを生成してコントロール追加のコードを書けば何か表示されるかな?

gge00741
質問者

補足

ありがとうございます!!! ついに、ついに一瞬ですが表示されました。 表示されたフォームが一瞬で消えるため、frm.Show()ではなく従来の Application.Run(frm) とすることで、目的が達成できました。 ただ > Partial Class Tenkey > Inherits System.Windows.Forms.UserControl のUserContorollは、フォーム作成時に自分で何か指定したから、こうなったのでしょうか? (UserContorollとなっている場合は、「フォームを再度定義して、それに自分の作ったものを 継承?させて表示させればよい」とも理解できました) ですが、自動的にその指定にならないのでしょうか?または、UserControllの部分を 自分で何かに変えてやれば、上記の対応をしなくても自分のフォームをそのまま使えるのでしょうか?

その他の回答 (4)

回答No.5

> フォーム作成時に自分で何か指定したから、こうなったのでしょうか? そうですね。ソリューションエクスプローラーからの追加のメニューを見ると、Form と UserControl が隣り合っているので、間違えてクリックしたのでしょう。間違えないように気を付けてね。

gge00741
質問者

お礼

質問をフォローしていただき、ありがとうございました。 なるほど、自分でユーザフォームを間違えて選択した可能性が高いです。 3日間悩んだ問題が解決しました!勉強にもなりました。 本当にありがとうございました!!×3のお礼を言いたいです。

回答No.3

Tk.Designer.vb というファイルが自動生成されているはずですが、それをメモ帳で開いて内容を補足にコピペしてもらえますか?その内容から何かわかるかもしれません。

gge00741
質問者

お礼

いつも回答コメントを頂きありがとうございます。 補足は1回答につき1回のため、失礼とは思いますが、残りをここに貼り付けること、お許しください。 (文字数制限のため、 ボタン2~9の処理を削除しています) ' 'Button10 ' Me.Button10.BackColor = System.Drawing.Color.DarkSalmon Me.Button10.Font = New System.Drawing.Font("メイリオ", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) Me.Button10.ForeColor = System.Drawing.SystemColors.ActiveCaptionText Me.Button10.Location = New System.Drawing.Point(3, 279) Me.Button10.Name = "Button10" Me.Button10.Size = New System.Drawing.Size(95, 95) Me.Button10.TabIndex = 9 Me.Button10.Text = "0" Me.Button10.UseVisualStyleBackColor = False ' 'TextBox1 ' Me.TextBox1.Font = New System.Drawing.Font("MS UI Gothic", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) Me.TextBox1.Location = New System.Drawing.Point(63, 379) Me.TextBox1.Name = "TextBox1" Me.TextBox1.Size = New System.Drawing.Size(180, 26) Me.TextBox1.TabIndex = 12 ' 'Label1 ' Me.Label1.Font = New System.Drawing.Font("メイリオ", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) Me.Label1.Location = New System.Drawing.Point(3, 382) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(54, 26) Me.Label1.TabIndex = 13 Me.Label1.Text = "西暦" ' 'Label2 ' Me.Label2.Font = New System.Drawing.Font("メイリオ", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) Me.Label2.Location = New System.Drawing.Point(244, 382) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(38, 26) Me.Label2.TabIndex = 14 Me.Label2.Text = "年" ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.BackColor = System.Drawing.Color.Tan Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.TextBox1) Me.Controls.Add(実行) Me.Controls.Add(クリア) Me.Controls.Add(Me.Button10) Me.Controls.Add(Me.Button9) Me.Controls.Add(Me.Button8) Me.Controls.Add(Me.Button7) Me.Controls.Add(Me.Button6) Me.Controls.Add(Me.Button5) Me.Controls.Add(Me.Button4) Me.Controls.Add(Me.Button3) Me.Controls.Add(Me.Button2) Me.Controls.Add(Me.Button1) Me.ForeColor = System.Drawing.SystemColors.ActiveCaptionText Me.Name = "Form1" Me.Size = New System.Drawing.Size(285, 417) Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents Button2 As Button Friend WithEvents Button3 As Button Friend WithEvents Button4 As Button Friend WithEvents Button5 As Button Friend WithEvents Button6 As Button Friend WithEvents Button7 As Button Friend WithEvents Button8 As Button Friend WithEvents Button10 As Button Friend WithEvents TextBox1 As TextBox Friend WithEvents Label1 As Label Friend WithEvents Label2 As Label Friend WithEvents Button9 As Button Friend WithEvents Button1 As Button End Class

gge00741
質問者

補足

ありがとうございます。 Tk.Designer.vb はなかったのでTenkey.Designer.vbを下記に貼り付けます。 ただ4000文字以降、投稿ができないため、同じようなボタン2~9のボタン処理を削除し まずは前半を送付いたします。よろしくお願いします。 <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> Partial Class Tenkey Inherits System.Windows.Forms.UserControl 'UserControl1 は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。 <System.Diagnostics.DebuggerNonUserCode()> Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Windows フォーム デザイナーで必要です。 Private components As System.ComponentModel.IContainer 'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。 'Windows フォーム デザイナーを使用して変更できます。 'コード エディターを使って変更しないでください。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Dim クリア As System.Windows.Forms.Button Dim 実行 As System.Windows.Forms.Button Me.Button1 = New System.Windows.Forms.Button() Me.Button2 = New System.Windows.Forms.Button() Me.Button3 = New System.Windows.Forms.Button() Me.Button4 = New System.Windows.Forms.Button() Me.Button5 = New System.Windows.Forms.Button() Me.Button6 = New System.Windows.Forms.Button() Me.Button7 = New System.Windows.Forms.Button() Me.Button8 = New System.Windows.Forms.Button() Me.Button9 = New System.Windows.Forms.Button() Me.Button10 = New System.Windows.Forms.Button() Me.TextBox1 = New System.Windows.Forms.TextBox() Me.Label1 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() クリア = New System.Windows.Forms.Button() 実行 = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'クリア ' クリア.BackColor = System.Drawing.Color.LightGray クリア.Font = New System.Drawing.Font("メイリオ", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) クリア.Location = New System.Drawing.Point(95, 279) クリア.Name = "クリア" クリア.Size = New System.Drawing.Size(54, 95) クリア.TabIndex = 10 クリア.Text = "消去" クリア.UseVisualStyleBackColor = False AddHandler クリア.Click, AddressOf Me.クリア_Click ' '実行 ' 実行.BackColor = System.Drawing.Color.LightYellow 実行.Font = New System.Drawing.Font("メイリオ", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) 実行.Location = New System.Drawing.Point(145, 279) 実行.Name = "実行" 実行.Size = New System.Drawing.Size(137, 95) 実行.TabIndex = 11 実行.Text = "実行" 実行.UseVisualStyleBackColor = False AddHandler 実行.Click, AddressOf Me.実行_Click ' 'Button1 ' Me.Button1.BackColor = System.Drawing.Color.DarkSalmon Me.Button1.Font = New System.Drawing.Font("メイリオ", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(128, Byte)) Me.Button1.ForeColor = System.Drawing.SystemColors.ActiveCaptionText Me.Button1.Location = New System.Drawing.Point(3, 188) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(95, 95) Me.Button1.TabIndex = 0 Me.Button1.Text = "1" Me.Button1.UseVisualStyleBackColor = False ' ' ボタン2~9迄を削除しました。

回答No.2

じゃあ、 Tk.Show() の次に Tk.WindowState = FormWindowState.Maximized でどうかな?

gge00741
質問者

補足

ありがとうございます。 やってみました。 今度は、追加したTk.WindowState = FormWindowState.Maximizedの行で、 エラー BC30456 'WindowState' は 'Tenkey' のメンバーではありません。 win_form_app C:\Users\xxxxxx\source\repos\win_form_app\win_form_app\Tenkey.vb と、コンパイラエラーとなります。 フォームのどこかおかしいのでしょうか? Tenkey.vb[デザイン]は、ツールボックスの部品のボタンで作っています。

回答No.1

Dim Tk As New Tenkey の次の行に Tk.Show() が必要かな?

gge00741
質問者

補足

ご回答ありがとうございます。 コンパイルエラーとなるため★の行をコメントアウトし、ご指摘のようにTk.Show()もいれてみましたが、やはり表示されません。(msgboxの”テンキーを出力します”はでます) そもそも、Application.Run(Tk)で、オーバーロードのエラーになるのは もう、フォームが読み込まれているからでしょうか?(ならなぜ出力されないか不思議です)

関連するQ&A

  • C#での書き方

    vb.netでは別のイベントを呼び出すとき下記のような書き方ができたのですが、C#ではどう書くんでしょうか? (ボタン2を押したらボタン1の処理が走る) Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Button1_Click(sender, e) End Sub

  • VB2013でのプログラム作成でつまづきました

    初めまして ご質問です 会社にて、職場改善のため VB2013でプログラムを作成していますが PCに詳しいのが自分しかいなく、指名されました。。。 もちろん自作PCとか作れるぐらいですが プログラムなんてやったことないし困っています 職場にプログラム専門の方がいるので教育を受けていますが 2.3回教えてもらって  「windowsの電卓を作ろう」と言われました 電卓作成は、初心者用の題材らしいですが とりあえず教えてもらった事を駆使し まずは、テキストボックスとテキストボックスに数字を入れ その二つを +や-ボタンを押し =ボタンを押すと、3つ目のテキストボックスに表示させるという 簡単なプログラムは、なんとかできましたが windowsぽくすると 例 11 + 12 - 9 とテキストに表示され =ボタンを押すと 表示が消え 計算結果が表示されます いまの問題 ・整数と文字列を表示させ、計算だけさせる ・変数宣言、IF、Serectしか教わってない(それだけでできる言われた笑) ・まだ、いまいちわかっていないため 詳しく知りたい 無論、教えてもらったコードをそのまま使いたいわけじゃなく どーいう流れで、どーいう風にというのを理解したいです 結局は自分が理解して、少しずつやらないといけないので 詳しい方、教えてください。 現在なにもできてないコードです ここにどう埋めるか教えてほしいです ------------------------------------------------------------------------------ Option Explicit On Public Class Form Public oboe As String '押されたボタンが数値以外を覚える変数 Public befor As String '押されたボタンが数値の場合 覚える変数 Public anser As Integer ' 計算結果を保存する 変数 Public number As Integer '入力された数値を保存する 変数 Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '1 befor = "1" ans.Text &= "1" End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '2 befor = "2" ans.Text &= "2" End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '3 befor = "3" ans.Text &= "3" End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 'たし算 oboe = "+" ans.Text &= "+" number = befor + ans.Text End Sub Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click '掛け算 End Sub Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click '計算 End Sub Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click 'CLEAR End Sub Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click '引き算 End Sub Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click '割り算 End Sub Private Sub ans_TextChanged(sender As Object, e As EventArgs) Handles ans.TextChanged

  • VBの記述。サブや関数のコードを束ねる

    VBの記述でsubやfunctionの上の単位でまとめる記述があったように思えますが、久々で思い出せません。 クラスの構成だとかではなくコメントレベルの操作です。 □フォームの操作関係  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load   ' code  End Sub  Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed   ' code  End Sub □ボタンの操作関係  Private Sub Button_Close_Click(sender As Object, e As EventArgs) Handles Button_Close.Click   Me.Close()  End Sub  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   ' code  End Sub サブの頭のところクリックしたら、コードが見えたり隠れたりするように、 記述ブロックの頭のところをクリックすると、記述ブロック全体のコードが見えたり隠れたりしたような。。。 なんというヤツでしたっけ?

  • フォーム上の任意のコントロール上でのイベントをまとめてハンドリングする方法

    .NETにおいて、フォーム上に配置されたコントロールで発生したイベントを、各コントロールごとではなくて、まとめてハンドルする方法はないでしょうか。 例えば次のようなフォームがあります。 (Button1, Button2, Button3は、フォームに配置されたボタンとします) Public Class MyForm   Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click   End Sub End Class ボタンが3つ程度の場合はこれで良いと思うのですが、例えば(極端に言えば)ボタンが100個ある場合、 Handles Button1.Click, Button2.Click, (途中省略.....) Button100.Click と書くしかないのでしょうか。 後で対象コントロールが増えたり減ったりした場合に間違いが起こりそうなので、このような書き方は避けたいです。 フォーム上のどのコントロールでも構わないからとにかくクリックイベントが発生したことを知るための方法はないでしょうか。 例えば次のようなかんじでハンドリングできないでしょうか。 Private Sub All_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォーム上の任意のコントロールでのClickイベント End Sub (環境はVB.NET2005です)

  • C++でメッセージボックスを表示したい

    C++でメッセージボックスを表示したい フォーム上にbutton1を設置しました。 クリックして、メッセージボックスを表示したいのですがどうすればいいのかわかりません。 vb.netで言う Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("test") End Sub をC++で書くとどうなるんですか? button1をダブルクリックして private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { } }; を表示させたのですが、どこにMessageBoxを入れればいいのか教えてください。 よろしくお願いします。

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。

  • WebBrowserについて

    VB2005で、WebBrowserを使おうとしたところ次のような問題が発生しました。 フォームに、WebBrowserを貼り付けてボタンをクリックしたところsubの途中でStopさせるとWebBrowserに表示されません。どうしてでしょうか?教えてください。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/") End Sub の状態だと表示されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate("http://www.goo.ne.jp/")     Stop End Sub で止めると表示されません。 教えていただけないでしょうか?宜しくお願い致します。

  • 他のFormのクリックイベント

    教えてください! 他のFormのクリックイベントを実行できますか? Form2のButton2をクリックした時に、Form1の「Button1_Click」を実行させることができますか? 出来るとしたら、Form2の「Button2_Click」にはどのように記載したらいいのでしょうか? [Form1]より Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ [Form2]より Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ End Sub 宜しくお願いします。

  • vb2010 Sleepを使うと調子が悪くなる

    次のプログラムでButton1を押さないで×を押すと仕事を残して終了した事になり,PCの調子が悪くなります。 なんとか回避できないでしょうか。 Public Class Form1 Private ExitFlag As Boolean = False Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click For I = 1 To 10000 System.Threading.Thread.Sleep(1000) Application.DoEvents() '他のWindows操作を可能にするため If ExitFlag Then Exit For Next ExitFlag = False MsgBox("中止されました") End Sub Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click ExitFlag = True End Sub End Class

  • VBのこのコードの意味を教えてください。(至急)

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click このコードの意味を教えてください。 よろしくお願いします。

専門家に質問してみよう