调用改变组件(标签)的超类函数

时间:2012-11-05 02:11:51

标签: c# winforms class inheritance

如果超类具有将标签更改为“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");
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

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

ADDED:您可以这样做:

  1. 首先创建FormA

    的实例
    static void Main()
    {
        //...
        FormA frmA = new FormA();
        Application.Run(frmA);
    }
    
  2. FormA的实例传递给FormB,方法是在FormA内为FormB中的任何操作公开参数化构造函数。

    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; }   
    }
    

答案 1 :(得分: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;
    }
}