2012-02-25 24 views
1

私はこのチェックリストボックス、listPlayersを持っています。私はそれが要求されたときに名前を追加(または削除)したいと思います。これらの名前は、string入力にあります。ここでCheckedListBox編集/追加

は、問題のコードです:

namespace TakoBot 
{ 
    static class Program 
    { 
     public static Form1 MainForm { get; private set; } 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      MainForm = new Form1(); 
      Application.Run(new Form1()); 
     } 
     public static void OnMessage(object sender, PlayerIOClient.Message m) 
     { 
      if (m.Type == "add") 
      { 
       NamesInt[m.GetString(1)] = m.GetInt(0); 
       NamesString[m.GetInt(0)] = m.GetString(1); 
       Program.MainForm.listPlayers.Add("PlayersName"); 
      } 
     } 
    } 
} 

アクションForm1.listPlayers.Add("PlayersName");を呼び出す際に、我々はエラーを取得:

"'MyProgram.Form1.listPlayers' is inaccessible due to its protection level" 

..Okayを、私のエラー処理能力が最高ではありません。私が言ったように、すべてはpublicです。

私が完全に間違った行動をしている場合は、躊躇しないでください。

+0

この場合、実際のコードを掲載してください。 –

+0

コードでは、Form1クラスの2つのインスタンスを作成していますが、1つしか表示されていないか、アクティブになっています。何がOnMessageを呼び出すのか、それはなぜ静的メソッドですか? Form1クラスに非静的メソッドとして配置する必要があります。あなたのForm1クラスから、あなたは直接listPlayersにアクセスできるはずです。 –

答えて

1

Form1は、インスタンスではなくタイプです。あなたのProgram

は今、あなたはこのような形式(listPlayersはパブリックでなければならない)別の方法として

Program.MainForm.listPlayers.Add("PlayersName"); 

を参照することができ、この

static class Program 
{ 
    public static Form1 MainForm { get; private set; } 

    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     MainForm = new Form1(); 
     Application.Run(MainForm); 
    } 
} 

ような何かを、あなたが公開する可能性があり静的プロパティとしてのプレイヤーリストForm1

それは PlayerListはない Form1のインスタンス(オブジェクト)に、型(クラス) Form1に属し、すなわち、静的であるため、

今、あなたは

Form1.PlayerList.Add("PlayersName"); 

のようにアクセスすることができます。これは、いつでもForm1のインスタンスが1つだけ開いている場合にのみ機能します。

class MyClass 
{ 
    public static string S; 
    public string I; 
} 

を考えると


あなたがこれを行うことができます

MyClass a = new MyClass(); 
MyClass b = new MyClass(); 

a.I = "Hello"; 
MyClass.S = "One"; 

b.I = "World"; 
MyClass.S = "Two"; 

静的変数MyClass.Sは、与えられた時間に一つの値だけを持つことができます。このコードの最後には"Two"になります。

インスタンス変数Iは、各インスタンスで異なる値を持つことができます(ab)。このコードの最後にa.I"Hello"になり、b.I"World"になります。

+0

申し訳ありません、ありがとうございます。今、保護エラー... –

+0

まあ 'listPlayers'はプライベートとして宣言されています。プロパティウィンドウで、 'listPlayers'の' Modifiers'プロパティ(カテゴリ 'Design'にあります)を' Public'に設定することができます。 'private'メンバはクラスの内部でのみ可視です。 MSDNの[アクセス修飾子(C#プログラミングガイド)](http://msdn.microsoft.com/en-us/library/ms173121.aspx)を参照してください。 –

関連する問題