我下面的 document all 是完成简单的“四则运算”:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace SimpleCalculator
{
    public partial class Form1 : Form
    {
        public Form1 ()
        {
            InitializeComponent();
        }        private void btnCompute_Click (object sender, EventArgs e)
        {
            int i1; //存储第一个操作符的值.
            int i2; //存储第二个操作符的值.
            int result = 0; //存储操作的结果.
            string sText01 = textBox1.Text; //接收textBox1中的信息。
            string sText02 = textBox2.Text; //接收textBox2中的信息。
            //如果textBox1中的string类型不能转换成int类型,则报错.
            if (!int.TryParse(sText01, out i1) )
            {
                MessageBox.Show("第一个操作数的格式不正确!");
                return; //程序退出.
            }
            //如果textBox2中的string类型不能转换成int类型,则报错.
            if (!int.TryParse(sText02, out i2))
            {
                MessageBox.Show("第二个操作数的格式不正确!");
                return; //程序退出.
            }
            //获取用户选择操作符的信息,转换车string类型.
            string operatorCheck = Convert.ToString(cboxOperator.SelectedItem);
            //计算四则运算.
            switch (operatorCheck)
            {
                case "+" :
                    result = i1 + i2;
                    break;
                case "-":
                    result = i1 - i2;
                    break;
                case "*":
                    result = i1 * i2;
                    break;
                case "/":
                    //当被除数为0时,报错.
                    if (0 == i2)
                    {
                        MessageBox.Show("被除数不能为0!");
                        return;
                    }
                    result = i1 / i2;
                    break;
                default:
                    MessageBox.Show("Unkown Operator!");
                    break;
            }
            txtResult.Text = Convert.ToString(result) ; //输出结果.
            //MessageBox.Show(cboxOperator.SelectedItem.ToString());
            //MessageBox.Show(cboxOperator.SelectedText.ToString());
            //MessageBox.Show(cboxOperator.SelectedValue.ToString());
            //MessageBox.Show(cboxOperator.SelectedIndex.ToString());
        }        private void Form1_Load(object sender, EventArgs e)
        {
            string s1 = "+";
            string s2 = "-";
            string s3 = "*";
            string s4 = "/";
            cboxOperator.Items.Add(s1);
            cboxOperator.Items.Add(s2);
            cboxOperator.Items.Add(s3);
            cboxOperator.Items.Add(s4);
        }

    }
}我问的问题很简单,请问我在"Form1_Load(object sender, EventArgs e)"这个方法中添加内容 和 我在代码的外部(即在 ComboBox中的 Properties 的Item 的 Collection中直接添加,我发现是达到一样的效果的!但是我不知道他们是不是还有什么不同?

解决方案 »

  1.   

    没什么不同,只是添加数据而已,直接编辑属性,那个编译期就给你编译进去了,load中是动态添加的
      

  2.   

    如果说有什么不同的话,就是放在Load中会比你直接编辑属性要晚一点执行.如果你在构造函数里调用CboxOperator.Items.Count的话,你会发现它等于0,而在Load事件之后,就等于4了.
    winform程序里有个"分布类"的概念.你看下你的窗体类前面有个关键字partial,还有个同名.Designer文件.在编译后,这些东西都会放到一个类里面.在.Designer文件的InitializeComponent()方法里,就是你拖控件,编辑属性所做的操作.而这个方法在你窗体构造函数里.所以,当你要调用窗体时,肯定要先调用构造函数(new),然后才触发Load事件.
    这就是区别吧.
      

  3.   

    同意楼上观点也就是说 一个是自己在属性里添加,相当于手动在构造函数里添加.
    而自己在Load方法里面添加,相当于在窗体加载显示前才添加.
    两个效果没什么区别,都是仅执行一次.当然如果添加的东西较多的话,请考虑构造方法执行的时间,是随用随New,还是New出来后就不再New的,如果是随用随New的话,添加Item放在哪里都一样,如果是不再New的话,那么放在构造函数里会增加构造函数执行的时间,一般都会放在程序启动的时间里,而放在Load里则会增加该Form的首次显示时间,即相当于第一次ShowDialog的时间.当然以上差别可以不考虑,当添加东西较多的话,请使用多线程读取数据,当窗体需要是直接一次性添加进去即可.