web-dev-qa-db-ja.com

プロパティまたはインデクサーを「-」に割り当てることはできません。読み取り専用です

だから私はローカル文字列をc#プロジェクトの別のフォームに渡そうとしています。これは私のコードです:

フォーム1:

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

フォーム2

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

エラーが発生しています:

プロパティまたはインデクサー「Main.Passvalue」を「-」に割り当てることができません。読み取り専用です

私はReadOnlyとして何も宣言しませんでしたが、誰がここの問題が何かを知っていますか?

8
hasno l

セッターがないため、読み取り専用のプロパティになり、次のように変更します。

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

ちなみに、Usernameを公開しているので、これは少し冗長に見えます。一般に、クラスフィールドをプライベートにすることをお勧めします。

11
James Jenkinson

setプロパティを使用できるようにするには、setハンドラーを追加する必要があります。

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

ただし、自動実装プロパティをすぐに使用する方が簡単です。

public string Username
{
    get;
    set;
}
3
Patrick Hofman

あなたの財産はセッターを逃しています。次のように変更します。

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

問題は、Form2.Passvalueに対してgetterのみがあり、setterがないことです。これをForm2に追加します:

public string Passvalue
{
    get { return Username; }
    set { Username = value; } // add this setter
}
2
René Vogt

プロパティにはセッターがありません。

自動実装されたゲッターとセッターに使用できるコードを次に示します。

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

または、PassvalueからUserNameの値を取得および設定する場合は、次を使用できます。

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