如何从表单更改用户控件label.text

时间:2013-06-26 14:55:12

标签: c# .net mono

是的,所以我有一个名为“ModbusMaster”的用户控件和一个只有一个按钮的表单..

当我点击按钮时,我想更改控件上标签的文字..

然而没有任何事情发生..

这是主要表格

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ModbusMaster_2._0
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    ModbusMaster mb = new ModbusMaster();

    public void button1_Click(object sender, EventArgs e)
    {
      mb.openPort("wooooo");
    }
  }
}

我正在调用方法openPort并将字符串“wooo”传递给它..

这是我的控制

文字没有更新:(:( :(

using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace ModbusMaster_2._0
{
  public partial class ModbusMaster : UserControl
  {
    string portName = "COM1"; //default portname
    int timeOut = 300;        //default timeout for response

    SerialPort sp = new SerialPort();

    public ModbusMaster()
    {
      InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
      portLabel.Text = portName;
    }

    public void openPort(string port)
    {
      statusLabel.Text = port;
    }

/*
 *  Properties 
*/
    public string SerialPort //Set portname
    {
      get { return portName; }
      set { portName = value;}
    }
    public int TimeOut //Set response timeout
    {
      get { return timeOut; }
      set { timeOut = value; }
    }
  }
}

2 个答案:

答案 0 :(得分:2)

我认为你必须有两个ModbusMaster的实例。

其中一个是您可以在显示屏上看到的,并且没有更新。

另一个是您在class Form1中使用代码行创建的那个:

ModbusMaster mb = new ModbusMaster();

这是你正在修改的那个,但它不是显示的那个(我看不到你可以显示的任何地方)。

当您致电mb.openPort("wooooo");时,您需要做的是使用对实际显示的参考

[编辑]

考虑一下 - 你可能根本没有实例化另一个用户控件。

您是否使用Visual Studio的表单设计器将用户控件添加到主表单?我原以为你做了,但现在我意识到可能不是这样。

如果没有,您应该这样做,将其命名为mb并删除显示ModbusMaster mb = new ModbusMaster();的行,并且无需您进行更广泛的更改即可。

答案 1 :(得分:1)

您正在创建UserControl但未将其分配给Form的Control Collection。在构造函数中尝试这样的事情。

namespace ModbusMaster_2._0
{
    public partial class Form1 : Form
    {
        ModbusMaster mb = new ModbusMaster();

        public Form1()
        {
            InitializeComponent();
            this.Controls.Add(mb); //Add your usercontrol to your forms control collection
        }

        public void button1_Click(object sender, EventArgs e)
        {
            mb.openPort("wooooo");
        }
    }
}