0

紳士淑女の皆様、残念ながら、初心者のことでお邪魔します。私はこの情報を何時間も検索したので、もし私が欲しいものを含むスレッドがあれば、それは私が見つけたよりも深く埋もれています.

これが私の最初の質問でしたが、Mark Hall は親切にも私を正してくれました。それ以来、新しいプロジェクトを作成し、最初の 3 つの画面 (コンテナー/ログイン、選択画面、メイン画面 (現在は空)) をユーザー コントロールとして再作成しました。ユーザーが複数のコレクションを持っている場合、選択画面がポップアップ表示され、コレクションを選択できます。

パラメーターで問題が発生しましたが、フォーム宣言をオーバーロードすることで解決しています (解決策はこちらにあります)。はい、呼び出しを介してパラメーターを送信する方がはるかに優れていることはわかっていますが、呼び出しを作成する必要はありません。各パラメーターに対して (私は?) そして… OK、OK、{get, set} よりもこちらの方が得意です。男、私は初心者になるのが嫌いです。

とにかく、選択フォームに問題があります。それを呼び出して閉じてから、メイン フォームに移動することができないようです。(コレクションが 1 つしかない場合) メイン フォームに直接進むことに問題はありません。はい、選択肢の datagridview を含めることができることはわかっていますが、一部のエンド ユーザーはツール シェッドの中で最も鋭い電球ではなく、手持ちが必要です。とにかく、ここにコードがあります。

コンテナ/ログイン画面

namespace DeleteThis
{
    public partial class ContainerForm : Form
    {
        Main Main = new Main();
        LoginCollectionChoice LoginChoice = new LoginCollectionChoice();
        DataTable dtPermissions = new DataTable();
        public ContainerForm()
        {
            InitializeComponent();
            Main.ExitEvent += new Main.ExitEventHandler(Main_ExitEvent);
            LoginChoice.ExitEvent += new
            LoginCollectionChoice.ExitEventHandler(LoginChoice_ExitEvent);
        }

        void LoginChoice_ExitEvent(object sender, EventArgs e)
        {
            pnlcontainer.Controls.Remove(LoginChoice);
        }

        void Main_ExitEvent(object sender, EventArgs e)
        {
            pnlcontainer.Controls.Remove(Main);
        }

    private void btnLogin_Click(object sender, EventArgs e)
    {
        LoginProcedure();
    }

    private void LoginProcedure()
    {
        DataTable dtPermissions = AdminClass.GetCollectionsForUser(int.Parse(txtbxUserName.Text));
        if (dtPermissions.Rows.Count == 1)
        {
            //Valid user, one collection.  Head right in.
            pnlcontainer.Controls.Add(Main);
            Main.BringToFront();
        }
        else
        {
            //More than one collection found.  Giving user choice
            LoginCollectionChoice LoginChoice = new LoginCollectionChoice(dtPermissions);

            pnlcontainer.Controls.Add(LoginChoice);
            LoginChoice.BringToFront();

        }
    }

    private void btnExitProgram_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

}

スニッピングで何も殺さなかったことを願っています。そして今度は選択画面…</p>

public partial class LoginCollectionChoice : UserControl
{
    public delegate void ExitEventHandler(object sender, EventArgs e);
    public event ExitEventHandler ExitEvent;
    private static DataTable dtPermit;
    DataTable dtPermissions = new DataTable();

    public LoginCollectionChoice()
    {
    }

    public LoginCollectionChoice(DataTable dtPermissions)
    {
        InitializeComponent();
        GrdCollection.DataSource = dtPermissions;
        dtPermit = dtPermissions;
    }

    private void btnChoose_Click(object sender, EventArgs e)
    {
    //Code for the user to choose a collection
    ExitEvent(this, new EventArgs());
    }
}

関係のないコードはすべて切り取りました。紳士淑女の皆さんが、この初心者が正しい道を歩むのを手伝ってくれることを願っています。どうか、優しくしてください、私が泣くのを見たくないでしょう?:) おー!また、すばらしいチュートリアル サイトをご存じでしたら、メールでお知らせください。ここでつまずいて質問するのに 1 週​​間を費やすよりも、チュートリアルに 1 週​​間を費やす方が好きです。どうもありがとうございました。

4

2 に答える 2

0

logonForm.Show() を呼び出していますか?

そのように表示する必要があるようです。

BringToFront() を使用していますが、最初に表示する必要があると思います。

于 2012-06-21T17:19:28.107 に答える
0

私に最初に飛び出すのは、あなたが電話しているということです

LoginCollectionChoice LoginChoice = new LoginCollectionChoice(dtPermissions);

これは LoginChoice という名前のローカル変数を作成しています。これは、同じ名前を共有していても、クラス変数と同じではありません。

あなたがしたいことは、そのメソッドでローカル変数を宣言しないことです。その行を次のように変更します

LoginChoice = new LoginCollectionChoice(dtPermissions);

そうは言っても、最初に .Show() を呼び出す必要があるという点で tylerjgarland を信じています。そして、フォームを閉じる方法は確かに奇妙です。フォーム showDialog を作成し、結果を取得してから、その方法でフォームを閉じます。

于 2012-06-21T17:21:53.743 に答える