0

好的,所以我在一种形式中有六个变量,当通过按钮调用各种方法时,它们都会发生变化。

在另一种形式中,我有六个相应的标签。我想从第一个表单中获取变量,并SomeLabel.text在按下第一个表单上的按钮时在第二个表单中设置。

我一直在尝试以这种方式做到这一点,Name=Mainform.InitializeComponent.SomeLabel.Text;但这不起作用。我知道该InitializeComponent方法是私有的。我已经尝试将其更改为公开,但这也没有证明是富有成效的(也不是很好的编码)。所以我来这里问我该怎么做。我正在考虑使用获取和设置设置,但我仍然无法从第一个表单访问标签。我没有包含我的代码,因为其中没有任何损坏,并且所有需要的部分都在帖子中。

4

4 回答 4

1

您可以使用public/internal Method或使用“公共/内部属性”共享变量

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        Form2 frm = new Form2();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            frm.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frm.SetTextLabel1("Hello world");
            //or
            frm.Label1Text = "HEllo world again";
        }
    }
}


using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        //using method to set the value of label
        public void SetTextLabel1(string value)
        {

            label1.Text = value;
        }

        //using property to set the value of label
        public string Label1Text
        {
            set { label1.Text = value; }
        }
    }
}
于 2013-09-04T03:49:15.727 回答
0

好吧,您已经提供了一种快速而肮脏的方式。或者写一个类来保存这些公共数据,添加一个方法来从 form1 的按钮调用,该按钮触发一个事件,form2 订阅,读取数据并更新它的标签。他们都知道中间阶层,但都不需要知道对方的任何事情。

于 2013-09-04T03:55:23.880 回答
0

将标签的Modifier属性设置为Public。因此,您可以从 Form 对象访问标签。

于 2013-09-04T03:47:05.940 回答
0

为什么不将这六个变量作为 form2 中的 Public static。

public partial class Form1 : Form
{        
    private void button1_Click(object sender, EventArgs e)
    {
        Form2.VariableLable1 = "a";
        Form2.VariableLable2 = "b";
    }
}

public partial class Form2 : Form
{  
    public static string VariableLable1,VariableLable2;
    private void form_load(object sender, EventArgs e)
    {
        Lable1.Text = VariableLable1;
        Lable1.Text = VariableLable2;
    }
}
于 2013-09-04T04:59:45.883 回答