2012-02-25 99 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

在這種情況下發布您的實際代碼。 – 2012-02-25 19:53:14

+0

在您的代碼中,您正在創建Form1類的兩個實例,但只有一個會顯示或激活。什麼叫OnMessage,爲什麼它是一個靜態方法?您應該嘗試將它作爲一個非靜態方法放在Form1類中。從您的Form1類中,您應該能夠直接訪問listPlayers。 – 2012-02-25 20:31:49

回答

1

Form1是一個類型,而不是一個實例。

在你Program做這樣的事情

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); 
    } 
} 

現在,你可以參考這樣的形式(listPlayers必須是public)

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

作爲替代方案,你可以暴露播放列表作爲靜態屬性Form1

現在

可以像

Form1.PlayerList.Add("PlayersName"); 

訪問它,因爲它是靜態的,即PlayerList屬於的類型(類)Form1,不要的Form1一個實例(對象)。這僅適用於您只有一個Form1實例隨時打開的情況。


鑑於

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可以在每個實例中具有不同的值(a,b)。在此代碼a.I的末尾將是"Hello"b.I將是"World"

+0

好的,謝謝。現在保護錯誤... – 2012-02-25 20:02:24

+0

那麼'listPlayers'被聲明爲私有。在屬性窗口中,您可以將'listPlayers'的'Modifiers'屬性(在'Design'類中找到)設置爲'Public'。 「私人」成員只能在課堂內部看到。請參閱MSDN上的[Access修飾符(C#編程指南)](http://msdn.microsoft.com/zh-cn/library/ms173121.aspx)。 – 2012-02-25 20:26:24