C#的新人很好......
我正在尝试使用以下代码将一些文本发送到表单文本框:
SettingsForm.cs
namespace BluMote
{
public partial class SettingsForm : Form
{
public void send2Display(string whatWasSent)
{
this.rtbDisplay.Text = whatWasSent;
}
private void cmdOpen_Click(object sender, EventArgs e)
{
commToy.Parity = "None";
commToy.StopBits = "One";
commToy.DataBits = "8";
commToy.BaudRate = "115000";
commToy.PortName = "COM4";
commToy.OpenPort();
}
.........
}
}
我正在尝试从另一个类中调用它:
namespace PCComm
{
class CommunicationManager
{
#region OpenPort
public bool OpenPort()
{
try
{
if (comPort.IsOpen == true) comPort.Close();
comPort.BaudRate = int.Parse(_baudRate);
comPort.DataBits = int.Parse(_dataBits);
comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), _stopBits);
comPort.Parity = (Parity)Enum.Parse(typeof(Parity), _parity);
comPort.PortName = _portName;
comPort.Open();
PCComm.frmMain form = new PCComm.frmMain();
form.send2Display("test");
return true;
}
catch (Exception ex)
{
DisplayData(MessageType.Error, ex.Message);
return false;
}
}
#endregion
}
}
“测试”不会显示在文本框字段中
但正如你所看到的,它不起作用......我缺少什么?
大卫
答案 0 :(得分:4)
send2Display是一种方法,您需要使用参数调用它,而不是赋值给它。
BluMote.SettingsForm form = new BluMote.SettingsForm();
form.send2Display("test");
编辑:
如果从SettingsForm
类内部调用该方法,则无需创建新实例。尝试:
this.send2Display("test");
编辑基于更新的问题:
问题是您在OpenPort()中创建的表单不是屏幕上显示的表单,因此对文本框的任何更新都不会显示在屏幕上。以下是一些快速而肮脏的方法来解决这个问题:
答案 1 :(得分:3)
您必须有一个表单对象的实例来执行此操作,如下所示:
BluMote.SettingsForm form = new BluMote.SettingsForm();
form.Show()
form.send2Display("test");
答案 2 :(得分:3)
BluMote.SettingsForm.send2display = "test";
应该是:
BluMote.SettingsForm form = new BluMote.SettingsForm();
form.Show();
form.send2Display("test");
但这会创建一个新实例,可能不是你想要的。您想要更改当前显示的表单上的文本,因此您需要将方法需要执行的实例传递给OpenPort方法:
namespace PCComm
{
class CommunicationManager
{
#region OpenPort
public bool OpenPort(BluMote.SettingsForm form)
{
try
{
if (comPort.IsOpen == true) comPort.Close();
comPort.BaudRate = int.Parse(_baudRate);
comPort.DataBits = int.Parse(_dataBits);
comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), _stopBits);
comPort.Parity = (Parity)Enum.Parse(typeof(Parity), _parity);
comPort.PortName = _portName;
comPort.Open();
//PCComm.frmMain form = new PCComm.frmMain();
form.send2Display("test");
return true;
}
catch (Exception ex)
{
DisplayData(MessageType.Error, ex.Message);
return false;
}
}
#endregion
}
}
然后,在Form1中的某个地方(如加载事件),您将要实例化依赖于它的类。
CommunicationManager comm = new CommunicationManager();
comm.OpenPort(this);
答案 3 :(得分:1)
您的代码中存在一些问题。
调用类似属性的方法。
BluMote.SettingsForm.send2display =“test”; //这是错误的
尝试从其他类访问SettingsForm类成员,例如访问静态成员。
首先,您必须将SettingsForm实例解析为“其他类”。
//In Other Class
private SettingsForm settingsForm;
// Get the instance as a parameter in Constructor (this is one of options)
public OtherClass(SettingsForm instanceOfSettingsForm)
{
settingsForm = instanceOfSettingsForm;
}
//Now you can call send2Display method from OtherClass
settingsForm.send2Display("Test");
答案 4 :(得分:0)
您可以更改以下代码并查看其是否有效:
public void send2Display(string whatWasSent)
{
this.rtbDisplay.Text = whatWasSent;
this.rtbDisplay.refresh();
}