3

如果超类具有将标签更改为“Hello World”的函数 A()。如何让子类以相同的结果调用 A()?截至目前,我没有收到编译错误,但文本不会改变!

示例代码:

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

    private void button1_Click(object sender, EventArgs e)
    {
        FunctionA("Hello");
    }  

    public void FunctionA(string s)
    {
        label1.Text = s;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Test t = new Test();
    }
}

class Test : Form1
{
    public Test()
    {
        FunctionA("World");
    }
}
4

2 回答 2

0

两者都Forms必须拥有自己的Label控制权才能显示消息。您可能正在使用一个Label来显示不属于显示的消息Form

我不确定要尝试实现什么,但为什么不直接将Label控件传递给 FunctionA 以通过这种方式修改消息:

public void FunctionA(ref Label lbl, string s)
{
    lbl.Text = s;
}

补充:你可以这样做:

  1. 首先创建FormA.

    static void Main()
    {
        //...
        FormA frmA = new FormA();
        Application.Run(frmA);
    }
    
  2. 通过公开参数化构造函数来传递 to 的实例,FormA以便从内部进行任何操作。FormBFormAFormB

    FormB frmB = new FormB(frmA);
    
    //...
    
    public partial class FormB : Form
    {
        public FormB()
        {
            InitializeComponent();
        }
    
        //parameterized constructor
        public FormB(FormA obj)
        {
            FormA = obj;
            InitializeComponent();
        }
    
        public FormA FormA { get; set; }   
    }
    
于 2012-11-05T02:18:11.613 回答
0

在运行主表单之前实例化您的表单。将 form1 引用分配给 form2

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Form1 mainForm = new Form1();
        new Form2() { Form1 = mainForm }.Show();
        Application.Run(mainForm);
    }
}

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

    public Form1 Form1 { get; set; }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Form1.Update("World");
    }
}

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

    private void button1_Click(object sender, EventArgs e)
    {
        this.Update("Hello");
    }

    public void Update(string text)
    {
        this.label1.Text = text;
    }
}
于 2012-11-05T03:02:35.163 回答