为什么消息框显示消息两次?

时间:2021-01-10 11:17:47

标签: c# winforms

private void tStartTime_TextChanged(object sender, EventArgs e)
        {
            if(CheckIfTimesExist())
            {
                bPlayPart.Enabled = true;
            }
            else
            {
                bPlayPart.Enabled = false;
            }
        }

        private void tEndTime_TextChanged(object sender, EventArgs e)
        {
            if (CheckIfTimesExist())
            {
                bPlayPart.Enabled = true;
            }
            else
            {
                bPlayPart.Enabled = false;
            }
        }

        private bool CheckIfTimesExist()
        {
            bool timesExit;

            if (tStartTime.Text != "" && tEndTime.Text != "" && tStartTime.Text != tEndTime.Text)
            {
                timesExit = true;
            }
            else
            {
                tStartTime.Text = "";
                tEndTime.Text = "";
                MessageBox.Show("Start time and End time cannot be the same.");
                timesExit = false;
            }

            return timesExit;
        }

主要思想是在两种情况下显示一条消息:如果两个文本框都为空或两者内部具有相同的值。问题是它连续两次显示相同的消息。

1 个答案:

答案 0 :(得分:6)

每次 CheckIfTimesExisttStartTime 中的 Text 属性发生更改时,您都会调用 tEndTime,并且在 CheckIfTimesExist 内部更改 Text 属性:

                // ...                
                tStartTime.Text = "";
                tEndTime.Text = "";
                // ...

如果 tStartTimetEndTime 是对话窗口的一部分,您可以在 OnFormClosing 中调用 CheckIfTimesExist - 请参阅 CancelEventArgs.Cancel Property 说明中的示例。

条件

<块引用>

如果两个文本框都是空的,或者里面的值相同。

可以简化 - 如果两个文本框都为空,则 Text 属性将相等:

    if (tStartTime.Text != tEndTime.Text)