C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

新しいフォームの作成


(過去ログ 7 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■7281 / inTopicNo.1)  新しいフォームの作成
  
□投稿者/ 圭 二等兵(6回)-(2006/10/06(Fri) 09:29:06)

分類:[VB.NET] 


分類:[VB.NET] 

少し、行き詰まっていることがあります。内容は以下の通りです。
 1.Form1(メインのフォームで)とForm2(CheckBoxが2個と決定ボタン)がある。
 2.Form1にはdatagridとmenuがあり、メニューからForm2を呼出しCheckBoxのチェックを外す
  ことによってForm1のdatagridの列を見えなくしたい。
 3.CheckBoxは初めチェックがついた状態で、Checkを外すとForm1にきちんと反映される。
 4.ところが、再びForm2を呼び出すとForm2のチェックの状態が初期状態に戻ってしまっている。
↓に簡略化したコードを示しますので、どのようにしたらForm2の状態がきちんと更新されるか
お願い致します。


*********************************************************************************************************
Public Class Form1
Inherits System.Windows.Forms.Form
------------------------------------------
'Windowsフォームデザイナで生成されたコード
------------------------------------------
'-----
'中略
'-----
Private Sub Menu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu1.Click

Dim fm As New Form2

If fm.pp1 = False Then
cs1.Width = 0 'Form2のCheckBox1のチェックがはずせれたら第1列目を消す
End If

If fm.pp2 = False Then
cs2.Width = 0 'Form2のCheckBox2のチェックがはずせれたら第2列目を消す
End If
End Sub
End Class
---------------------------------------------------------------------------------------------------------


'Form1のメニューからForm2を呼び出す
Public Class Form2
Inherits System.Windows.Forms.Form
------------------------------------------
'Windowsフォームデザイナで生成されたコード
------------------------------------------
Public Property pp1 As String
Get
Return CheckBox1.Checked
End Get
Set(ByVal Value As String)

End Set
End Property

Public Property pp2 As String
Get
Return CheckBox2.Checked
End Get
Set(ByVal Value As String)

End Set
End Property

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CheckBox1.Checked = True '初期状態ではCheckBox1のチェックは付いた状態
CheckBox2.Checked() = True '初期状態ではCheckBox2のチェックは付いた状態
End Sub

End Class
*************************************************************************************************************


0
引用返信 編集キー/
■7282 / inTopicNo.2)  Re[1]: 新しいフォームの作成
□投稿者/ ROY 一等兵(30回)-(2006/10/06(Fri) 09:38:39)

分類:[VB.NET] 


Private Sub Menu1_Click
の中で新しいインスタンスを作成しているからではないでしょうか
Dim fm As New Form2 のおく位置を変えてみたら?



0
引用返信 編集キー/
■7284 / inTopicNo.3)  Re[2]: 新しいフォームの作成
□投稿者/ ダッチ 伍長(40回)-(2006/10/06(Fri) 10:10:23)

分類:[VB.NET] 

> 2.Form1にはdatagridとmenuがあり、メニューからForm2を呼出し・・・

Form2 を呼び出しとは表示するということですか。
処理には表示するコードが見つかりませんが
ちょっと呼び出しの意味がわかりません。

> 3.CheckBoxは初めチェックがついた状態で、Checkを外すとForm1にきちんと反映される。

Check をはずすだけで Form1 に反映されるのですか。
それともはずした後に Menu1 をクリックするのですか。

> 4.ところが、再びForm2を呼び出すとForm2のチェックの状態が初期状態に戻ってしまっている。

Form2 を表示したら Form1 の状態を Form2 に設定してやる必要があります。

全体的にちょっと動きがわかりません。
もうすこし詳しくお聞き願いますか。

0
引用返信 編集キー/
■7305 / inTopicNo.4)  Re[3]: 新しいフォームの作成
□投稿者/ 圭 二等兵(7回)-(2006/10/06(Fri) 12:56:45)

分類:[VB.NET] 

早速のご返信ありがとうございます。

>Form2 を呼び出しとは表示するということですか。
処理には表示するコードが見つかりませんが
ちょっと呼び出しの意味がわかりません。
Form2 を表示したら Form1 の状態を Form2 に設定してやる必要があります。

メニューを押すとForm2が開くようにしています。


>Check をはずすだけで Form1 に反映されるのですか。
それともはずした後に Menu1 をクリックするのですか。

