- - PR -
Form1に設定したMainMenu1のプロパティをForm2内のコードで変更したい
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-27 13:28
実行したいこと
ログインしていないときは、MainMenu1のログアウトを選択不可状態に また、ログアウトしているときはMainMenu1のログインを選択不可状態にしたい。 状況 Form1にMainMenu1を作ります。 ファイル ヘルプ ... ログイン <<< デザイン(name)を mnuログイン としています。 ログアウト 終了 このプロパティをForm2内のコード(プログラム)で変更したいのですがうまく動作しません。 Form1ではMainMenu1のために特にコードを記述していません。 Form2ではログイン画面を作っており Private frmM As Form1 frmM.mnuログイン.Visible = False などを記述しています。 コンパイル時にはエラーは出ていません。 でも実行しても思った動作で動作してくれずに困っています。 どなたか教えていただけませんでしょうか。よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-07-27 13:55
また、ログインしているときはMainMenu1のログインを選択不可状態にしたい。 の間違いですか?
「うまく動かない」では、どうなったのかが本人以外分かりません。「思った動作で動作してくれずに」どうなったのかが分かりませんので、 ●どうなって欲しい(どうしたい) ●実際どうした ●結果どうなった を書いてください。 Qさんがおかしいと思っている動作が正しい動作の可能性があります。 「実際どうした」も情報が足りません。
これだけでは、実行時に例外が出ませんか? それとも出ているけど書いていないだけですかね。 | ||||||||||||
|
投稿日時: 2004-07-27 14:44
一郎様
早速の回答ありがとうございました。 ●どうなって欲しい(どうしたい) ログインしているときはMainMenu1のログインを選択不可状態にしたい ログアウトしているときはMainMenu1のログアウトを選択不可状態にしたい (一郎様のご指摘どおり、その通りです。) ・Form1 MainMenu1があるメインフォーム Form2 ログインフォーム の2つのフォームを作成しています。 ・Form1にMainMenu1を設定しており、以下のような状態になっています。 ファイル ヘルプ ... ログイン <<< デザイン(name)を mnuログイン としています。 ログアウト <<< Form1がloadされるときmnuログアウト.Visible = False 終了 としているので選択できない ・起動するとForm1が表示されます。ここでMainMenu1にログインを選択すると Form2が表示されます。ここでログイン処理(ID、パスワード入力)して ログイン時にエラーがでないとForm2は消えて、Form1だけが残ります。 このとき、MainMenu1のログインを選択不可状態にしたいのです。 ●実際どうした Form1側 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'メインフォームが開かれたときに処理するもの mnuログイン.Visible = True mnu終了.Visible = True mnuログアウト.Visible = False End Sub Private Sub mnuログイン_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuログイン.Click 'ログイン ' 'ログインフォームを表示 Dim cForm As New Form2 ' Form2のインスタンスを作成 Form2 は データベース接続のためのログインフォーム cForm.MdiParent = Me '親ウインドウを設定 cForm.Show() '子ウインドウを表示 ChildrenForm.Add(cForm) '格納する 'メニューの「ログイン」を操作不可にする mnuログイン.Visible = False End Sub −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Form2側 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDB接続実行.Click Dim cn As New SqlConnection("data source= master....") Try cn.Open() ' Insert code to process data. Catch ex As Exception 'ログイン失敗したとき ' メニューの「ログイン」を操作可に戻す frmM.mnuログイン.Visible = True ' ログインフォームを閉じる Me.Close() ' ログイン失敗のメッセージを表示する MessageBox.Show("ログインに失敗しました") '接続失敗 ' メニューの「ログイン」を操作可に戻す frmM.mnuログイン.Visible = True Finally cn.Close() '接続成功、失敗に関わらず閉じる End Try ' ログインフォームを閉じる Me.Close() End Sub ●結果どうなった ログイン時にエラーが出ずにForm2は消えて、Form1だけが残りますが、 MainMenu1のログインは選択不可状態になったが、ログアウトが 選択不可状態になったままになった。 あと、実行時に例外は出ませんでした。 ご指摘に従い追記しましたが、また不備があれば追記します。よろしくお願いします。 [ メッセージ編集済み 編集者: Q 編集日時 2004-07-27 14:46 ] | ||||||||||||
|
投稿日時: 2004-07-27 15:28
あの〜、mnuログアウトを制御していませんが?
記載漏れですか?
frmM.mnuログイン.Visible = True が、二度実行するようになっているのはなぜ? | ||||||||||||
|
投稿日時: 2004-07-27 15:58
soluna様
返答ありがとうございます。 mnuログアウトを制御していませんが? (回答)投稿時に削りすぎました。すいません。 frmM.mnuログイン.Visible = True が、二度実行するようになっているのはなぜ? (回答)これはミスです。一つは不要です。 Form2側 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDB接続実行.Click Dim cn As New SqlConnection("data source= master....") dbcon = 0 '成功=0 失敗=1 Try cn.Open() ' Insert code to process data. Catch ex As Exception 'ログイン失敗したとき dbcon = 1 '成功=0 失敗=1 ' メニューの「ログイン」を操作可に戻す frmM.mnuログイン.Visible = True ' ログインフォームを閉じる Me.Close() ' ログイン失敗のメッセージを表示する MessageBox.Show("ログインに失敗しました") '接続失敗 Finally cn.Close() '接続成功、失敗に関わらず閉じる End Try If dbcon = 0 Then frmM.mnuログアウト.Visible = True <<<< ここで下記のようなエラーがでます。 End If ' ログインフォームを閉じる Me.Close() End Sub ご指摘ありがとうございました。 エラー内容 'System.NullReferenceException' のハンドルされていない例外が SQLDataAccess.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 最初に指摘頂いた時、デバッグモードにしていなかったためエラーが分りませんでした。 [ メッセージ編集済み 編集者: Q 編集日時 2004-07-27 16:33 ] | ||||||||||||
|
投稿日時: 2004-07-27 17:36
たぶん、frmMが正しく設定出来ていないのでしょう。
frmMは、何時、どこで、どのように初期化しています?
dbconは可能ならば、boolean型にしてはどうです? Try〜Catch〜Finallyのヘルプよく呼んで下さい。無駄なことをしています。 Form1メンバのことは、Form1にやらせた方がいいと思いますよ。 | ||||||||||||
|
投稿日時: 2004-07-27 18:09
soluna様
返答ありがとうございます。 frmMは、何時、どこで、どのように初期化しています? (回答) Form2側 Public Class frmConect Inherits System.Windows.Forms.Form Private frmM As Form1 Windows フォーム デザイナで生成されたコード いくつかの Private Sub と End Sub End Class dbconは可能ならば、boolean型にしてはどうです? Try〜Catch〜Finallyのヘルプよく呼んで下さい。無駄なことをしています。 (回答) ご指摘、ご指導ありがとうございます。 Try〜Catch〜Finallyはサンプルからよく分らずに使いました。勉強中。 Form1メンバのことは、Form1にやらせた方がいいと思いますよ。 (回答) 見直しを検討しています。あまりにもややこしくなりそうなので。。。 | ||||||||||||
|
投稿日時: 2004-07-27 18:25
Qさん、こんばんは。
ログインフォームをMDI子フォームにしてます? これをやめてモーダルダイアログにしませんか? 以下サンプルです。
| ||||||||||||
