CheckedListBox编辑/添加

本文关键字:添加 编辑 CheckedListBox | 更新日期: 2023-09-27 18:25:52

我有这个复选框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

如果我使用了完全错误的操作,请毫不犹豫地向我展示正确的操作。

CheckedListBox编辑/添加

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"