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
。
如果我使用了完全错误的操作,请毫不犹豫地向我展示正确的操作。
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
在每个实例中可以具有不同的值(a
、b
)。在该代码的末尾,a.I
将是"Hello"
,而b.I
将是"World"
。