山西念星科贸有限公司 2024-07-09 04:45 采纳率: 72%
浏览 4
已结题

C#全局部变量的问题

问题遇到的现象和发生背景

C#全局部变量的问题

遇到的现象和发生背景,请写出第一个错误信息

我很确定我的确认按钮的Text属性为提交,按理说应该把全局变量:结果赋值为真了呀

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

corporateAccountQrCodePaymentInquiryAndOperation中:

#region Value---全局变量---声明一个布尔型的全局变量,并命名为结果,用来保存用户是否选择了保存流水号,并赋值为:假
//声明一个布尔型的全局变量,并命名为结果,用来保存用户是否选择了保存流水号,并赋值为:假
public static bool Value = false;
#endregion
#region confirmButton_Click---事件---此事件是在确认按钮点击后运行
/// <summary>
/// 此事件是在确认按钮点击后运行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void confirmButton_Click(object sender, EventArgs e)
{//根据确认按钮的Text属性来判断确认按钮事件
    switch (confirmButton.Text)
    {//如果确认按钮的Text属性为:继续查询下一条,执行下面语句块内容
        case "继续查询下一条":
            //将流水号文本输入框设置为允许用户输入
            serialNumberTextBox.ReadOnly = false;
            //将流水号文本输入框的内容设置为:空
            serialNumberTextBox.Text = "";
            //将明细流水号文本输入框设置为允许用户输入
            detailedSerialNumberTextBox.ReadOnly = false;
            //将明细流水号文本输入框的内容设置为:空
            detailedSerialNumberTextBox.Text = "";
            //将收入凭证号文本输入框设置为允许用户输入
            incomeVouchersNumberTextBox.ReadOnly = false;
            //将收入凭证号文本输入框的内容设置为:空
            incomeVouchersNumberTextBox.Text = "";
            //将应收金额文本输入框设置为允许用户输入
            amountCollectedTextBox.ReadOnly = false;
            //将应收金额文本输入框的内容设置为:空
            amountCollectedTextBox.Text = "";
            //将实收金额文本输入框设置为允许用户输入
            actualAmountReceivedTextBox.ReadOnly = false;
            //实收金额文本输入框的内容设置为:空
            actualAmountReceivedTextBox.Text = "";
            //将手续费文本输入框设置为允许用户输入
            handlingFeesTextBox.ReadOnly = false;
            //将手续费文本输入框的内容设置为:空
            handlingFeesTextBox.Text = "";
            //将流水号标签的Text属性设置为:请输入要查询的流水号:
            serialNumberLabel.Text = "请输入要查询的流水号:";
            //将明细流水号标签的Text属性设置为:请输入要查的询明细流水号:
            detailedSerialNumberLabel.Text = "请输入要查询的明细流水号:";
            //将收入凭证号文本输入框设置为不可见
            incomeVouchersNumberTextBox.Visible = false;
            //将应收金额文本输入框设置为不可见
            amountCollectedTextBox.Visible = false;
            //将实收金额文本输入框设置为不可见
            actualAmountReceivedTextBox.Visible = false;
            //将手续费文本输入框设置为不可见
            handlingFeesTextBox.Visible = false;
            //将收入凭证号标签设置为不可见
            incomeVouchersNumberLabel.Visible = false;
            //将应收金额标签设置为不可见
            amountCollectedLabel.Visible = false;
            //将实收金额标签设置为不可见
            actualAmountReceivedLabel.Visible = false;
            //将手续费标签设置为不可见
            handlingFeesLabel.Visible = false;
            //将应收金额元s设置为不可见
            amountCollectedElementLabel.Visible = false;
            //将实收金额元设置为不可见
            actualAmountReceivedElementLabel.Visible = false;
            //将手续费元标签设置为不可见
            handlingFeesElementLabel.Visible = false;
            //将确认按钮设置为不可见
            confirmButton.Visible = false;
            //将修改按钮设置为不可见
            modifyButton.Visible = false;
            //退出switch语句
            break;
        //如果确认按钮的Text属性为:提交,执行下面语句块内容
        case "提交":
            //判断收款凭证号文本框的内容是否为空
            if (incomeVouchersNumberTextBox.Text == "")
            {//如果收款凭证号文本框的内容为空,弹出一个消息框,内容是:您还没有输入对应的收款凭证号,请填写对应的收款凭证号,窗体名是:温馨提示
                MessageBox.Show("您还没有输入对应的收款凭证号,请填写对应的收款凭证号", "温馨提示");
                //将焦点移到收款凭证号文本框上面
                incomeVouchersNumberTextBox.Focus();
            }//继续判断应收金额文本框的内容是否为空
            else if (amountCollectedTextBox.Text == "")
            {//如果应收金额文本框的内容为空,弹出一个消息框,内容是:您还没有输入对应的应收金额,请填写对应的应收金额,窗体名是:温馨提示
                MessageBox.Show("您还没有输入对应的应收金额,请填写对应的应收金额", "温馨提示");
                //将焦点移到应收金额文本框上面
                amountCollectedTextBox.Focus();
            }//继续判断实收金额文本框的内容是否为空
            else if (actualAmountReceivedTextBox.Text == "")
            {//如果实收金额文本框的内容为空,弹出一个消息框,内容是:您还没有输入对应的实收金额,请填写对应的实收金额,窗体名是:温馨提示
                MessageBox.Show("您还没有输入对应的实收金额,请填写对应的实收金额", "温馨提示");
                //将焦点移到实收金额文本框上面
                actualAmountReceivedTextBox.Focus();
            }//继续判断手续费文本框的内容是否为空
            else if (handlingFeesTextBox.Text == "")
            {//如果手续费文本框的内容为空,弹出一个消息框,内容是:您还没有输入对应的手续费,请填写对应的手续费,窗体名是:温馨提示
                MessageBox.Show("您还没有输入对应的手续费,请填写对应的手续费", "温馨提示");
                //将焦点移到手续费文本框上面
                handlingFeesTextBox.Focus();
            }//如果以上都不满足的话
            else
            {//弹出一个消息框,内容是:您输入的流水号为:---拼接上:换行---拼接上:流水号文本框的内容---拼接上:换行---拼接上:您输入的明细流水号为:---拼接上:换行---拼接上:明细流水号文本框的内容---拼接上:换行---拼接上:您输入的对应的收款凭证号为:---拼接上:换行---拼接上:收入凭证编号文本框的内容---拼接上:换行---拼接上:您输入的对应的应收金额为:---拼接上:换行---拼接上:应收金额文本框的内容---拼接上:换行---拼接上:您输入的对应的实收金额为:---拼接上:换行---拼接上:实收金额文本框的内容---拼接上:换行---拼接上:您输入的对应的手续费为:---拼接上:换行---拼接上:手续费文本框的内容,窗体名是:温馨提示
                MessageBox.Show("您输入的流水号为:" + "\r\n" + $"{serialNumberTextBox.Text}" + "\r\n" + "您输入的明细流水号为:" + "\r\n" + $"{detailedSerialNumberTextBox.Text}" + "\r\n" + "您输入的对应的收款凭证号为:" + "\r\n" + $"{incomeVouchersNumberTextBox.Text}" + "\r\n" + "您输入的对应的应收金额为:" + "\r\n" + $"{amountCollectedTextBox.Text}" + "\r\n" + "您输入的对应的实收金额为:" + "\r\n" + $"{actualAmountReceivedTextBox.Text}" + "\r\n" + "您输入的对应的手续费为:" + "\r\n" + $"{handlingFeesTextBox.Text}" + "\r\n", "温馨提示");
                //声明一个高精度小数型局部变量,并命名为:应收金额,并赋值为关于金额的类中的将字符串变量转换成高精度小数型变量方法的返回值,方法参数是:应收金额文本框的内容
                decimal amountCollected = RegardingTheAmount.ConvertStringToDecimal(amountCollectedTextBox.Text);
                //声明一个高精度小数型局部变量,并命名为:实收金额,并赋值为关于金额的类中的将字符串变量转换成高精度小数型变量方法的返回值,方法参数是:实收金额文本框的内容
                decimal actualAmountReceived = RegardingTheAmount.ConvertStringToDecimal(actualAmountReceivedTextBox.Text);
                //声明一个高精度小数型局部变量,并命名为:手续费,并赋值为关于金额的类中的将字符串变量转换成高精度小数型变量方法的返回值,方法参数是:手续费文本框的内容
                decimal handlingFees = RegardingTheAmount.ConvertStringToDecimal(handlingFeesTextBox.Text);
                //声明一个新的对话框返回结果枚举变量,命名为结果,并赋值为:打开一个带确认、取消的消息框,内容是:确定输入无误,保存此条记录吗,窗体名是:温馨提示
                DialogResult selecteds = MessageBox.Show("确定输入无误,保存此条记录吗?", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                // 判断用户点击的是否是确认按钮
                if (selecteds == DialogResult.OK)
                {//判断用户输入的明细流水号是否已经存在
                    if (CorporateQRCodePaymentData.Check(detailedSerialNumberTextBox.Text))
                    {//将全局变量:结果,的值赋值为:真
                        Value = true;
                        //如果用户输入的明细流水号已经存在,调用自定义变量:对公账户二维码收款数据中:通过明细流水号,修改对应的流水号方法,其中方法的参数一是:明细流水号文本输入框的内容---方法的参数二是:收入凭证编号文本输入框的内容
                        CorporateQRCodePaymentData.ModifyIncomeVouchersNumber(detailedSerialNumberTextBox.Text, incomeVouchersNumberTextBox.Text);
                        //调用自定义变量:对公账户二维码收款数据中:通过明细流水号,修改对应的流水号方法,其中方法的参数一是:明细流水号文本输入框的内容---方法的参数二是:应收金额文本输入框的内容
                        CorporateQRCodePaymentData.ModifyAmountCollected(detailedSerialNumberTextBox.Text, amountCollected);
                        //调用自定义变量:对公账户二维码收款数据中:通过明细流水号,修改对应的流水号方法,其中方法的参数一是:明细流水号文本输入框的内容---方法的参数二是:实收金额文本输入框的内容
                        CorporateQRCodePaymentData.ModifyActualAmountReceived(detailedSerialNumberTextBox.Text, actualAmountReceived);
                        //调用自定义变量:对公账户二维码收款数据中:通过明细流水号,修改对应的流水号方法,其中方法的参数一是:明细流水号文本输入框的内容---方法的参数二是:手续费文本输入框的内容
                        CorporateQRCodePaymentData.ModifyHandlingFees(detailedSerialNumberTextBox.Text, handlingFees);
                        //将局部变量:记账凭证编号,的值,重新赋值为:调用:自定义变量-- - 对公账户二维码收款数据,中的:通过:顾客输入的流水号,获取:记账凭证编号,方法,其中方法的参数一是:流水号文本输入框的内容,的值
                        AccountingVoucherNumber = CorporateQRCodePaymentData.ByTheSerialNumberEnteredByTheCustomerGetAccountingVoucherNumber(serialNumberTextBox.Text);
                        //弹出一个消息框,内容是:修改对公账户二维码收款数据成功!!!,窗体名是:温馨提示
                        MessageBox.Show("修改对公账户二维码收款数据成功!!!", "温馨提示");
                        //将修改按钮单击一次
                        modifyButton.PerformClick();
                    }//如果用户输入的明细流水号不存在
                    else
                    {//将全局变量:结果,的值赋值为:真
                        Value = true;
                        //将用户选择的了内容添加进:自定义变量---对公账户二维码收款数据中
                        CorporateQRCodePaymentData.Add(serialNumberTextBox.Text, incomeVouchersNumberTextBox.Text, amountCollected, actualAmountReceived, handlingFees, detailedSerialNumberTextBox.Text);
                        //将局部变量:记账凭证编号,的值,重新赋值为:调用:自定义变量-- - 对公账户二维码收款数据,中的:通过:顾客输入的流水号,获取:记账凭证编号,方法,其中方法的参数一是:流水号文本输入框的内容,的值
                        AccountingVoucherNumber = CorporateQRCodePaymentData.ByTheSerialNumberEnteredByTheCustomerGetAccountingVoucherNumber(serialNumberTextBox.Text);
                        //弹出一个消息框,内容是:保存对公账户二维码收款数据成功!!!,窗体名是:温馨提示
                        MessageBox.Show("保存对公账户二维码收款数据成功!!!", "温馨提示");
                        //将修改按钮单击一次
                        modifyButton.PerformClick();
                    }
                }
            }
            //退出switch语句
            break;
        // 如果上面的条件都不满足
        default:
            //主动抛出异常不在执行事件,具体原因是:程序异常
            throw new ProgramException();
    }
}
#endregion
//判断:收款账号组合框,的现行选中项,是否:为:对公账户二维码收款
                if (receivingAccountComboBox.SelectedItem == "对公账户二维码收款")
                {//如果:收款账号组合框,的现行选中项,为:对公账户二维码收款,实例化一个对公账户二维码收款查询和操作窗体,并命名为:对公账户二维码收款查询和操作窗体
                    corporateAccountQrCodePaymentInquiryAndOperation corporateAccountQrCodePaymentInquiryAndOperation = new corporateAccountQrCodePaymentInquiryAndOperation();
                    //将:局部变量对公账户二维码收款查询和操作窗体,的:全局变量:收入凭证编号,的值设置为:当前类中的:全局变量:收入凭证编号,的值
                    corporateAccountQrCodePaymentInquiryAndOperation.IncomeVoucherNumber = IncomeVoucherNumber;
                    //将局部变量对公账户二维码收款查询和操作窗体的窗体控件设置为不显示
                    corporateAccountQrCodePaymentInquiryAndOperation.ControlBox = false;
                    //将局部变量对公账户二维码收款查询和操作窗体的任务栏显示设置为不显示
                    corporateAccountQrCodePaymentInquiryAndOperation.ShowInTaskbar = false;
                    //将局部变量对公账户二维码收款查询和操作窗体的最大化设置为不允许最大化
                    corporateAccountQrCodePaymentInquiryAndOperation.MaximizeBox = false;
                    //将局部变量对公账户二维码收款查询和操作窗体的最小化设置为不允许最小化
                    corporateAccountQrCodePaymentInquiryAndOperation.MinimizeBox = false;
                    //为局部变量对公账户二维码收款查询和操作窗体的确认按钮添加一个点击事件
                    corporateAccountQrCodePaymentInquiryAndOperation.confirmButton.Click += (sender, args) =>
                    {//判断局部变量对公账户二维码收款查询和操作窗体中结果的值是否为真
                        if (corporateAccountQrCodePaymentInquiryAndOperation.Value)---注释掉这句,关闭窗体代码就起作用
                        {//如果局部变量对公账户二维码收款查询和操作窗体中结果的值为真,将局部变量对公账户二维码收款查询和操作窗体关闭
                            corporateAccountQrCodePaymentInquiryAndOperation.Close();-----不起作用
                        }
                    };//将局部变量对公账户二维码收款查询和操作窗体显示出来
                    corporateAccountQrCodePaymentInquiryAndOperation.ShowDialog();
                    //将:类变量:记账凭证号,的值重新赋值为:局部变量:对公账户二维码收款查询和操作窗体,中的:记账凭证号,的值
                    AccountingVoucherNumber = corporateAccountQrCodePaymentInquiryAndOperation.AccountingVoucherNumber;
                }

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

尽量不改动窗体的代码,达到窗体内不关闭,外部调用满足:结果为真时候关闭

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-07-09 04:45
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您好!根据您提供的代码和描述,我注意到了几个可能的问题点,让我们逐一排查:

    1. 全局变量Value的赋值问题: 在您的代码中,Value变量被设置为静态的,这意味着它在类的所有实例之间共享。如果在confirmButton_Click事件处理方法中正确地将Value设置为true,但其他部分的代码没有看到这个变化,可能是因为存在多个类的实例,或者Value在其他地方被重新赋值为false

    2. 关闭窗体的逻辑问题: 您尝试在corporateAccountQrCodePaymentInquiryAndOperation窗体的确认按钮点击事件中关闭窗体,但是注释掉的代码片段显示您可能在尝试使用一个事件处理器来关闭窗体,但实际的关闭逻辑并没有正确执行。

    3. 事件处理器的使用: 您使用了corporateAccountQrCodePaymentInquiryAndOperation.confirmButton.Click +=来添加事件处理器,但是您需要确保事件处理器内部的逻辑是正确的,并且确实在您期望的时候被调用。

    为了解决您的问题,我建议以下几个步骤:

    • 确保Value变量在整个应用程序中只被赋值一次,并且在confirmButton_Click事件处理方法中赋值为true之后没有其他地方修改它。
    • 检查corporateAccountQrCodePaymentInquiryAndOperation窗体的实例是否是您期望的那个实例,并且确保没有其他地方重新创建了这个实例。
    • 重新审视事件处理器的逻辑,确保它在正确的条件下被调用,并且执行了正确的操作。您可以尝试在事件处理器中添加一些调试输出,比如使用Console.WriteLine来确认事件处理器是否被调用。

    此外,如果您希望在不修改窗体代码的情况下实现关闭窗体的功能,您可以考虑使用事件或回调函数来通知外部代码窗体应该关闭,然后在外部代码中调用窗体的Close方法。

    希望这些建议对您有所帮助!如果您需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月17日
  • 已采纳回答 7月9日
  • 创建了问题 7月9日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。