フォームを画面のど真ん中に表示させる方法

このQ&Aのポイント
  • フォームを画面の真ん中に表示させる方法について説明します。
  • FormStartPosition.CenterScreenfを使用すると、波線がひかれます。
  • 真ん中に表示させるためにはFormStartPosition.Manualを使用し、Locationを指定します。
回答を見る
  • ベストアンサー

フォームを画面のど真ん中に表示させたいのですが

フォームを画面のど真ん中に表示させたいのですが、 http://dobon.net/vb/dotnet/form/startposition.html を見たのですがコードの書き方がよくわかりません。 Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim f As New Form1() 'フォームを画面の真ん中に表示する f.StartPosition = FormStartPosition.CenterScreenf.Show() End Sub End Class こうすると、「FormStartPosition.CenterScreenf」の部分に波線がひかれます。 Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Me.StartPosition = FormStartPosition.Manual Me.Location = New Point(0, 0) End Sub End Class これで左は時に表示する事は出来るのですが、真ん中に表示させるにはどうすればいいでしょうか?

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

Formのコード Form1.vbの中最後に Public sub new[Enter] で Form1のコンストラクタを作成します   Public Sub New()     ' この呼び出しは、Windows フォーム デザイナで必要です。     InitializeComponent()     ' InitializeComponent() 呼び出しの後で初期化を追加します。   End Sub といったスケルトンを生成します そこで     Me.StartPosition = FormStartPosition.CenterScreen を『' InitializeComponent() 呼び出しの後で初期化を追加します。』の行の次に記述して見ましょう 質問される場合に 開発環境や実行環境を明記したほうがいいかもしれません 例 : WinXP PRO/SP3 VB2005 とか VB2010Express など メニューの操作など 微妙に違ったり、初期設定を変更しなくてはいけない場合などもありますので 『すべてのファイルを表示』は メインメニューの中の プロジェクトの項目にあります VB2010の場合 ツール > 設定が 基本設定になっていると 表示されません ですが ソリューションエクスプローラのツールバーの 左から2番目が それに当たります

HFBCYPIL7
質問者

お礼

回答ありがとうございました。

その他の回答 (5)

  • angel_Z
  • ベストアンサー率66% (12/18)
回答No.6

SetBoundsの/2の数値を変更することで、位置が変えられますが、 Form1のプロパティのStartPositionを、CenterScreenに変更するれば、Loadに書かなくても済みますよ。 後は、No5のredfox63さんの回答で、デザイナに追加する事でできました。

HFBCYPIL7
質問者

お礼

回答ありがとうございました。

  • angel_Z
  • ベストアンサー率66% (12/18)
回答No.4

すいません、訂正です。 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load SetBounds((Screen.PrimaryScreen.Bounds.Width - Width) / 2, (Screen.PrimaryScreen.Bounds.Height - Height) / 2, Width, Height) End Sub

HFBCYPIL7
質問者

お礼

ど真ん中に表示できました! ただ、上下の真ん中には出来ないのでしょうか? TOPとか使えば可能のような気がしますが、よくわからないので教えていただけますか? 上下左右のど真ん中に表示させたいです。 ご回答よろしくお願いします。

  • angel_Z
  • ベストアンサー率66% (12/18)
回答No.3

これではどうでしょうか? Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load SetBounds((Screen.PrimaryScreen.Bounds.Width - Width) / 2, (Screen.PrimaryScreen.Bounds.Height - Height) / 2, Width, Me.Height) End Sub

HFBCYPIL7
質問者

お礼

上にてお礼をします。

回答No.2

