VB.net2008 設定画面の作成

このQ&Aのポイント
  • VB.net2008で設定画面を作成する方法について質問です。
  • Form1とForm2という二つのフォームを用意して、Form1で使用している設定値クラスをForm2にコピーして設定変更を行い、リターンで返す方法を教えてください。
  • Form1のボタンを押したらForm2を開く動作を実現し、Form2で変更された設定値を受け取る方法を教えてください。
回答を見る
  • ベストアンサー

VB.net2008 設定画面の作成

VB.net2008 設定画面の作成 こんにちは、プログラミングの勉強を行っているのですが。 少し、躓いてしまったのでこちらで質問させてください。 Form1 と Form2 という二つのフォームを用意して。Form1で使用している設定値クラスをForm2にコピーして設定変更を行った後リターンで返すということを考えています。 ですが、どうしてもうまく書けないため、ご助言ください。 -----------------------以下ソース----------------- Public Class Form1 'XMLに設定保存 Private Sub SaveSetthing()  Dim wset as New Setting 'XMLserializerで書き込み ~~~~~~~~~~~~~~~~~~~ End sub   '設定読み込み Private Sub LordSetthing() 'XMLserializerで読み込み  Dim lset as New Setthing ~~~~~~~~~~~~~~~~~~~ End sub EndClass Public Class Setthing Public UserName as String Public Age as Integer ~~~~~~~~~~~~~~~ Public Function Clone() as Setthing Return DirectCast(MyBase.MemberwiseClone,Setthing) End Function End Class ---------------------------------------------- このときに、Form1のボタンを押したらForm2を開く動作で ------------------------------------------------- Private sub ボタンクリック(Bybal*************)  Dim f as Form2 = New Form2(Setthing.Clone) if f.ShowDialog = Windows.Forms.DialogResult.OK then me.Setthing = f.GetValue End if End sub ------------------------------------------------- ↑ここで返り値を受けたいと考えています。 ↓Form2構文 -------------------------------------------------- Public Class form2 Public sub New(ByVal Value as Setthing) InitializeComponent() Dim TempSetthing as Setthing = Value End sub  'ここで、渡された設定値の表示と設定画面で変更された設定の読み込み   Public Function GetValue() As Setthing Return TempSetthing End function End Class -------------------------------------------------- と、大雑把に書き込みましたがこのような感じの処理を行いたいです。 ですが、私の理解が足りない為Form2内でTempSetthing内のデータの読み書きが行えません(宣言できません) 独学で作ったものですので、ここまでの流れがおかしなものになっている可能性もありますが。 「このような処理が行いたい!」というのは伝えれるかとは思います。 Form2内でTempSetthingの値を変更できるようなTextBox等を作成して。代入する形にしたいのですが。 ご教授お願いします・・・

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

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

Form2のGetValueでアクセスできるTempSetthingを Form2のクラスメンバーにしないといけませんよ public Class Form2   Private TempSetthing as Setthing   'と宣言しておいて   Public New( byVal value as Setthing)     InitializeCompornents()     TempSetthing = value   End Sub と初期設定します GetValue側は今のままでいいでしょう

WinterCat-Huyu
質問者

お礼

なるほど、初期設定してから受け取った値を引数として代入すればよかったのですね。 これで進めることが出来そうです。ありがとうございました^^

