积极答复者
窗口间控件的相互操作

问题
-
(窗口2有一个串口控件)“”控制按钮“”第一次按下,打开窗口2,在发送区写入相关内容,第二次按下按钮,就发送去的内容(通过串口)送到第一个窗口的接收区。自己写的没有错误提示,但是运行也不成功。
form1-----------------------------------------------
using oprate_serialport; 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 oprate_serialport { public partial class Form1 : Form { public delegate void newdeleeventhandle(object sender, EventArgs e); public event newdeleeventhandle newevent; public Form1() { InitializeComponent(); // newevent += newform2.uartset; // newevent += newform2.onuart; } public void onnewevent(object sender, EventArgs e) { if (newevent != null) newevent(this, e); } int num = 0; private void sport_oprate_Click(object sender, EventArgs e) { Form2 newform2 = new Form2(); num++; if (num == 1) { newform2.Show(); } else { if (num==2) { newform2.onuart (0,null);//不传输内容 num = 1; } } } } }
form2---------------------------------------
using System;
using System.Windows.Forms;
using System.IO.Ports;
namespace oprate_serialport
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
first_port.PortName = "COM1";
first_port.BaudRate = 9600;
first_port.DataBits = 8;
first_port.StopBits = StopBits.One;
first_port.Parity = Parity.None;
}
public void onuart(object sender, EventArgs e )
{
Form1 newform1 = new Form1();
first_port.Open();
first_port.WriteLine(senddata.Text);
string data2 =(first_port.ReadLine( ));
newform1.receivedata.Text =(data2);
first_port.Close();
}
}
}
- 已移动 ThankfulHeartModerator 2016年9月23日 10:23
答案
-
1 窗体部分操作错误,这样写每次都是new一个Form2
private void sport_oprate_Click(object sender, EventArgs e)
{
Form2 newform2 = new Form2();
应该是
Form2 newform2 ;
private void sport_oprate_Click(object sender, EventArgs e)
{
if(newform2 ==null||newform2.IsDisposed)newform2 = new Form2();
2 form2传回form1部分也写错了
public void onuart(object sender, EventArgs e )
{
Form1 newform1 = new Form1();这样写,总是创建一个新的form1,而不是正在打开的form1。
可以将form1公开一个变量,
public string Test
{
get { return receivedata.Text ;}
set { receivedata.Text =value;}
}
这样,要创建form2时,将当前form1传进去即可
newform2 = new Form2(); 这一句改成 newform2 = new Form2(this);
则相应的form2的构造方法要修改下
Form1 newform1;
public Form2(Form form1)
{
InitializeComponent();
this.newform1=form1;
}
最后修改这里的
public void onuart(object sender, EventArgs e )
{
// Form1 newform1 = new Form1();
first_port.Open();
first_port.WriteLine(senddata.Text);
string data2 =(first_port.ReadLine( ));
newform1.Test=(data2);
first_port.Close();
}专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 已标记为答案 malei1988 2016年9月23日 10:46
全部回复
-
一些问题要问你:
1)你Form2的按钮呢?发送按钮?
2)为什么Form2中还要产生一个新的Form1?这样你每次都产生一个新的Form1,每次都不是同一个Form1。
3)另外你的串口我没有涉及做过,不清楚原理;但是我想知道的是:如果你想Form1和Form2交互,应该在创建一个Form2的时候,把Form1传入。或者Form2公开监听事件,让Form1监听啊。
ASP.NET Forum
StackOverFlow
FreeRice Donate
Issues to report
Free Tech Books Search and Download -
1 窗体部分操作错误,这样写每次都是new一个Form2
private void sport_oprate_Click(object sender, EventArgs e)
{
Form2 newform2 = new Form2();
应该是
Form2 newform2 ;
private void sport_oprate_Click(object sender, EventArgs e)
{
if(newform2 ==null||newform2.IsDisposed)newform2 = new Form2();
2 form2传回form1部分也写错了
public void onuart(object sender, EventArgs e )
{
Form1 newform1 = new Form1();这样写,总是创建一个新的form1,而不是正在打开的form1。
可以将form1公开一个变量,
public string Test
{
get { return receivedata.Text ;}
set { receivedata.Text =value;}
}
这样,要创建form2时,将当前form1传进去即可
newform2 = new Form2(); 这一句改成 newform2 = new Form2(this);
则相应的form2的构造方法要修改下
Form1 newform1;
public Form2(Form form1)
{
InitializeComponent();
this.newform1=form1;
}
最后修改这里的
public void onuart(object sender, EventArgs e )
{
// Form1 newform1 = new Form1();
first_port.Open();
first_port.WriteLine(senddata.Text);
string data2 =(first_port.ReadLine( ));
newform1.Test=(data2);
first_port.Close();
}专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
- 已标记为答案 malei1988 2016年9月23日 10:46