星期二, 9月 16, 2014

[C#] Interface

此論壇問題練習是根據前輩提供給原 PO 的建議
如果您是寫win form可以寫以下功能:form1、form2 都可以開啟 form3,form1 有text box、form2 有combo box,請寫出 form3 button click 後可以取得開始自己的那個表單裡控制項的值
  • 建立 IDemo Interface 並建立 showData Method
namespace WindowsFormsApplication1
{
    public interface IDemo
    {
        string showData();
    }
}

  • Form1 Code 和畫面
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form,IDemo
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Text = "Form1 內 Textbox 值";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3() { Tag = this};
            f3.ShowDialog();
        }

        public string showData()
        {
            return textBox1.Text;
        }
    }
}
[C#] Interface-1

  • Form2 Code 和畫面
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form ,IDemo
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            comboBox1.Text = "Form2 ComboxBox 內的值";
        }

        public string showData()
        {
            return comboBox1.Text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3() { Tag = this};
            f3.ShowDialog();
        }
    }
}
[C#] Interface-2
  • Form3 Code 和畫面
namespace WindowsFormsApplication1
{
    public partial class Form3 : Form 
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 練習一開始是想把 Tag 再鑄型為 Form1 和 Form2,
            // 才發現到必須寫判斷是假如 Form1 鑄型為 null 就進行 Form2 鑄型,
            // 那假如不只兩個 Form 的話,變成會沒完沒了,
            // 但透過鑄型為 IDemo 的情況下,就可以不管 Tag 內為誰,來呼叫 showData
            IDemo f = this.Tag as IDemo;
            MessageBox.Show(f.showData());   
        }
    }
}
[C#] Interface-3
  • 執行 Form1 的結果
[C#] Interface-4
  • 執行 Form2 的結果
[C#] Interface-5

沒有留言:

張貼留言