関連するQ&A

  • VB.NETについての質問なんですが

    SubMainで「Form1」をshowで開き、その「Form1」の中で「Form2」をshowで開いた後、「Form1」だけをCloseで閉じたいのですが、「Form1」をで閉じてしまうとプログラムが終了してしまいます。 Public Class Form1 : :   Private Sub Button1_Click……   Dim frmForm2 as New Form2   frmForm2.Show   Me.Close Sub End End Class 良い方法があればアドバイスをお願いします

  • VB2008で構造体を引数とした時にエラー

    VB2008の勉強を始めて数週間の初心者です。 勉強用にいろいろとプログラムを作っているのですが、 構造体(Structure)を引数で渡して戻り値を取得する Functionを作成してみました。 同一クラス内のPrivate Function の場合は問題ないのですいが、 追加した別クラスに Function を作成したところ 「 型 'TEST_A.Form1.str_IN' の値を 'TEST_A.Class1.str_IN' に変換できません。」 のエラーが表示されてしまいます。 別クラスのFunctionを使用する時、引数には構造体は指定できないのでしょうか? なにか文法上の誤りがあるのでしょうか? 初心者なので変な質問してたらスイマセン。 詳しい方がいらっしゃいましたらよろしくお願いします。 ------------------------------------------------------ Public Class Form1  Public Structure str_IN   Public in_aaa As String  End Structure  Private Sub Button1_Click(ByVal sender As System.Object,  ByVal e As System.EventArgs) ~   Dim stin As New str_IN   '------------------------------------   stin.in_aaa = "aaa"   Label1.Text = Test_Sub(stin) '<------- これはok   '-------------------------------------   Dim cls = New Class1   stin.in_aaa = "aaa"   Label1.Text = cls.CFnk(stin) '<----- エラーになる  End Sub  Private Function Test_Sub(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class ------------------------------------------------------------ Public Class Class1 '新たに作成したクラス  Public Structure str_IN   Public in_aaa As String  End Structure  Public Function CFnk(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class

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

    フォームを画面のど真ん中に表示させたいのですが、 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 これで左は時に表示する事は出来るのですが、真ん中に表示させるにはどうすればいいでしょうか?

  • VB.net(.net framework 3.5 sp1)でフォーム

    VB.net(.net framework 3.5 sp1)でフォーム上に設置したコントロールのプロパティを一括で設定する方法はないでしょうか? 下記は実行しても反映されないのですが、処理のイメージとしてはこんな形です。 Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim test As New Button test.Text = "TEST" test.Top = 0 Me.Button1 = test End Sub End Class

  • VBのfunctionの引数について

    2の Double型と 3の Single型のように送る側と受け取る側の変数の型が 違ってもよいのでしょうか?プログラムはそのまま実行できたのですが・・・・。 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim koku As Integer Dim san As Integer Dim rika As Integer Dim ave As Double------------------------------------1 koku = Val(TextBox1.Text) san = Val(TextBox2.Text) rika = Val(TextBox3.Text) ave = (koku + san + rika) / 3 Label5.Text = Round(ave)-------------------------------2 End Sub Private Function Round(ByVal sngvalue As Single-----3) As Integer Dim intvalue As Integer intvalue = Int(sngvalue + 0.5) Return intvalue End Function End Class

  • bitmapの宣言

    こんばんわ。 bitmapの宣言を最初に行い、途中のサブルーチン内で大きさの変更を行いたいのですが、可能でしょうか? Public Class Form1 Dim BMP As New Bitmap(300, 200) Private Sub このなかで、300*200の指定を行いたいです。 End Sub ちなみに、 Public Class Form1 Dim BMP As Bitmap Private Sub BMP = New Bitmap(300, 200) End Sub などと悪あがきをしましたがダメでした。 良い解決策を教えてください。よろしくお願いします。 バージョンは、.NET 2005です。

  • vb.net Charsメソッドについて

    vs2008、.NET Framework 3.5 にてvb.net の勉強をしているのですが、 下記のような場合にビルドエラーにならないことについて 疑問があります。 Public Class ClassA   Private Sub methodA()     Dim a As String = getString(1) ・・・★   End Sub   Private Function getString() As String     Return "abcdefg"   End Function End ClassA getStringメソッドには引数をとらないもののみが定義 されているので、methodAからgetStringメソッドを呼び出した 場合(★)は、ビルドエラーになると思うのですが、なりません。 a の値は"b"になります。 調べてみたところ、引数に1を設定したことによって、 Charsというメソッドが呼ばれているようなのですが、 それであれば、 Dim a As String = getString().Chars(1) と書くものだと思うのですが…。 こういう書き方もできるんだという話であればそれまでなのですが、 どうも腑に落ちないので、説明できる方がいらっしゃれば 教えていただきたいです。

  • VB6.0のクラスで、自分自身のインスタンスを作成するメリット

    クラスのメソッドで、自分自身のインスタンスを作成している、コードをよく見かけます。 どんなメリットがるのでしょうか? 簡単に、クラスファイルのコードを書きました。 【A.cls】 Option Explicit Dim pstrID As Long Dim pstrName As String Public Function fncCreate() As Object     Set fncCreate = New clsA  '★自分自身のインスタンスを作成する End Function Public Function fncID() As Boolean     pstrName = "ID" End Function Public Function fncName() As Boolean     pstrName = "STRING" End Function Private Sub Class_Initialize()     pstrID = 0     pstrName = "" End Sub

  • VB.NETでのプログラム質問、フォーム上での構造体の引渡し

    こんにちわ。 ただいまVB.NETをやっているのですが、どうしても分からない点があり、プログラムが進みません。 ヒントではなく、答えとして書き込んでいただければ幸いです。 同じプログラム上にForm1とForm2が用意されていて、Form2で構造体を使います。 仮に Private Structure Mypoint Public Name As String Public ID As Integer Public Sex As Double End Structure Private sub~~~ Dim pt As m_Mypoint pt.ID = IDTextBox.Text pt.Name = NameTextBox.Text pt.m_Sex = True End Sub Dim Form1 As New Form(Mypoint) Form1.ShowDialog() として、form2で設定し、form1の方で Private struct Mypoint Public Sub New(ByVal m_Mypoint As String) MyBase.New() InitializeComponent() Mypoint = m_Mypoint として呼び出しているのですが、一向に呼び出せません。 変数とは書き方が違うかも、と思って色々試したり調べたのですが、丸一日分からなくてとまってしまいました。 よろしくお願いします。

  • VB.NETのデリゲートについて

    VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class