为什么不是我的用户保持其初始化?(Why isn't my UserControl keep

2019-10-29 16:09发布

我有一个用户控件为此我我初始化一些成员:

// 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. 的事情,但是这可能不是去修复代码的方式。 :)

感谢一如既往!

编辑:步入设计师代码皮特提示表明我在哪里写上发生了什么。 首先,我叫用户控件的构造函数,再后来,价值观得到了用默认值覆盖。 我没有指定任何默认值(Sanjeevakumar Hiremath的建议),这样的默认值是那些基本数据类型(用于int此为0)。

Answer 1:

你很可能看到的是设计师的神器。 如果你打开了MainForm一个设计师,你加入后MyUserControl很可能记录的默认值MyUserControl在生成InitializeComponent方法MainForm 。 这些记录的值被重新分配的构造后MyUserControl运行,因此他们覆盖您设置的值。

您可以通过使用的控制这种行为DesignerSerializationVisibilityAttribute

  • http://msdn.microsoft.com/en-us/library/system.componentmodel.designerserializationvisibilityattribute.designerserializationvisibilityattribute.aspx#Y375


Answer 2:

使用[默认值]属性。 它可以让你为当在设计中没有指定值控件的属性指定默认值。



文章来源: Why isn't my UserControl keeping its initialization?