我是一名ASP.NET开发人员,他被分配了一个小的Winforms应用程序任务。我正在做以下事情:
我确信我应该在单一表格上做所有事情。这样做的正常/最佳方法是什么?
谢谢, 理查德。
答案 0 :(得分:3)
我认为Windows世界中最常见的方法是使用2个对话框。例如,登录Skype,Steam,远程桌面,SQL服务器(使用SQL Management Studio)等
Windows用户也习惯了登录对话框的常见行为(这里我的意思是单击“取消”按钮将关闭应用程序)并且没有其他干扰,如应用程序的主菜单或其他控件。
我建议在主窗体的FormLoad事件中显示Login窗体。使用ShowDialog方法并检查返回值以确定Login窗体是否已成功关闭。
为此,您需要
在“确定”按钮的单击处理程序中将LoginForm.DialogResult属性设置为DialogResult.OK(或使用对象检查器直接在“确定”按钮上设置DialogResult属性)
使用对象检查器将DialogResult设置为DialogResult.Cancel的取消按钮
使用对象检查器将LoginForm的AcceptButton和CancelButton属性设置为适当的按钮
MainForm中的代码:
private void MainForm_Load(object sender, EventArgs e)
{
LoginForm login = new LoginForm();
login.ShowDialog(this);
if (login.DialogResult != DialogResult.OK)
{
Close();
}
else
{
// Init your application ...
}
}
LoginForm中的代码:
private void btnOk_Click(object sender, EventArgs e)
{
if (DoSomeLoginLogic())
DialogResult = DialogResult.OK; // setting this will close the form
}
答案 1 :(得分:1)
恕我直言,我不会在一个表单上执行此操作,但您可以将登录对话框作为主应用程序对话框的模式对话框。当用户单击登录时,您可以关闭对话框。
当用户注销时再次调用它。
答案 2 :(得分:1)
单个表单是可行的方法,一旦成功,程序就可以继续下一个表单。
使用两个按钮“Accept”/“Cancel”创建一个公开用户名/密码字段的表单。
创建一个处理登录尝试和成功行为的模型类。
public class LoginModel {
private LoginForm view;
public LoginModel() {
view = new LoginForm(this);
}
public void Show() {
view.Show();
}
public bool LoginAttempt(string user, string pass) {
// Process login attempt (call LDAP backend etc...).
}
}
在您的LoginForm中,您需要从登录按钮的LoginAttempt(string, string)
事件中调用OnClick
,然后可以根据需要将其放入后台线程中。登录尝试成功后,您可以调用Close
方法。
在您的模型中,您还需要一个事件来告诉呼叫者成功失败。
如果你看一下深夜项目,可以通过重新打开一个类似于我在演示棱镜(CWPF Samples)的示例应用程序中使用的方法来实现另一种方法。