2016-06-27 2 views
5

Так что я пытаюсь передать локальную строку в другую форму в проекте C#. Это мой код:Нельзя присвоить свойство или индексу «-» только для чтения

Форма 1:

... 
Main frm = new Main(); 
frm.Passvalue = usrTxt.Text; 
frm.ShowDialog(); 

Форма 2

... 
public string Username; 
public string Passvalue 
{ 
    get { return Username; } 
} 

Я получаю сообщение об ошибке:

Property or indexer "Main.Passvalue" cannot be assigned to "--" it is read only

Я никогда не объявленную ничего, как ReadOnly, делает кто-нибудь знает, в чем проблема?

+2

я это потому, что вы не указали 'set' недвижимость для' Passvalue' –

ответ

2

Если вы хотите, чтобы иметь возможность установить вашу собственность, вы должны добавить установить обработчик:

public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } 
} 

Было бы легче, хотя использовать авто Реализуемый свойства сразу:

public string Username 
{ 
    get; 
    set; 
} 
2

Ваша недвижимость пропустит сеттер. Измените его на:

public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } 
} 
+0

Он работает теперь, спасибо! –

2

Проблема в том, что у вас есть только поглотитель для Form2.Passvalue, но не сеттер. Добавьте это в Form2:

public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } // add this setter 
} 
7

Это не имеет сеттер, что делает его только для чтения свойство, изменить его на:

public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } 
} 

Кстати, это кажется немного излишним, поскольку вы публично подвергая Username так или иначе. Обычно считается хорошей практикой, чтобы частные поля классов были приватными.

1

В собственности не установлен сеттер.

Вот код, который вы можете использовать для автозавершенных геттеров и сеттеров.

public string Username { get; set; } 
public string Passvalue { get; set; } 

Или, если вы хотите получить и установить значение UserName из Passvalue, вы можете использовать

public string Username { get; set; } 
public string Passvalue 
{ 
    get { return Username; } 
    set { Username = value; } 
}