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



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

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

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

无论如何,我在选择表单方面遇到了问题——我似乎无法调用它,关闭它,然后转到主表单。 我直接进入主窗体没有问题(如果只有一个集合),这是的选择形式。 是的,我知道我可以包括一个选择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();
    }
}

}

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

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

我已经剪掉了所有不相关的代码,希望先生们和女士们可以帮助这个新手走上正确的道路。 求求你,温柔一点,你不会想看我哭吧? :) 哦! 如果您知道任何很棒的教程网站,请通过电子邮件发送给我。 我宁愿花一周时间在教程上,而不是花一周的时间在这里磕磕绊绊地问。 非常感谢大家。

你是在调用logonForm.Show()吗?

看来你需要以这种方式展示它。

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

首先跳到我的是你在打电话

LoginCollectionChoice LoginChoice = new LoginCollectionChoice(dtPermissions);

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

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

LoginChoice = new LoginCollectionChoice(dtPermissions);

话虽如此,我相信泰勒加兰,因为你需要打电话.首先显示()。你关闭表格的方式肯定很奇怪。我会创建一个表单,showDialog,获取结果,然后以这种方式关闭表单。

最新更新