WinFrom中传值,窗体隐藏显示

Nick黄 2010-09-07 04:41:41
问题是这样的:项目中有个查询数据的功能,查询条件跟查询结果不在一个窗体
先显示查询结果窗体,点查询,出来查询条件窗体,输入查询条件,点查询,窗体关闭或隐藏
显示查询结果
最终把这个功能加到项目里

我的思路是这样的,初始化显示查询结果,点查询,查询结果页面隐藏,实例化一个查询条件窗体Show(),
输入查询条件,点查询,本窗体隐藏,实例化一个查询结果窗体(param),把条件作为参数传过去

这样就显示了

现在问题有了,在添加到项目中,由于窗体是隐藏,而无法多次使用此功能

第一次还能显示查询结果窗体,由于查询结果窗体隐藏了,第二次使用的时候,根本看不见,也就没办法进行下一步操作

不知道我这样说你们能不能明白;
我想知道有没有解决方法,或者别的思路,小弟感激不尽!
...全文
447 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nick黄 2010-09-08
  • 打赏
  • 举报
回复
谢谢大家、一早上都给我来了个惊喜
qlg270 2010-09-07
  • 打赏
  • 举报
回复
顶 学习了 谢谢分享
wuyq11 2010-09-07
  • 打赏
  • 举报
回复
不需要隐藏,直接弹出窗体,通过委托实现数据传递和更新
子窗体public event EventHandler OnSomeEvent;
子窗体if (OnSomeEvent!=null) OnSomeEvent(this, null);
父窗口里弹出子窗体
FormSub f=new FormSub();
f.OnSomeEvent+=new EventHandler(OnSomeEvent);
f.ShowDialog(this)

private void OnSomeEvent(object sender, EventArgs e)
{
//更新DataGridView或把所需的参数通过e传过来使用。
}
捷哥1999 2010-09-07
  • 打赏
  • 举报
回复
我给出的是简化的例子,但是思路应该是那样处理的。
捷哥1999 2010-09-07
  • 打赏
  • 举报
回复
这个不难的,以下仅供参考。

考虑在Form中用DataGridView做数据展现的情景,你可以在Form中添加一个按钮,这个按钮去弹出一个搜索条件的选择框,然后将这个选择的内容,返回给主窗体,主窗体进行数据的更新?

在条件选择窗口中,定义一个事件,在选好条件后,触发事件,关闭自己,然后主窗口监听这个事件,得到条件,进行查找处理:

条件选择窗体的定义,主要是要增加一个事件,给主窗体知道选择条件已经结束了,让主窗体得到选择好的条件,可以用字符串定义,主窗体中去解析!

public partial class frmCondition : Form
{
public delegate void dlgOnSelect(string condition);
public event dlgOnSelect OnSelect;

public frmCondition()
{
InitializeComponent();
}

private void btnOk_Click(object sender, EventArgs e)
{
OnSelect("codition1=1;condition2=2;conditon3=3");
this.Close();
}
}


主窗体去显示出条件选择窗体,然后监听它的事件:
    public partial class frmMainSearch : Form
{
public frmMainSearch()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
frmCondition frmCdt = new frmCondition();
frmCdt.OnSelect += new frmCondition.dlgOnSelect(frmCdt_OnSelect);
frmCdt.ShowDialog();
}

private void frmCdt_OnSelect(string condition)
{
MessageBox.Show("选择的条件是:"+condition );
}
}


纯唇Yu弄 2010-09-07
  • 打赏
  • 举报
回复

//Form1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestShow
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Form1(string str)
{
InitializeComponent();
this.label1.Text = str;
}
private void button2_Click(object sender, EventArgs e)
{
Form2 fr2 = new Form2();
fr2.Show();
this.Visible = false;
}
//=========================
//Form2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestShow
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
Form1 fr1 = new Form1(textBox1.Text);
fr1.Show();
this.Visible = false;
}
}
}


