由于其保护级别,对另一种形式的控制是不可访问的

时间:2016-03-09 04:48:04

标签: c# forms class

TF2SelectDir.txtTF2DirSelect.Text = "";

这给了我一些问题,因为txtTF2DirSelect在一个表单上,我正在尝试从另一个表单更改它。我试着查看,整个表格本身已经公开,而不是私密。

或者,为此,我如何创建一个可以在任何表单上访问的变量?

出错的地方

if (canFindTF2 == true) { TF2SelectDir.txtTF2DirSelect.Text = "";

TF2SelectDir的表格已经公开

public partial class TF2SelectDir : Form { public TF2SelectDir() { InitializeComponent(); }

有什么想法吗?谢谢!

更新

在TF2SelectDir.Designer.cs的底部,我找到了

private System.Windows.Forms.TextBox txtTF2DirSelect; private System.Windows.Forms.Button btnSaveTF2Dir; private System.Windows.Forms.Label lblExample;

但是,当我在txtTF2DirSelect上将private更改为public时,我收到了一个新错误。 “非静态字段,方法或属性'TF2SelectDir.txtTF2DirSelect'需要对象引用 - 错误代码CS0120

2 个答案:

答案 0 :(得分:2)

由于我无法发表评论,我将此作为答案发布。

从单独的表单访问控件可能不是最好的主意。我建议你使用属性。 Here是Microsoft的属性定义和用法示例。

在我看来,在两种形式之间共享数据的另一种更好的方法是使用事件。再次,here是Microsoft对事件的描述。

如果你需要一个如何使用这些方法的工作示例,我希望先看看你的努力,然后我们可以在此基础上继续努力。

答案 1 :(得分:2)

以下方式曝光控制..为什么? @monstertjie_za已经提供了很少的好链接。

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

            } 
        }
    }
}