Вызов базового метода Text в пользовательском TextBox - PullRequest
0 голосов
/ 13 июля 2009

Я пытаюсь создать CurrencyTextBox, который наследуется от TextBox. Я вижу действительно странное поведение, которое просто не понимаю.

После большого количества испытаний, я думаю, я могу подвести итог следующим образом:

В коде класса, когда я обращаюсь к base.Text (чтобы получить текст текстового поля), я фактически получаю возвращаемое значение моего переопределенного свойства Text.

Я думал, что ключевое слово base обеспечит вызов методов базового объекта.

Для демонстрации:


public class cTestTextBox : System.Windows.Forms.TextBox
    {
        string strText = "";

        public cTestTextBox()
        {
            SetVal("AAA");
            base.Text = "TEST";
        }
        public override string Text
        {
            get
            {
                string s = strText;
                s = "++" + s + "++";
                return s;
            }
        }
        public void SetVal(string val)
        {
            strText = val;
        }
    }

Поместите этот элемент управления в форму и установите точку останова на конструкторе. Запустите приложение. Наведите указатель мыши на выражение base.Text. Обратите внимание, что во всплывающей подсказке отображается значение переопределенного свойства, а не базовое свойство. Выполните оператор SetVal () и снова наведите указатель мыши на выражение base.Text. Обратите внимание, что на панели инструментов отображается значение переопределенного свойства, а не базовое свойство.

Как получить надежный доступ к свойству Text текстового поля, от которого я наследую?

1 Ответ

0 голосов
/ 13 июля 2009

Интересно. Не уверен, что случилось с «удаленным» постом, но он, возможно, был на правильном пути. Чтобы увидеть, вызывает ли ваш базовый класс ваш .Text, поместите что-то в .Text, которое вызывает бесконечный цикл, если это то, что происходит:

public override string Text
{
    get
    {
         return base.Text; 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...