C# 利用接口在窗体间传递消息(很基础很实用)

接口是一组包含了函数型方法的数据结构。通过这组数据结构,客户代码可以调用组件对象的功能。

我们在实际开发中,经常要用到在窗体间传递数据。很多情况下,我们用委托把数据从子窗体传递到主窗体,这个例子我们来看下如何利用接口把数据从主窗体广播到所有子窗体。

新建一个工程,这里我用WPF举例,在WinForm内的实现是完全一样的。

我们看到工程的主窗体是 MainWindow.xaml

首先我们定义一个接口:

public interface IMessage
    {
        void Broadcast(string strMsg);
    }

里面有个方法 Broadcast(string strMsg);

接下来我们在工程内添加三个子窗体 WindowA.xaml,WindowB.xaml,WindowC.xaml

每个子窗体都放上一个 TextBlock, 默认名称:textBlock1

在每个子窗体都继承我们刚定义的接口,并实现这个接口:

public partial class WindowA : Window, IMessage
    {
        public WindowA()
        {
            InitializeComponent();
        }

        #region IMessage 成员

        public void Broadcast(string strMsg)
        {
            this.textBlock1.Text = strMsg;
        }

        #endregion
    }

public partial class WindowB : Window, IMessage
    {
        public WindowB()
        {
            InitializeComponent();
        }

        #region IMessage 成员

        public void Broadcast(string strMsg)
        {
            this.textBlock1.Text = strMsg;
        }

        #endregion
    }

public partial class WindowC: Window, IMessage
    {
        public WindowC()
        {
            InitializeComponent();
        }

        #region IMessage 成员

        public void Broadcast(string strMsg)
        {
            this.textBlock1.Text = strMsg;
        }

        #endregion
    }

在Visual Studio里有个小技巧,双击IMessage,就会出现一个实现接口的选项,点击实现接口,Visual Studio 就会自动帮你实现这个接口的所有内容代码。

现在我们看主窗体代码如何调用这个接口:

在主窗体添加一个按钮,

        private List bMsg = new List();//定义一个接口对象集合来保存消息接受者的引用
        WindowA a;
        WindowB b;
        WindowC c;
        public MainWindow()
        {
            InitializeComponent();
            a = new WindowA();           
            a.Show();          
            b = new WindowB();
            b.Show();
            c = new WindowC();
            c.Show();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
           bMsg.Add(a);//引用WindowA
            bMsg.Add(b);//引用WindowB
            bMsg.Add(c);//引用WindowC
            foreach (var item in bMsg)
            {
                item.Broadcast("hi");
            }
        }
    }

这样,当我们点击主窗体的按钮,字符串"hi"就会同时出现在3个子窗体的TextBlock上面。

完整代码下载

 

你可能感兴趣的:(C#)