Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 另一个窗体上的控件由于';s保护级别_C#_Forms_Class - Fatal编程技术网

C# 另一个窗体上的控件由于';s保护级别

C# 另一个窗体上的控件由于';s保护级别,c#,forms,class,C#,Forms,Class,这给我带来了一些问题,因为TXTDIRSELECT位于一个表单上,我正在尝试从另一个表单更改它。我试着查找,整个表单本身已经是公共的,而不是私有的 或者,我如何创建一个可以在任何形式上访问的变量 哪里出了问题 if(canFindTF2==true) { TF2SelectDir.txtTF2DirSelect.Text=“”; TF2SelectDir所在的表单已为公共表单 公共部分类TF2SelectDir:表单 { 公共TF2SelectDir() { 初始化组件(); } 有什么想法吗?

这给我带来了一些问题,因为TXTDIRSELECT位于一个表单上,我正在尝试从另一个表单更改它。我试着查找,整个表单本身已经是公共的,而不是私有的

或者,我如何创建一个可以在任何形式上访问的变量

哪里出了问题

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();

            } 
        }
    }
}