C# 另一个窗体上的控件由于';s保护级别
这给我带来了一些问题,因为TXTDIRSELECT位于一个表单上,我正在尝试从另一个表单更改它。我试着查找,整个表单本身已经是公共的,而不是私有的 或者,我如何创建一个可以在任何形式上访问的变量 哪里出了问题C# 另一个窗体上的控件由于';s保护级别,c#,forms,class,C#,Forms,Class,这给我带来了一些问题,因为TXTDIRSELECT位于一个表单上,我正在尝试从另一个表单更改它。我试着查找,整个表单本身已经是公共的,而不是私有的 或者,我如何创建一个可以在任何形式上访问的变量 哪里出了问题 if(canFindTF2==true) { TF2SelectDir.txtTF2DirSelect.Text=“”; TF2SelectDir所在的表单已为公共表单 公共部分类TF2SelectDir:表单 { 公共TF2SelectDir() { 初始化组件(); } 有什么想法吗?
if(canFindTF2==true)
{
TF2SelectDir.txtTF2DirSelect.Text=“”;
TF2SelectDir所在的表单已为公共表单
公共部分类TF2SelectDir:表单
{
公共TF2SelectDir()
{
初始化组件();
}
有什么想法吗?谢谢
更新
在TF2SelectDir.Designer.cs的底部,我发现
private System.Windows.Forms.TextBox txtfuddirselect;
private System.Windows.Forms.Button btnSaveTF2Dir;
private System.Windows.Forms.Label lblExample;
但是,当我在TXTF2DirSelect上将private更改为public时,我遇到了一个新错误。
“非静态字段、方法或属性'TF2SelectDir.txtTF2DirSelect'需要对象引用-错误代码CS0120,因为我无法评论,所以我将此作为答案发布。” 从单独的窗体访问控件可能不是最好的主意。我建议您使用属性。这是Microsoft的属性定义和使用示例 在我看来,在两个表单之间共享数据的另一个更好的方法是使用事件。微软对事件的描述也是如此
如果您需要一个如何使用这两种方法的工作示例,我想先看看您的努力,然后我们可以在此基础上继续。以下面的方式公开控件。为什么???@monstertjie_za已经提供了一些关于这方面的好链接
TF2SelectDir.txtTF2DirSelect.Text = "";
可以在任何窗体上访问的变量很可能是全局变量。在两个窗体之间进行通信的更好方法是使用events.if(canFindTF2==true){TF2SelectDir.txtTF2DirSelect.Text=“”;}------命名空间TF2Overwatch{公共部分类TF2SelectDir:form{public TF2SelectDir(){InitializeComponent();}etc etc@khlr Awesome,我该怎么做呢?你应该把你的代码作为问题的编辑来分享。代码很难作为注释来阅读。如果你搜索txtTF2Select的定义,你会发现它在默认情况下是受保护的。@AlexJolig我真的没有用c#编写太多代码,这对我来说都是未经探索的领域,和编辑器。我如何将其更改为未受保护?现在我将编辑原始问题。对于一个工作示例,您可以看一看。伙计,这个网站真正遵循“做您自己的该死的代码”"。我可以问一下,为什么不使用一个全局变量?它只是将目录以字符串形式存储到一个文件中,其他一些东西会看到它,这会有这样的缺点吗?这个目录会改变吗?或者是静态的,例如,一个公共目录,不会改变吗?@MaxBox如果你真的需要使用全局路径,请看一看这里:如果您可以避免这种情况,如果您的目录路径始终相同,我建议将其存储在.config文件中,一旦它第一次找到正确的目录,那么它就不应该更改。这就是我输入的内容,对吗?目前,它不会将其中的文本更改为“Test!”正如我所希望的。感谢到目前为止的帮助!(是的,它现在看起来很难看xP)好的..我想我明白你的意思了..你想把文本存储在表单中以备将来使用…就像每当你调用表单时,它都应该显示文本“test”在TXTXTDIRSELECT文本框中…对??是的!最终我想下载一个文件并将其放在另一个文件夹中,读取文本以找到它将放置文件的目录,但这是一般的想法。
namespace TF2Overwatch
{
public partial class TF2SelectDir : Form
{
//Approch 1 - usable when the projects most works are done
//without following a good architecture
//You can use a static variable to preserve the state and intilize each time
//a new instance is created
//Approch 2 - Responibilty of preserving text to initlize in textbox should be taken
//by the form who calling this form
//value will pass by consturtor or by exposing property
//all approch 2 code are kept commented for better understanding
private static string strTxtTF2DirSelectTextToInitize;
public TF2SelectDir()
{
InitializeComponent();
txtTF2DirSelect.Text = strTxtTF2DirSelectTextToInitize;
}
public static string TxtTF2DirSelectTextToInitlize
{
get
{
return strTxtTF2DirSelectTextToInitize;
}
set
{
strTxtTF2DirSelectTextToInitize = value;
}
}
//public TF2SelectDir(string txtTF2DirSelectText)
//{
// InitializeComponent();
// txtTF2DirSelect.Text = txtTF2DirSelectText;
//}
//public string TxtTF2DirSelectTextToInitlize
//{
// get
// {
// return txtTF2DirSelect.Text;
// }
// set
// {
// txtTF2DirSelect.Text = value;
// }
//}
}
public partial class SomeAnotherForm:Form
{
public SomeAnotherForm ()
{
InitializeComponent();
}
protected void InSomeAction(object Sender, EventArgs e)
{
if (canFindTF2 == true)
{
TF2SelectDir.TxtTF2DirSelectText = "Test";
TF2SelectDir t1 = new TF2SelectDir();
t1.Show();
//Approch 2
//TF2SelectDir t1 = new TF2SelectDir("Test");
//t1.Show();
//TF2SelectDir t1 = new TF2SelectDir();
//t1.TxtTF2DirSelectText="Test"; //look here TxtTF2DirSelectText is setting on instance not by class
//t1.Show();
}
}
}
}