form1相当于你的显示页面,里边暂时用label模拟显示结果,button2 为查询按钮
form2相当于你的查询条件也,里边一个button一个textbox,textbox模拟查询条件,button为查询按钮
你试试吧
Nick黄 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bing0804 的回复:]
主窗体按钮事件:

C# code
//条件选择
private void btn_search_Click(object sender, EventArgs e)
{
frmCondition frm = new frmCondition();

/*这里不用设置窗体为隐藏,你打开的是模式窗体,在查询窗体“确定”按钮事件中赋……
[/Quote]
this.btn_analyze.Enabled = true;
这个是那个窗体上的?
作用?
谢谢
Nick黄 2010-09-07
  • 打赏
  • 举报
回复
能不能这样?
初始化一个查询结果窗体,点查询,实例化一个查询条件窗体
输入查询条件,点确定,查询条件返回原来的查询结果窗体,而不再实例化查询结果窗体

???

如果谁知道,请说明传参方法!
Nick黄 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bing0804 的回复:]
主窗体按钮事件:

C# code
//条件选择
private void btn_search_Click(object sender, EventArgs e)
{
frmCondition frm = new frmCondition();

/*这里不用设置窗体为隐藏,你打开的是模式窗体,在查询窗体“确定”按钮事件中赋……
[/Quote]
我试试,谢谢!
bing0804 2010-09-07
  • 打赏
  • 举报
回复
主窗体按钮事件:
//条件选择
private void btn_search_Click(object sender, EventArgs e)
{
frmCondition frm = new frmCondition();

/*这里不用设置窗体为隐藏,你打开的是模式窗体,在查询窗体“确定”按钮事件中赋值:
this.DialogResult = DialogResult.OK;
这样查询窗体自动会关闭
在查询窗体中定义一个全局属性 ConditionShow ,这样在查询窗体关闭后可以去取值
*/
if (frm.ShowDialog() == DialogResult.OK)
{
this.txt_deptname.Text = frm.ConditionShow;

this.btn_analyze.Enabled = true;
}
}
Nick黄 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sprc_lcl 的回复:]
C# code
Form1 结果窗
Form2 查询窗

Form1.cs:

private Form2 f2 = new Form2();
Button1_Click(..)
{
this.Hide();
f2.ShowDialog();
string searchStr = f2.SearchStr;
//...查询
this.Show();
}

Form……
[/Quote]
不明白!
Nick黄 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 boycelin 的回复:]
方法有很多可以Google一下 一般我都用事件进行传值

至于你说的方法 没有看明白 窗体隐藏是哪个窗体隐藏了?
[/Quote]
两个窗体,用到那个实例化那个,另一个就隐藏
Nick黄 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jayinit 的回复:]
查询条件窗口和查询结果窗口分别加个按钮用于互相跳转窗体!
[/Quote]
两个窗体上的查询就是用来互跳的
NewUser2008 2010-09-07
  • 打赏
  • 举报
回复
Event
sprc_lcl 2010-09-07
  • 打赏
  • 举报
回复
Form1 结果窗
Form2 查询窗

Form1.cs:

private Form2 f2 = new Form2();
Button1_Click(..)
{
this.Hide();
f2.ShowDialog();
string searchStr = f2.SearchStr;
//...查询
this.Show();
}

Form2.cs:
public string SearchStr="";
Button1_Click(..)
{
//SearchStr="...";
this.Close();
}
hefuming5 2010-09-07
  • 打赏
  • 举报
回复
用2个容器不行吗?
吧他们分别装在不同的容器里 隐藏容器就行了
hefuming5 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 boycelin 的回复:]
方法有很多可以Google一下 一般我都用事件进行传值

至于你说的方法 没有看明白 窗体隐藏是哪个窗体隐藏了?
[/Quote]
up~~
BoyceLyu 2010-09-07
  • 打赏
  • 举报
回复
方法有很多可以Google一下 一般我都用事件进行传值

至于你说的方法 没有看明白 窗体隐藏是哪个窗体隐藏了?
  • 打赏
  • 举报
回复
查询条件窗口和查询结果窗口分别加个按钮用于互相跳转窗体!

110,579

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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