我有我认为我初始化一些成员的用户控件:为什么我的UserControl不能保持其初始化?
// MyUserControl.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyNamespace
{
public partial class MyUserControl : UserControl
{
private string m_myString;
private int m_myInt;
public string MyString
{
get { return m_myString; }
set { m_myString = value; }
}
public int MyInt
{
get { return m_myInt; }
set { m_myInt = value; }
}
public MyUserControl()
{
InitializeComponent();
MyString = ""; // was null, now I think it's ""
MyInt = 5; // was 0, now I think it's 5
}
// .........
}
}
当我插入这个控制到我的主要形式,虽然和调用内MyUserControl
检查值的功能,事情并不像他们正在初始化:
// MainForm.cs
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 MyProgram
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MyButton_Click(object sender, EventArgs e)
{
// this prints 0 rather than 5
MessageBox.Show(this.theUserControl.MyInt.ToString());
}
}
}
我猜这是一个真正简单错误,但我不知道在哪里。我已经尝试过预先添加this.
,但这可能不是固定代码的方法。 :)
一如既往的感谢!
编辑: Pete建议您进入设计器代码,告诉我写入过程发生在哪里。首先我调用用户控件的构造函数,然后再用默认值覆盖这些值。我没有指定任何默认值(Sanjeevakumar Hiremath的建议),所以默认值是原始类型的默认值(对于int
,这是0)。
'私人字符串m_myInt控制这种行为;',物业类型为int。发布编码并重现问题的代码。 – 2011-04-04 22:01:11
你的设计器代码是什么样的?你是否在你的UC构造函数代码中设置了一个断点,以查看什么时候碰到和什么时候出现? – 2011-04-04 22:02:08
@Hans:对不起!我将变量名称更改为通用事物,并忘记改变它。 – John 2011-04-04 22:02:48