代码之家  ›  专栏  ›  技术社区  ›  Chathuranga Chandrasekara

用C语言在两个窗口之间发送信息#

  •  1
  • Chathuranga Chandrasekara  · 技术社区  · 16 年前

    这可能是一个新手问题。考虑下面的场景。

    • 假设我们有两个已经“加载”的windows窗体(即您)
      可以同时看到两种形式)
    • 包含一个文本标签。
    • 用户可以在文本框中输入字符串,然后按submit on

    实现这一目标的最佳方式是什么?有什么正式的方法吗?我不想不必要地增加变量范围。

    编辑:两个表单属于同一个应用程序

    3 回复  |  直到 16 年前
        1
  •  3
  •   Muad'Dib    16 年前

    假设这些表单是同一应用程序的一部分,则需要有一个公共数据模型,在该模型中保存数据,然后表单“绑定”到此数据模型。退房 M-V-C 或 M-V-VM 模式。这也会很好地将UI与数据分开。

        2
  •  1
  •   Gerrie Schenck    16 年前

    研究winforms中的模型-视图-控制器模式和数据绑定。

    创建一个单独的控制器类,并在两个表单中引用它,这两个表单实现 INotifyPropertyChanged . 在控制器上,具有将更改的事件从窗体传播到窗体的属性。

        3
  •  -1
  •   this. __curious_geek    16 年前

    Form1触发Form2打开。Form2具有重载构造函数,该构造函数将调用表单作为参数,并向Form2成员提供其引用。这就解决了通信问题。例如,我在Form1中将Label属性公开为public,而在Form2中对其进行了修改。

    通过这种方法,你可以用不同的方式进行交流。

    Download Link for Sample Project

    你的表格1

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2(this);
            frm.Show();
        }
    
        public string LabelText
        {
            get { return Lbl.Text; }
            set { Lbl.Text = value; }
        }
    }
    

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        private Form1 mainForm = null;
        public Form2(Form callingForm)
        {
            mainForm = callingForm as Form1; 
            InitializeComponent();
        }
    
        private void Form2_Load(object sender, EventArgs e)
        {
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            this.mainForm.LabelText = txtMessage.Text;
        }
    }
    

    alt text http://ruchitsurati.net/files/frm1.png

    alt text http://ruchitsurati.net/files/frm2.png