【问题标题】:Second form not displaying correctly第二种形式显示不正确
【发布时间】:2013-10-15 17:22:08
【问题描述】:

我创建了两种不同的表单,一种供用户选择值,另一种用于显示所有总成本。

我确实声明了另一个类的一个实例,并将两个持有费用的变量传递给它。在第二个类中,我有一个构造函数接受参数,然后将它们分配给第二种形式中的变量。

当尝试使用“.ShowDialog();”在第二个中显示结果时方法,表单显示为空白,上面没有任何内容。

第一种形式:

namespace DormAndMeal
{
    public partial class MainForm : Form
    {
        int ALLENPRICE = 1500;
        int PIKEPRICE = 1600;
        int FARTHINGPRICE = 1800;
        int UNIVERSITYPRICE = 2500;

        int MEAL7 = 600;
        int MEAL14 = 1200;
        int UNLIMITEDMEAL = 1700;



        public MainForm()
        {
            InitializeComponent();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            // close
            this.Close();
        }

        private void btnOkay_Click(object sender, EventArgs e)
        {

            int roomCharge = 0;
            int foodCharge = 0;

            // Checking for the room plan chosen, assigning price to roomCharge
            if (radAllen.Checked)
            {
                roomCharge = ALLENPRICE;
            }
            else if (radPike.Checked)
            {
                roomCharge = PIKEPRICE;
            }
            else if (radFarthing.Checked)
            {
                roomCharge = FARTHINGPRICE;
            }
            else if (radUniversity.Checked)
            {
                roomCharge = UNIVERSITYPRICE;
            }


            // Checking for which meal plan was selected, assign price to foodCharge
            if (radMeal1.Checked)
            {
                foodCharge = MEAL7;
            }
            else if (radMeal2.Checked)
            {
                foodCharge = MEAL14;
            }
            else if (radMeal3.Checked)
            {
                foodCharge = UNLIMITEDMEAL;
            }

            // Instance of Charges form
            Charges myCharges = new Charges(foodCharge, roomCharge);

            // Display the form
            myCharges.ShowDialog();
        }
    }
}

如您所见,表单会找到选择了哪些单选按钮并相应地分配价格,然后创建第二个表单的实例并显示它。

表格2:

namespace DormAndMeal
{
    public partial class Charges : Form
    {
        int foodTotal;
        int roomTotal;

        public Charges()
        {
            InitializeComponent();
        }

        public Charges(int food, int room)
        {
            this.roomTotal = room;
            this.foodTotal = food;
        }

        private void Charges_Load(object sender, EventArgs e)
        {
            lblFood.Text = foodTotal.ToString("c");
            lblRoom.Text = roomTotal.ToString("c");

            lblTotal.Text = (foodTotal + roomTotal).ToString("c");
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            // close
            this.Close();
        }
    }
}

这个表单有一个构造函数来接受参数并分配它们,然后遍历并将它们显示给位于表单上的适当变量。

由于某种原因,第二个表单显示为空白。

【问题讨论】:

  • 那么第二个表单应该有一个按钮和3个标签?

标签: c# winforms forms


【解决方案1】:

您没有调用InitializeComponents 方法,它将从设计器文件中创建所有控件:

public Charges(int food, int room)
{
  InitializeComponent();
  this.roomTotal = room;
  this.foodTotal = food;
}

或者如 cmets 中所指出的,您可以调用其他构造函数:

public Charges()
{
  InitializeComponent();
}

public Charges(int food, int room)
  : this()
{
  this.roomTotal = room;
  this.foodTotal = food;
}

【讨论】:

  • 为了澄清/额外解释:仅仅因为你制作了另一个构造函数并不意味着它会调用以前的构造函数。一个中的所有逻辑都必须复制到另一个。更好的是,让两个构造函数都调用一个通用函数来进行“设置”,然后再执行您独特的逻辑。
  • 我会调用基本构造函数(使用: this())而不是在每个构造函数中调用InitializeComponent。
  • public Charges(int food, int room) : this() 是让默认构造函数运行的好语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多