用户控件的基本用法,关闭用户控件和打开另一个用户控件参数

时间:2012-06-21 17:11:42

标签: c# user-controls parameters

女士们,先生们,我不幸的是,我会用新手来打扰你。我已经搜索了几个小时这个信息了,所以如果有一个我想要它的线程,它就会埋没得比我找到的更深。

This是我在这里的第一个问题,马克霍尔非常友好地帮我。从那时起,我创建了一个新项目,并将我的前三个屏幕重新创建为用户控件 - 容器/登录,选择屏幕和主屏幕(当前为空)。如果用户有多个集合,则弹出选择屏幕并允许他们选择集合。

我确实碰到了参数的问题,但是我通过重载表单声明(这里找到的解决方案)来解决这个问题 - 是的,我知道通过调用发送参数要好得多,但是我不愿意为每个参数创建一个调用(是吗?)并且......好的,好的,我比{get,set}更擅长这个。伙计,我讨厌成为新手。

无论如何,我在选择表单上遇到了麻烦 - 我似乎无法调用它,关闭它,然后转到主窗体。我没有问题(如果只有一个集合)直接进入主表单,那就是那种选择形式。是的,我知道我可以包含一个选择数据网格视图,但我们的一些最终用户并不是工具棚中最尖锐的灯泡,需要手持。无论如何,这是代码。

CONTAINER / LOGIN SCREEN

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();
    }
}

}

我希望我在剪报中没有杀死任何东西。现在选择屏幕......

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());
    }
}

我已经剪断了所有不相关的代码,我希望你们先生们能帮助这位新手走上正确的道路。请温柔,你不想看到我哭,是吗? :)哦!如果你知道任何很棒的教程网站,请发邮件给我。我宁愿花一个星期的时间来学习教程而不是一个星期就磕磕绊绊地问这里。非常感谢你们。

2 个答案:

答案 0 :(得分:0)

您是否正在调用logonForm.Show()?

看起来你需要这样表现出来。

你使用BringToFront(),但我认为它需要首先显示。

答案 1 :(得分:0)

跳出来的第一件事就是你正在打电话

LoginCollectionChoice LoginChoice = new LoginCollectionChoice(dtPermissions);

创建了一个名为LoginChoice的局部变量,它与您的类变量不同,即使它们共享相同的名称。

您要做的是不在该方法中声明局部变量。将该行更改为

LoginChoice = new LoginCollectionChoice(dtPermissions);

话虽如此,我相信tylerjgarland,你需要先调用.Show()。你关闭表格的方式当然很奇怪。我会创建一个表单,showDialog,获取结果,然后关闭表单。