3

スーパークラスに、ラベルを「HelloWorld」に変更する関数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表示の一部ではないメッセージを表示するために1つを使用している可能性があります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. 内からの操作のためにパラメーター化されたコンストラクターを公開することにより、のインスタンスを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 に答える