Form2の中にある決定ボタンがありまして、それを押すとForm1に反映されます。
ちなみに決定ボタンのプロパティのDialogResultをONにしてあります。


0
引用返信 編集キー/
■7310 / inTopicNo.5)  Re[4]: 新しいフォームの作成
□投稿者/ ダッチ 伍長(41回)-(2006/10/06(Fri) 15:05:51)

分類:[VB.NET] 

No7305に返信(圭さんの記事)
> 早速のご返信ありがとうございます。
>
> >Form2 を呼び出しとは表示するということですか。
> 処理には表示するコードが見つかりませんが
> ちょっと呼び出しの意味がわかりません。
> Form2 を表示したら Form1 の状態を Form2 に設定してやる必要があります。
>
> メニューを押すとForm2が開くようにしています。
>
>
> >Check をはずすだけで Form1 に反映されるのですか。
> それともはずした後に Menu1 をクリックするのですか。
>
> Form2の中にある決定ボタンがありまして、それを押すとForm1に反映されます。
> ちなみに決定ボタンのプロパティのDialogResultをONにしてあります。
>

動きが見えてきました。
やっぱり Form2 を表示したら Form1 の状態を Form2 に設定してやる必要があります。
Form2 のインスタンスを生成した後に
pp1 と pp2 に Form1 の状態を設定すれば出来ます。

方法としては pp1 と pp2 の Set に CheckBox の Checked を設定するコードを記載すれば、
望みどおりの結果になると思います。


0
引用返信 編集キー/
■7311 / inTopicNo.6)  Re[5]: 新しいフォームの作成
□投稿者/ ダッチ 伍長(42回)-(2006/10/06(Fri) 15:09:15)

分類:[VB.NET] 

一つ言い忘れました。

Form2_Load の中で Checked を設定しては
表示するときに必ずチェック状態になってしまいますので
Form2_Load でやっていることを
コンストラクタに移動する必要もありました。

この辺はデバックしながら確認してみてください。

0
引用返信 編集キー/
■7312 / inTopicNo.7)  Re[6]: 新しいフォームの作成
□投稿者/ 圭 二等兵(8回)-(2006/10/06(Fri) 15:13:40)

分類:[VB.NET] 

すみません。さきほどの件ですが、↓に対しまして、
>Form2 を呼び出しとは表示するということですか。
処理には表示するコードが見つかりませんが
ちょっと呼び出しの意味がわかりません。


Form1のコード中に
  fm.ShowDialog(Me)
このコードをここに書くの忘れてました。

0
引用返信 編集キー/
■7314 / inTopicNo.8)  Re[7]: 新しいフォームの作成
□投稿者/ 圭 二等兵(9回)-(2006/10/06(Fri) 15:21:39)

分類:[VB.NET] 

>Form2_Load の中で Checked を設定しては
 表示するときに必ずチェック状態になってしまいますので
 Form2_Load でやっていることを
 コンストラクタに移動する必要もありました。

確かにそうですね。やってみます。

0
引用返信 編集キー/
■7380 / inTopicNo.9)  Re[8]: 新しいフォームの作成
□投稿者/ 圭 二等兵(10回)-(2006/10/10(Tue) 08:51:44)

分類:[VB.NET] 

>Form2 のインスタンスを生成した後に
>pp1 と pp2 に Form1 の状態を設定すれば出来ます

すみませんが、これのやり方とコンストラクタへの移動が解りません。
参考のHPでもあればよろしくお願いします。



0
引用返信 編集キー/
■7382 / inTopicNo.10)  Re[9]: 新しいフォームの作成
□投稿者/ ダッチ 伍長(45回)-(2006/10/10(Tue) 10:07:05)

分類:[VB.NET] 

No7380に返信(圭さんの記事)
> >Form2 のインスタンスを生成した後に
> >pp1 と pp2 に Form1 の状態を設定すれば出来ます
>
> すみませんが、これのやり方とコンストラクタへの移動が解りません。
> 参考のHPでもあればよろしくお願いします。
>

プロパティの使い方は
どぼんさんのサイトはどうでしょうか。
http://dobon.net/vb/dotnet/form/accessanotherformdata.html

コンストラクタはわかりますでしょうか。
クラス名と同じメソッドがコンストラクタです。
そこに Form_Load で書いていたコード
CheckBox1.Checked = True '初期状態ではCheckBox1のチェックは付いた状態
CheckBox2.Checked() = True '初期状態ではCheckBox2のチェックは付いた状態
を書けばいいだけです。

