是的,所以我有一个名为“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; }
}
}
}
答案 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");
}
}
}