C# 创建一个连接按钮

C# 创建一个连接按钮,c#,winforms,C#,Winforms,我有一个登录表单和一个检查用户名和密码是否正确的按钮。 但问题是我试过的代码。。我必须点击连接按钮两次 但是当我只点击一次按钮时,代码应该可以工作!对吧? 我认为问题在于:只要我点击某个按钮,它的DialogResult设置为某个值,showDialog就不会消失,所以在第一次点击connexionButton.DialogResult时,会得到DialogResult.OK值,在第二次点击时,按钮会执行代码 *您可以注意到事件simpleButton1\u Click是connexionBut

我有一个登录表单和一个检查用户名和密码是否正确的按钮。 但问题是我试过的代码。。我必须点击连接按钮两次

但是当我只点击一次按钮时,代码应该可以工作!对吧?

我认为问题在于:只要我点击某个按钮,它的DialogResult设置为某个值,showDialog就不会消失,所以在第一次点击connexionButton.DialogResult时,会得到DialogResult.OK值,在第二次点击时,按钮会执行代码

*您可以注意到事件simpleButton1\u Click是connexionButton按钮的事件*

这是我使用的事件:

  this.connexionButton.Click += new System.EventHandler(this.simpleButton1_Click);
这是我尝试的代码:

private void simpleButton1_Click(object sender, EventArgs e)
{
     Boolean allowCnx = false;

     foreach (var row in myClass.ds.Tables["Users"].AsEnumerable())
     {
         if (row[1].ToString().ToLower() == idBox.Text.ToLower() && row[2].ToString().ToLower() == mdpBox.Text.ToLower())
         {
            allowCnx = true;
         }
     }

     if (allowCnx)
     {
         connexionButton.DialogResult = DialogResult.OK;
     }
     else
       XtraMessageBox.Show("Invalide Information", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
这是我用来称呼这个登录表单的代码:

using (login loginForm = new login())
{
     var result = loginForm.ShowDialog();
     if (result == DialogResult.OK)
        this.Show();
     else
        this.Close();
}
不确定这是否是您的问题,但看起来您的事件处理程序与您发布的方法不同。您是否在代码中的某个地方有另一个名为simpleButton1_Click_1的方法,您只是有点困惑

编辑:响应您的更改/添加

您似乎对ShowDialog和DialogResult有些困惑

// When you launch the login form, I do not know what you intended to do with your
// calls to Show() and Close() but so long as you don't instend for them to do
// anything to the loginForm, that's fine.
using (login loginForm = new login())
{
    if (loginForm.ShowDialog() == DialogResult.OK)
        // Do stuff if logged in
    else
        // Do stuff if failed
} 

private void simpleButton1_Click(object sender, EventArgs e)
{
    Boolean allowCnx = false;

    foreach (var row in myClass.ds.Tables["Users"].AsEnumerable())
        if (row[1].ToString().ToLower() == idBox.Text.ToLower() && row[2].ToString().ToLower() == mdpBox.Text.ToLower())
        {
            allowCnx = true;
        }

    if (allowCnx)
    {
        this.DialogResult = DialogResult.OK; // Don't set the DialogResult of a button.  Set it for the form.
    }
    else
    {
        this.DialogResult = DialogResult.Abort; // Because we didn't succeed
        XtraMessageBox.Show("Invalide Information",
            "Erreur",
            MessageBoxButtons.OK,
            MessageBoxIcon.Error);
    }
}    
您正在使用simpleButton1_Click_1而不是simpleButton1_Click。 事实上,代码应该是:

this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
编辑:


是的,我只是忘记了我复制事件的时候。。我是说 this.connexionButton.Click+=新建 System.EventHandlerthis.SimpleButton 1_单击

我认为,在这种情况下,您应该使用bool而不是DialogResult,因此请尝试:

以及:

您需要将Form.DialogResult设置为DialogResult.OK,而不是按钮的DialogResult

一些代码:

this.DialogResult=DialogResult.OK

还有一些想法:

显然,最好构建一个独立的方法来检查 用户的存在。不要在ClickEvent中执行此操作。也许您需要再次使用此方法,然后您将重写此方法。这只会产生臃肿的代码

禁止用户在文本框中填充值之前单击按钮


将行的迭代器从可计算更改为行

发件人:

致:

这听起来可能有点奇怪,但如果在任何地方对该表进行任何更改,当您在遍历可枚举项时,它将中断您的迭代。请看,这可能是另一个进程同时访问此表,或者使用在迭代开始之前尚未完成填充表的datareader

另外,尝试更改代码以直接访问窗体的对话框结果,而不是通过按钮

发件人:

致:


如果布尔值设置为true,则代码应仅设置该值,因此如果检查正确,则不会关闭表单。

为什么不在xaml中设置单击事件处理程序?这是winforms。。?为什么要创建一个事件处理程序,而我所看到的只是按钮的事件。。将按钮放在表单上双击设计器中的按钮,然后在其中添加代码。您如何确定这是他显示的代码中的XAML?请描述预期行为与实际行为。你没有提供足够的细节。具体来说,什么是connexionButton?为什么从与simpleButton1不同的按钮connexionButton返回对话框结果?我指的是这个.connexionButton.Click+=new System.EventHandlerthis.simpleButton1\u Click;可以您是否在事件处理程序的第一行设置了断点?您确定它不是在第一次单击时输入的,而是在第二次单击时输入的吗?在这一行上设置一个断点:布尔allowCnx=false;我已经修改了我的帖子,请检查修改后的帖子,并在调用ShowDialog的地方张贴代码。我需要看到这一点来帮助您。否当我选中按钮时,它会运行一个检查,当此检查为真时,它会为allowCnx返回一个真值,然后当allowCnx=真时,表单会消失是的,我只是在复制事件时忘记了。。我的意思是this.connexionButton.Click+=newsystem.EventHandlerthis.simpleButton1\u Click;
this.simpleButton1.Click += new System.EventHandler(this.simpleButton1_Click);
public bool AllowConnection = false;
private void simpleButton1_Click(object sender, EventArgs e)
{
     foreach (var row in myClass.ds.Tables["Users"].AsEnumerable())
     {
         if (row[1].ToString().ToLower() == idBox.Text.ToLower() && row[2].ToString().ToLower() == mdpBox.Text.ToLower())
            AllowConnection = true;
     }

     if (!AllowConnection)
         XtraMessageBox.Show("Invalide Information", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
using (login loginForm = new login())
{
     loginForm.ShowDialog();
     if (loginForm.AllowConnection)
        this.Show();
     else
        this.Close();
}
foreach (var row in myClass.ds.Tables["Users"].AsEnumerable())
foreach (var row in myClass.ds.Tables["Users"].Rows) 
connexionButton.DialogResult = DialogResult.OK;
this.DialogResult = DialogResult.OK;