Form_Load の処理を消すのを忘れずに。


0
引用返信 編集キー/
■7383 / inTopicNo.11)  Re[10]: 新しいフォームの作成
□投稿者/ 圭 二等兵(11回)-(2006/10/10(Tue) 10:20:24)

分類:[VB.NET] 

毎度ありがとうございます。
ダッチさんに教えて頂いたHPと
http://shinshu.fm/MHz/88.44/archives/0000039564.html
を参考にしてやってみます!

0
引用返信 編集キー/
■7387 / inTopicNo.12)  Re[11]: 新しいフォームの作成
□投稿者/ 圭 二等兵(12回)-(2006/10/10(Tue) 13:32:46)

分類:[VB.NET] 

いろいろコードを変えたり、加えたりしましたがなかなかうまくいかないです。Form1とForm2でIF文が重なりあっておかしくなっていると思うのですが
先に進みません。よろしくお願いします。
ちなみに↓記箇所で「'System.NullReferenceException' のハンドルされていない例外が SeiKoteiHyo.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。」
となっています。

*********************************************************************************************************
Public Class Form1
Inherits System.Windows.Forms.Form
------------------------------------------
'Windowsフォームデザイナで生成されたコード
------------------------------------------
'-----
'中略
'-----
Private Sub Menu1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu1.Click

Dim fm As New Form2(cs1.width, cs2.width)

If fm.ShowDialog=DialogResult.Cancel Then 'キャンセルされた時
Exit Sub

If fm.pp1 = False Then
cs1.Width = 0 'Form2のCheckBox1のチェックがはずせれたら第1列目を消す
End If

If fm.pp2 = False Then
cs2.Width = 0 'Form2のCheckBox2のチェックがはずせれたら第2列目を消す
End If
End Sub
End Class
---------------------------------------------------------------------------------------------------------


'Form1のメニューからForm2を呼び出す
Public Class Form2
Inherits System.Windows.Forms.Form
------------------------------------------
'Windowsフォームデザイナで生成されたコード
------------------------------------------
Public Property pp1 As String
Get
Return CheckBox1.Checked
End Get
Set(ByVal Value As String)

End Set
End Property

Public Property pp2 As String
Get
Return CheckBox2.Checked
End Get
Set(ByVal Value As String)

End Set
End Property

Public Sub New(Byval Value1 As Integer,Byval Value2 As Integer)

If Value1<>0 Then
CheckBox1.Checked = True     ←ここで例外
End If

If Value2<>0 Then
CheckBox2.Checked = True
End If

End Sub


0
引用返信 編集キー/
■7389 / inTopicNo.13)  Re[12]: 新しいフォームの作成
□投稿者/ ダッチ 伍長(46回)-(2006/10/10(Tue) 15:12:57)

分類:[VB.NET] 

> ------------------------------------------
> 'Windowsフォームデザイナで生成されたコード
> ------------------------------------------
ここに隠れている

Public Sub New()
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。

End Sub

このコードが呼び出されていない為、
CheckBox1 と CheckBox2 のインスタンスが生成されていません。
そのため「System.NullReferenceException」の例外が発生します。

それとプロパティについてですが、
Public Property pp1 As String
  Get
    Return CheckBox1.Checked
  End Get
  Set(ByVal Value As String)
    
  End Set
End Property
pp1 の型は「String」です。
CheckBox1.Checked の型は「Boolean」です。
方が一致していませんので一致させましょう。

> コンストラクタはわかりますでしょうか。
> クラス名と同じメソッドがコンストラクタです。
ごめんなさい。C# と勘違いしてました。
VB では New でしたね。

0
引用返信 編集キー/
■7392 / inTopicNo.14)  Re[13]: 新しいフォームの作成
□投稿者/ 圭 二等兵(13回)-(2006/10/10(Tue) 16:27:36)

分類:[VB.NET] 

ありがとうございました。
Public Sub New(Byval Value1 As Integer,Byval Value2 As Integer)

InitializeComponent()
 If Value1<>0 Then
  CheckBox1.Checked = True    
 End If

 If Value2<>0 Then
  CheckBox2.Checked = True
 End If

End Sub

とInitializeComponent()を付け足すことでForm1とForm2の間にきちんと同期がとれるようになりました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -