我是C#的新手,我只是想学习基础知识。我正在创建的是一个程序,它读取我玩的2个游戏的.txt文件(日志文件)。无尽的任务和MUD。我想要做的是当我加载.txt文件时,它会检测它是EQ日志还是MUD日志,然后显示它将开始填充的正确数据字段(文本框等)
首先,我打算使用groupBox,只是隐藏/显示正确的组框,具体取决于加载的日志。然而,在我的研究中,我了解了UserControls。
我喜欢将用户控件加载到面板中的想法,以便浏览到文本文件的文本框和按钮始终是常量,然后它只是根据加载的文本文件更改它们下面的数据。
我的问题是我的所有代码都在我的" form1.cs"当我尝试更新usercontrol中的代码时,它会抛出有关保护级别的错误。
我的问题是,我用来打开和读取日志文件的代码是FileSystemWatcher。这个代码必须在usercontrol.cs文件上,还是可以在form1.cs文件上,如果可以在form1.cs文件上,我如何填充文本框或任何其他类型的字段用户控件?
我在尝试:
myControl.textbox1.Text = "Test";
我是从form.cs代码执行此操作,然后读取日志行并且它匹配某个短语,但它只是说保护级别是错误的并且不会工作。我将usercontrol上的所有内容都定义为公开,但显然我没有正确考虑这一点。
我必须以某种方式"包括" form1.cs上的usercontrol.cs?我一直试图研究这个,但是我无法找到任何可以帮助我的东西,所以要么a)它真正显而易见,我只是没有得到它或b)我做错了而不是完全理解。
也许groupBox最适合我想做的事情?用户控件是否设计为独立使用自己的代码而不是打开和关闭的东西?
我来自PHP / Web背景,所以我试图想到这就像我如何根据发生的事情将DIV视为可见且不可见。也许用户控件没有这样的工作,不应该被主表单进行交互,应该有自己的代码?
如果需要,我可以提供代码,但这更像是理解概念问题而不是代码问题。一旦我理解了它应该如何表现,我就可以弄清楚代码。
编辑: 以下是一些代码,展示了我正在努力学习的内容。我已将其简化为不包含FileWatcherSystem,因为两者都会产生相同的错误。
我有form1.cs,在里面我定义了我的UserControl2,它只是一个用户控件盒和一个名为&#34的文本框; textBox1"
UserControl2 myControl = new UserControl2();
将此控件加载到form1上的panel1中。 我在form1.cs上也有一个按钮,当我点击它时,我试图用text&#34填充textBox1;测试"
代码如下所示:
private void button1_Click(object sender, EventArgs e)
{
myControl.textBox1.Text = "Test";
}
在这种情况下," textBox1"从上面用红色加下划线,当你将鼠标悬停在它上面时出错:
"UserControl2.textBox1" is inaccessible due to its protection level.
我可以使用该按钮成功运行以下命令:
panel1.Controls.Clear();
这将清除预先加载的控件(myControl),因此我相信我开始明白如何让控件在面板中显示/消失,但我仍然无法获得form1 .cs代码与UserControl2.cs文件中的控件进行交互。
答案 0 :(得分:1)
确保用户控件中的textBox1具有" public"访问修饰符而不是"私有"或者"受保护的"在哪里定义。
为了帮助处理概念位,您的用户控件就是它自己的类。 textbox1是此类的成员,因此只有您的类才能访问它,除非它被标记为public。 (如果它受到保护,那么从您的用户控件继承的类也可以访问它,但这里并不真正相关。)