まずはデザイナで操作してみた方が良いでしょう。 すべてのファイルを表示すると,Form1.vbの下にForm1.Designer.vbというファイルが付いていて, こちらを見るとデザイナでの操作がコードで記録されています。 で…… > Dim f As New Form1() 'フォームを画面の真ん中に表示する 新しいForm1を作ってそれを画面の真ん中に表示させたいのですか。 そうでないならば,New Form1で作ったインスタンスではなく,Meでアクセスする (or 省略する) 必要があります。 # Loadイベント中でNewしてShowしたらStackOverflowExceptionが発生しそうですが。 > f.StartPosition = FormStartPosition.CenterScreenf.Show() 改行が抜けています。 f.StartPosition = FormStartPosition.CenterScreen f.Show() のように,2行に書く (or :で区切る) 必要があります。 ただ,前述のようにそもそもfに対してやる必要があるのか,という問題はあって, Loadイベントは StartPosition = FormStartPosition.CenterScreen の1行だけでよいのではないかと思います。

HFBCYPIL7
質問者

お礼

デザイナというもので確認しようと思ったのですが 「すべてのファイルを表示」とはどうやればいいのでしょうか? Form1.Designer.vbを表示させる方法がわかりません。 ソリューションエクスプローラーを見ましたが、Form1.Designer.vbは見つけられませんでした。 >新しいForm1を作ってそれを画面の真ん中に表示させたいのですか。 既にフォームはあるので、違います。 StartPosition = FormStartPosition.CenterScreen だけにしてみましたが、ど真ん中には表示されませんでした。 やや斜め左下に表示しされます。 Dim f As New Form1() f.StartPosition = FormStartPosition.CenterScreen f.Show() にすると、大量のフォームが開いてしまいます。 Me.StartPosition = FormStartPosition.CenterScreen Me.Show() にしても、 StartPosition = FormStartPosition.CenterScreenと同じく、やや斜め左下に表示しされました。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>こうすると、「FormStartPosition.CenterScreenf」の部分に波線がひかれます。 なんか、余計な文字が入っていませんか? CenterScreenfではなくCenterScreenだと思われますが……。

HFBCYPIL7
質問者

お礼

あ!本当だ!改行されてませんでした。

