0

vb.net には 5 つのフォームがあります。

  1. Welcome Form
  2. Home Form
  3. LogIn Form
  4. Work1 Form
  5. Work2 Form

そして1つの列挙:

  Public Enum OpenForm
      F_WORK1=1
      F_WORK2=2
  End Enum

そして、Module ですべてのオブジェクトを宣言します。

  Public frmHome As Home
  Public frmLogin As LogIn
  Public frmWork1 As Work1
  Public frmWork2 As Work2

次に、ウェルカム フォームが読み込まれると、次のようになります。

 Me.Hide()
 frmHome = New Home
 frmHome.show()

また、ホーム フォームには 2 つのボタンがあります。そしてホームフォーム、閉じません。アプリケーションが閉じるまで開いたままにします。

  1. 最初のボタンは、Work1 フォームを開くために使用します。ユーザーがそれをクリックすると、ログインフォームが開き、ユーザーはユーザー名とパスワードを入力する必要があります。

    frmLogin = 新しいログイン(OpenForm.F_WORK1)

    frmLogin.showDialog()

  2. 2 番目のボタンは、Work2 フォームを開くために使用します。ユーザーがそれをクリックすると、ログインフォームが開き、ユーザーはユーザー名とパスワードを入力する必要があります。

    frmLogin = 新しいログイン(OpenForm.F_WORK2)

    frmLogin.showDialog()

ログイン フォームには、btnLogin という名前のボタンが 1 つあります。ログインフォームのコードは次のとおりです。

 Private frm As OpenForm 

 Public Sub New(f as OpenForm)
    InitailizeComponent()
    frm = f
 End Sub

ユーザーが btnLogin をクリックすると、次のようになります。

 If frm=OpenForm.F_WORK1 Then
    frmWork1 = New Work1()
    frmWork1.showDialog(frmHome)
    frmLogin.Close()
 ElseIf frm=OpenForm.F_WORK2 Then
    frmWork2 = New Work2()
    frmWork2.showDialog(frmHome)
    frmLogin.Close()
 End If

次に、Work1 または Wor2 フォームが開きました。しかしログインフォームが閉じません。


問題点:

  1. ユーザーが btnLogin をクリックした後、ログイン フォームを閉じて Work1 または Work2 フォームを開きたい。
  2. また、ユーザーが Work1 または Work2 フォームを最小化すると、ホーム フォームも最小化します。ユーザーがマウスでタスクバーを動かしたときに、どのフォームを開いたかをプレビューします。
  3. 各フォーム (ホーム フォーム、ワーク 1 フォーム、ワーク 2 フォーム) には多くのコントロールが含まれているため、ユーザー インターフェイスが非常に遅くなり、スムーズになりません。したがって、最初にその内容をロードしてから、フォームを表示する必要があります。

お手伝いありがとうございます。

4

1 に答える 1

1

ホーム フォームは、ログインが成功した後に開くべき正しいフォームを認識しています。
開くフォームを決定する

最初のボタンで

frmLogin = New LogIn()
if DialogResult.OK = frmLogin.showDialog() then
    frmWork1 = New Work1()
    frmWork1.showDialog(frmHome)
end if

2番目のボタンで

frmLogin = New LogIn()
if DialogResult.OK = frmLogin.showDialog() then
    frmWork2 = New Work2()
    frmWork2.showDialog(frmHome)
end if

ShowDialog によって開かれたフォームが閉じられるまで、ShowDialog は後続のコードの実行を停止するため、実際のコードは機能しません。これをモーダルフォームと呼びます。

btnLogin の DialogResult プロパティを DialogResult.OK に設定することを忘れてください。
これにより、ユーザーがそのボタンを押したときにログインフォームを自動的に閉じるようにフレームワークに指示されます。
代わりに、ユーザーの検証が失敗した場合は、frmLogin.DialogResult プロパティを DialogResult.None に設定して、フォームの自動クローズをブロックします。

2 番目の質問については、既にこのように機能しているはずです。ShowDialog メソッドを呼び出してオーナー フォームを渡すと、2 つのフォームが結合され、fmrWork1/2 を最小化すると frmHome も最小化されます。フォームの ShowInTaskbar プロパティを false に設定しない限り、タスクバーの視覚化は自動的に行われます。

3番目の質問は答えるのが難しいです。考えられる解決策は、タブ コントロールを使用して入力コントロールをタブ ページに分割することです。各ページには、そのページに適切な入力を備えたユーザー コントロールが含まれている必要があります。最初のページを除くすべてのページは空のままになり、ユーザーが選択したページを変更した場合にのみ、対応するユーザー コントロールをロードします。ご覧のとおり、これは非常に複雑なトピックであり、少し調査しないと完全には説明できません。

于 2012-11-01T13:47:48.243 に答える