各位大神们,求助求助!窗口间传递数据!!

studentxxx 2016-05-21 01:57:17
本人只学习过C语言,对.NET几乎小白。自己看了些资料做了个软件,是毕业设计!现在需要在两个窗口间传递数据,查看了好多资料看的我云里雾里,没办法,实在是不懂!

希望从Form1中将数组传递到Form2中去,我把(自己认为的)一些没必要的代码我就删去了,免得大家看的麻烦!
就是将Form1最下面申请的buf内存地址传递给Form2中最下面的 huidu数组,只要告诉我怎么写代码就可以了,顺便说出方法就更好了,谢谢!
对了,Form1和Form2不是MDI父子关系,因为设成MDI父子关系,Form1中的pictureBox就把Form2挡住了!


PS:我是小白,如果下面删掉了某些需要知道的代码,跟我说,我再贴上,灰常感谢!

Form1代码如下:
//Form1.h
#pragma once
#include <math.h>
#include "Form2.h"

namespace picture {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Form1 摘要
/// </summary>

public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: 在此处添加构造函数代码
//
}
protected:
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}

protected:
中间代码省略!
中间代码省略!
中间代码省略!
private: System::Void 灰度直方图ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {

int *buf = new int[256]; //申请内存
for(i=0; i<256; i++)
buf[i]=0;

Form2^ form2 = gcnew Form2();
form2 -> ShowDialog(); //显示Form2
}
};
}



Form2代码如下:
//Form2.h
#pragma once
namespace picture {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Drawing::Drawing2D;

/// <summary>
/// Form2 摘要
/// </summary>
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(void)
{
InitializeComponent();
//
//TODO: 在此处添加构造函数代码
//
}

protected:
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
~Form2()
{
if (components)
{
delete components;
}
}

private:
/// <summary>
/// 必需的设计器变量。
/// </summary>
System::ComponentModel::Container ^components;
中间代码省略!
中间代码省略!
中间代码省略!

private: System::Void Form2_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

array<int>^ huidu = gcnew array<int> (256){ 0 };

/**** 此处将Form1最下面申请的buf内存给huidu数组****/

DrawHuidu(e->Graphics, huidu); // 绘制灰度分布图
}
};
}

PS:我是小白,如果下面删掉了某些需要知道的代码,跟我说,我再贴上,灰常感谢!

不知道你们需不需要解决方案资源管理器,现在把图贴上,如下:


发帖时的被邀请人是系统推荐的,所以不要怪我邀请了你们,如有打扰多多见谅,谢谢。。。。
...全文
2329 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
studentxxx 2018-11-01
  • 打赏
  • 举报
回复
引用 1 楼 sdhexu 的回复:
办法有很多哦。。 如果是同一个进程的两个窗口之间互通数据,可以直接SendMessage 如果数据量很小,可以直接发送,如果数据量比较大,可以自定义一个结构,发送指针过去。 如果是跨进程的两个窗口之间通信,那就稍微麻烦点,因为获取对方窗口的句柄就挺麻烦的,可以用内核对象共享数据。然后就是发送了,如果发送的数据长度小于sizeof( LPARAM ),直接发送即可,如果数据比较大,不能简单的发送结构地址,因为不同进程拥有私有的4G空间,地址发过去是没用的,需要用内核对象共享数据,或者使用AllocEx在目标进程申请内存地址,或者用DLL共享数据......
感谢回答,已经毕业两三年了…
真相重于对错 2017-02-28
  • 打赏
  • 举报
回复
两个窗口可以互相传数据,也比较简单,只要你能保证找到对方窗口的实例
Poopaye 2017-02-18
  • 打赏
  • 举报
回复
int *buf = new int[256]; //申请内存
Form2^ form2 = gcnew Form2(buf);
直接传就行了,没人规定构造函数不能有参数的
yssy20 2017-02-18
  • 打赏
  • 举报
回复
记得以前VC6.0是通过两个窗口的句柄(指针)来实现数据交互的。
大鱼> 2017-02-18
  • 打赏
  • 举报
回复
两个窗口之间传值有很多方式的,使用事件等等 你也可以参考一下这种方式:http://blog.csdn.net/qq_17486399/article/details/50727986
示申○言舌 2016-08-25
  • 打赏
  • 举报
回复
办法有很多哦。。 如果是同一个进程的两个窗口之间互通数据,可以直接SendMessage 如果数据量很小,可以直接发送,如果数据量比较大,可以自定义一个结构,发送指针过去。 如果是跨进程的两个窗口之间通信,那就稍微麻烦点,因为获取对方窗口的句柄就挺麻烦的,可以用内核对象共享数据。然后就是发送了,如果发送的数据长度小于sizeof( LPARAM ),直接发送即可,如果数据比较大,不能简单的发送结构地址,因为不同进程拥有私有的4G空间,地址发过去是没用的,需要用内核对象共享数据,或者使用AllocEx在目标进程申请内存地址,或者用DLL共享数据......

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