加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Messagebox出现两次C#

发布时间:2020-12-16 01:47:14 所属栏目:百科 来源:网络整理
导读:我有一个名为cmbSubjects的组合框.我的项目的目的是在测验竞赛中改变主题.我希望在更改所选项目时,如果在更改前组合框中有关于主题的未答复问题,则消息框应询问测验主机是否确定是否继续.如果他们回答“否”,则组合框应选择其先前选择的项目.我得到了这个代
我有一个名为cmbSubjects的组合框.我的项目的目的是在测验竞赛中改变主题.我希望在更改所选项目时,如果在更改前组合框中有关于主题的未答复问题,则消息框应询问测验主机是否确定是否继续.如果他们回答“否”,则组合框应选择其先前选择的项目.我得到了这个代码,但问题是如果quix master在消息框中选择NO,则消息框会出现两次.我发现原因(在从断点进入代码之后)是当消息框返回NO时,我的代码将组合框的选定值更改为其先前的值,这会触发cmbSubjects_SelectedIndexChanged事件.我尝试通过添加一个变量来修改代码,以计算消息框出现的次数以防止它.问题是它只在首次更改组合框的值后出现.下面的代码实际上是修改后的代码.谁能帮我这个?提前致谢. (我正在使用C#)

private void cmbSubjects_SelectedIndexChanged(object sender,EventArgs e)
    {
        if (pnlAvailable.Controls.Count != 0)
        {
            if (countMsg < 1)
            {
                DialogResult res = MessageBox.Show("There are still available questions. Are you sure you want to change the subject?","Changing subject...",MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);
                if (res == DialogResult.Yes)
                {
                    cmbIndex = cmbSubjects.SelectedIndex;
                    countMsg = 0;
                    switch (cmbSubjects.SelectedIndex)
                    {
                        case 0:
                            subject = "life";
                            break;
                        case 1:
                            subject = "math";
                            break;
                        case 2:
                            subject = "physical";
                            break;
                        case 3:
                            subject = "technology";
                            break;
                        case 4:
                            subject = "vocational";
                            break;
                    }

                    GenQstBtns();
                }
                else if (res == DialogResult.No)
                {
                    countMsg = 1;
                    cmbSubjects.SelectedIndex = cmbIndex;
                }
            }
        }
    }

解决方法

您可以使用 SelectionChangeCommitted活动.

Do not use SelectedIndexChanged or SelectedValueChanged to capture user changes,because those events are also raised when the selection changes programmatically.

因此,如果在以编程方式更改所选项目后使用此事件,则此事件将不会再次触发

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读