関連するQ&A

  • 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 よろしくお願いします。

  • VB2010でMDI親フォームから子フォームを表示

    VB2010でソフトを作っております。 MDI親フォームから子フォームを表示させたいのですが…。 過去に少しだけVB6を使っていたことがありますが、クラスという概念に苦労しております インスタンスや初期化といったところをうまく扱えばとは思うのですが、よろしくご指導お願いいたします。 1.MDI親フォーム(Form1)のボタンを押し、子フォーム(Form2)を表示させる 2.子フォームが表示されていなかったら表示させる 3.子フォームが表示されていたら何もしない これだけの事ですがずいぶん悩んでおります。 全コードがこれです。 Public Class Form1 Private f2 As New Form2 Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.IsMdiContainer = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fChild As Form() = Me.MdiChildren For Each f As Form In fChild If f.Text = "Form2" Then Exit Sub End If Next f2 = New Form2 f2.MdiParent = Me f2.Show() f2.Activate() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If f2 Is Nothing OrElse f2.IsDisposed Then f2 = New Form2 f2.MdiParent = Me End If f2.Show() f2.Activate() End Sub End Class ボタン1でもボタン2でも、期待する動作はするのですが、 ボタン1ではアクティブになっているフォームの名前を力技で取得している気がして… ボタン2では子フォーム(Form2)をすでに表示している状態でもさらにShowをしているのが気に入らなくて… もっとスマートな方法がありましたら、ご指導お願いします。

  • このコードはどこが間違っていますか?(至急)

    急ぎのため再度の質問失礼します。 (zのn乗)-(xのn乗+yのn乗)の計算をさせて、答えが0のときにメッセージを表示したいのですが、どのようなコードを書けばいいのでしょうか? Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click x = TextBox1.Text y = TextBox2.Text z = TextBox3.Text n = TextBox4.Text TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) If (TextBox5 .Text= 0) Then Label6.Visible = True End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click End Sub End Class このコードだと答えが必ず-1になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • クラス間(Form間?)で使える変数の設定方法(VB.NET)

    VB.net(Visual Studio)で現在プログラムの勉強をしています。 現在のスキルとしまして、変数,引数,グローバル変数,サブルーチン等を勉強しました。 残念ながら、他のプログラム言語等は勉強した事がありません。 <目的> 現在1つのアプリケーション内でForm1,Form2,Form3と作り Form1のText.Boxに入力された値を変数としてボタンを押すと各Formのラベルに 変数を渡し表示させたいと考えております。 <問題点> しかしプログラムを作っても波下線が出てプログラムのデバックが開始できません。 おそらくどこかがおかしいと思うのですが判りません。 <質問内容> 下記のサンプルの中でおかしいコードや根本からやり直す必要なコードがあれば ご教授願えますでしょうか? <サンプル> -----Form1------ Public Class Form1 Public TextBox1noNakami as strig Private Sub Button1_click(Byval sender As System.Object,Byval e AS System.EventArgs) Handles Button1_click TextBox1noNakami = TextBox1.text Form2.show() Form3.show() End Sub End Class -----Form2----- Public Class Form2 Public TextBox1noNakami as Form1 Private Sub Form2_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load label1.text = TextBox1noNakami End Sub End Class -----Form3----- Public Class Form3 Public TextBox1noNakami as Form1 Private Sub Form3_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load label2.text = TextBox1noNakami End Sub End Class

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • vb.netでForm_Loadの終了判定について

    vb.netのWindowsApplicationでForm_Loadの終了判定ってどうやっていますか? Visual Studio 2015 visual Basic .net TextChangedイベントなどが、Form_Loadの前に走って 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 になってしまいがちですが、 これを回避するために、とりあえず下記の対応をしましたが、 スイッチをONにするハンドルはMyBase.Loadで良かったのか、 普通はどうするのか、 などをご教授ください。 <暫定対応> Dim SW_FormLoad As Boolean Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load  処理  :  SW_FormLoad = True End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged  If Not SW_FormLoad Then Return  処理 End Sub

  • D&Dでファイルパスを取得

    フォームにD&Dでファイルパスを取得する プログラムを作ろうと思っているのですが、うまくいきません。 ファイルをフォームにドラッグしても禁止マークがでて イベントハンドラがイベントをキャッチしてくれないようです。 なにが問題かアドバイスを頂けないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.AllowDrop = True End Sub Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.Copy End If End Sub Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop Dim FileName As String FileName = e.Data.GetData(DataFormats.FileDrop)(0) MsgBox(FileName) End Sub End Class ---- 開発環境:VS2005 pro OS:WindowsVista

  • コンボボックスのインデックス値取得について

    Visual Stdio 2008 Express Editionを使ってVBの勉強をしています。 コンボボックスのことについてお伺いしたいことがあり、 投稿させていただきました。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With ComboBox1 .Items.Add("りんご") .Items.Add("みかん") .Items.Add("なし") End With End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("コンボボックスで選択した項目のインデックス") End Sub End Class コンボボックスで「みかん」を選択し、 ボタンを押下したときに、「みかん」のインデックス値として 「1」を出力させたいのですが、この表示方法がわからない状態です。 VB6.0であれば、ItemDataプロパティを使えばうまくいくと 思うのですが、VisualStudioだとどのプロパティを用意すれば よろしいのでしょうか。 ご教授の程お願い致します。

  • 「Me」を「Form1」にするとエラーになる理由

    VB2008です。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "a" Form1.Text = "a" ’←「Form1.Text」に波線ができる。 End Sub End Class というように、 「Me」を「Form1」にすると 「既定のインスタンスからそれ自体を参照できません。'Me' を使用してください。」 となります。 VBAなら「Me」を「Form1」にしてもエラーにならないのに、 どうしてVBだとエラーになるのでしょうか?

  • focusメソッドを使ってもカーソルが点滅しない

    フォームをロードし、下記のようにしてもカーソルが点滅しません。その解決方法を教えてください。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Focus() End Sub