女士们,先生们,不幸的是,我再次要用新手的东西打扰你们。 我已经搜索了几个小时的信息,所以如果有一条带有我想要的东西的线程,它就会埋得比我能找到的更深。
这是我在这里的第一个问题,马克·霍尔(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,获取结果,然后以这种方式关闭表单。