Почему мой UserControl не сохраняет свою инициализацию? - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть 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. к вещам, но это, вероятно, не способ исправить код. :)

Спасибо как всегда!

РЕДАКТИРОВАТЬ: Шаг в код конструктора, как предложил Пит, показал мне, где происходила перезапись. Сначала я вызывал конструктор пользовательского элемента управления, а затем значения перезаписывались значениями по умолчанию. Я не указал никаких значений по умолчанию (предложение Sanjeevakumar Hiremath), поэтому значения по умолчанию были значениями примитивных типов (для int это было 0).

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

То, что вы, вероятно, видите здесь, является артефактом дизайнера. Если вы когда-либо открывали MainForm в конструкторе после добавления MyUserControl, он, вероятно, записал значения по умолчанию MyUserControl в сгенерированном InitializeComponent методе MainForm. Эти записанные значения переназначаются после запуска конструктора MyUserControl, следовательно, они перезаписывают установленные вами значения.

Вы можете контролировать это поведение с помощью DesignerSerializationVisibilityAttribute

2 голосов
/ 05 апреля 2011

Использовать [DefaultValue] Атрибут.Позволяет указать значение по умолчанию для свойства элемента управления, если оно не указано в конструкторе.

...