【问题标题】:Trouble with calling methods in c#在c#中调用方法的问题
【发布时间】:2014-12-12 10:19:57
【问题描述】:

我正在为介绍级别的 c# 课程做一些事情,而且我很难找出方法。这本书在某些情况下似乎不是很清楚。对于我目前的任务,我正在尝试制作一个计算住院费用的程序。我们需要为程序提供三种不同的方法。我觉得我至少正确创建了这些方法,但我不确定如何在按钮单击事件期间使程序从这些方法中输出内容。这是我到目前为止所做的(我在 calcBtn_Click 方法中尝试了大约一百万种不同的东西,但我很困惑)。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int CalcStayCharges()
        {
            int lengthOfStay;
            lengthOfStay = int.Parse(dayStayed.Text);
            int totalStayCharges = (350 * lengthOfStay);
            return totalStayCharges;
        }

        private double CalcMiscCharges()
        {
            double medCharges;
            medCharges = double.Parse(medCharge.Text);

            double surgCharges;
            surgCharges = double.Parse(surgicalCharge.Text);

            double labFees;
            labFees = double.Parse(labFee.Text);

            double rehabCharges;
            rehabCharges = double.Parse(rehabCharge.Text);

            double MiscCharge = (medCharges + surgCharges + labFees + rehabCharges);
            return MiscCharge;
        }


        public double CalcTotalCharges()
        {


            double miscCharges = CalcMiscCharges();
            int stayCharges = CalcStayCharges();
            double totalCharges = miscCharges + stayCharges;
            return totalCharges;

        }


        private void calcBtn_Click(object sender, EventArgs e)
        {


           MessageBox.Show(CalcTotalCharges());
        }
    }
}

【问题讨论】:

  • 有什么问题??
  • 收到消息框了吗?它只是有错误的号码吗?你知道如何使用调试器、设置断点和使用监视窗口吗?
  • 看来你说得对。问题出在哪里?
  • MessageBox.Show 需要一个字符串,所以你可能不得不说MessageBox.Show(CalcTotalCharges().ToString());
  • 错误 1 ​​'System.Windows.Forms.MessageBox.Show(string)' 的最佳重载方法匹配有一些无效参数

标签: c# methods return


【解决方案1】:

您必须在代码中的某处将从方法返回的值分配给变量,然后显示/显示该变量。例如:

int stayCharcges = CalcStayCharges();

假设用户在文本框中填写了“3”。那么stayCharges 将是“1050”。现在您可以在标签中显示它或通过 MessageBox 显示它:

ResultLabel.Text = String.Format("Charge: {0}", stayCharges);
//or
ResultLabel.Tekst = stayCharges.ToString() //only the number

//With a MessageBox
MessageBox.Show(String.Format("Charge: {0}", stayCharge);

【讨论】:

    【解决方案2】:

    如果你想分别展示这三个不同的东西,你可以这样做:

    private void calcBtn_Click(object sender, EventArgs e)
    {
        string display = "Stay Charges: " + CalcStayCharges() + Environment.NewLine +
                         "Misc Charges: " + CalcMiscCharges() + Environment.NewLine + 
                         "Total Charges: " + CalcTotalCharges();
    
         MessageBox.Show(display);
    }
    

    在这里,我正在构建一个将传递给 MessageBox.Show() 的字符串。 MessageBox.Show() 需要一个字符串参数,但您当前正在传递一个双精度。该字符串添加了一些英文文本来解释每个数字是什么,并显示该数字。 Environment.NewLine 使每笔费用出现在消息框中的单独一行上。

    【讨论】:

      【解决方案3】:

      在您的表单上放置一些标签,称为:

      • lblStayCharge
      • lblMiscCharge
      • lblTotalCharge

      然后在您的点击事件中:

      lblMiscCharge.Text = Convert.ToString(CalcMiscCharges());
      lblStayCharge.Text = Convert.ToString(CalcStayCharges());
      lblTotalCharge.Text = Convert.ToString(CalcTotalCharges());
      

      您的 CalcTotalCharges 方法也可以改进为:

        public double CalcTotalCharges()
          {
             return CalcMiscCharges() + CalcStayCharges();
          }
      

      更新

      一种更强大的方法来验证来自 GUI 的输入。

      private int CalcStayCharges()
      {
         int lengthOfStay;
         if (int.TryParse(dayStayed.Text, out lengthReturnOfStay))
         {
            return 350 * lengthOfStay; 
         }
         return 0;       
      }
      
      
          private double CalcMiscCharges()
          {
              double medCharges;
              double labFees;
              double surgCharges;
              double rehabCharges;
      
              if (double.TryParse(medCharge.Text, out medCharges) && 
                  double.TryParse(surgicalCharge.Text, out surgCharges) &&
                  double.TryParse(labFee.Text, out labFees) &&
                  double.TryParse(rehabCharge.Text, out rehabCharges)
                 )  
              {
                  return (medCharges + surgCharges + labFees + rehabCharges);
              }
            return 0;
          }
      

      【讨论】:

      • 感谢分享第二部分。这比我尝试使用的要干净得多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2011-07-24
      相关资源
      最近更新 更多