对于C#我很新,我只是想学习基础知识。我正在创建的是一个为我玩的2个游戏读取.txt文件(日志文件)的程序。无尽的任务和MUD。我想要做的是当我加载.txt文件时,它会检测它的EQ日志或MUD日志,然后显示它将开始填充的正确数据字段(文本框等)向UserControls发送数据的表格
At首先,我打算使用一个groupBox,根据哪个日志被加载,隐藏/显示正确的groupbox。然而在我的研究中,我了解了UserControls。
我喜欢加载用户控件到面板的想法,这样的文本框和按钮浏览到该文本文件是始终不变,那么它只是改变了其不同的文本文件被加载在它们下面的数据。
我的问题是我所有的代码都在我的“form1.cs”中,当我尝试更新usercontrol中的代码时,它会引发有关保护级别的错误。
我的问题是,我用来打开和读取日志文件的代码是一个FileSystemWatcher。该代码必须位于usercontrol.cs文件中,还是可以位于form1.cs文件中,如果可以放在form1.cs文件中,该如何填充文本框或其他任何类型的字段用户控件?
我尝试:
myControl.textbox1.Text = "Test";
我从form.cs代码这样做的,之后读取一行的日志,它相匹配的某些特定的词组,但它只是说,保护水平是错误的并不会工作。我将usercontrol上的所有东西都定义为public,但显然我没有正确地考虑这个问题。
我必须以某种方式“包含”form1.cs上的usercontrol.cs吗?我一直在试图研究这个,但是我找不到任何能够帮助我的事情,所以要么a)其真正的明显,我只是没有得到它或b)我做的事情完全错误,根本不理解。
也许groupBox的最适合我在做什么?用户控件是否被设计为独立于自己的代码工作,而不是被打开和关闭的东西?
我来自一个PHP/Web背景,所以我想这样想怎么变成DIV的可见和不可见取决于发生了什么。也许usercontrols不这样工作,不应该与主窗体交互,并应该有自己的代码?
如果需要,我可以提供代码,但这更多的是理解概念问题,而不是代码问题。一旦我明白它应该如何行事,我大概可以弄清代码。
编辑: 下面是一些代码,显示了我想学的东西。我已将其简化为不包含FileWatcherSystem,因为两者都生成相同的错误。
我有Form1.cs和里面,我很确定我的UserControl2这仅仅是一个用户控件框和名为“textBox1的”
UserControl2 myControl = new UserControl2();
文本框此控件加载到PANEL1这是在Form1的.cs。 我也在form1上有一个按钮。CS,当我点击它,我试图填补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文件中的控件一起使用。
您能否发布实际的异常消息,我怀疑您的错误是由于跨线程访问引起的。也就是说,一个控件(用户或其他)只能从UI线程访问,但是你的'FileSystemWatcher'正在使用backgound线程来完成它的工作。 – CodingGorilla