CheckedListBox编辑/添加

时间:2012-02-25 19:44:06

标签: c# user-interface checkedlistbox

我有这个Checked List Box,listPlayers。我想在被问到时添加(或删除)名称。这些名称自然是string输入。

以下是相关代码:

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"

..好吧,我的错误处理技巧不是最好的。就像我说的,一切都是public

如果我使用完全错误的行为,请不要犹豫,向我展示正确的行为。

1 个答案:

答案 0 :(得分: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必须公开)

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

作为替代方案,您可以将播放器列表公开为Form1

中的静态属性
public partial class Form1 : Form
{
    public static CheckedListBox PlayerList { get; private set; }

    public Form1()
    {
        InitializeComponent();
        PlayerList = listPlayers;
    }

    ...
}

现在您可以像

一样访问它
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在每个实例中都可以有不同的值(ab)。在此代码的末尾,a.I将为"Hello"b.I将为"World"