Form1中可以点按钮打开并传值给Form2,Form2中处理后关闭窗体又将结果回传给Form1该如何实现呢?
另外一个问题,一个登录窗体,登录后主窗体弹出,但是登录窗体不能关闭。原因在于登录窗体是程序的入口,一但关闭应用程序也随之关闭,需要在登录后关闭登录窗体,该如何实现?
请教高人解答,谢谢!
另外一个问题,一个登录窗体,登录后主窗体弹出,但是登录窗体不能关闭。原因在于登录窗体是程序的入口,一但关闭应用程序也随之关闭,需要在登录后关闭登录窗体,该如何实现?
请教高人解答,谢谢!
解决方案 »
- C# 怎样接收gmail邮箱里的邮件呀 !!!!!!!!急,急,急!!! 在线等
- 请进来看看,一个比较复杂的关于日期的方法,谢谢
- 桌面右下角图标怎么附加有动态的数字?
- 如何在表中添加列
- js调用服务器端代码参数传递问题?
- 如何用picturebox显示网络上其他计算机的共享图片?
- datagrid有没有属性设置,可以将为负数的值,显示为红色.当然哪一行哪一列的值为负数,事先并不知道
- 关于 无法绑定到新的显示成员
- 刚学C#,请教一个基础问题
- 请大家给初学者一些建议....
- (敬请高手不吝赐教)C# 如何获取Access数据库中的表名及其字段名?
- 如何实现这样的窗体效果:在屏幕边缘自动吸附或隐藏(收起)
this.close(); //登陆窗体关闭
----------
这里所说的结果是什么样的结果?是指DialogResult么?
那样就简单了
Form2 form2 = new form2()if(form2.ShowDialog()==DialogResult.OK)
{}
NewForm.open() //主窗体弹出
this.close(); //登陆窗体关闭
结果应用程序也关闭了,因为登录窗体是程序的入口,但又需要第一个弹出
CON-如何在子窗体(被调用者)中实现对其父窗体(调用者)的刷新呢?
网络上有几种方法,先总结如下:
调用窗体(父):Form1,被调用窗体(子):Form2
方法1: 所有权法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2 f2 = new Form2() ;
f2.Owner = this;
f2.ShowDialog() ;
//Form2:
//在需要对其调用者(父)刷新时
Form1 f1 ;
f1 = (Form1)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
Form2 f2 = new Form2() ;
f2.ShowDialog(this) ;
//Form2:
private Form1 p_f1;
public Form2(Form1 f1)
{
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.P_F1 = this;
f2.Show() ;//Form2:
private Form1 p_f1;
public Form1 P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//声明一个委托
public delegate void DisplayUpdate();
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//Form2:
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();
在Form1中
Form2 form2 = new form2()
this.Hide();
if(form2.ShowDialog()==DialogResult.OK)
{
//处理内容
}
this.Dispose();//关闭Form1
方法2:
如果Form1不需要处理Form2的内容还可以把Form1传递给Form2
修改Form2的构造函数,取得Form1的实例。
Form1 form1 = null;Form2(Form1 f)
{
form1 = f;
}
在Form2.Dispose()中,
{
if(form1!=null)
{
form1.Close();
}
}
{
Application.run( new mainInterface() );
}
Form2里添加一个事件,例如: //添加一个事件
Public delegate void OkEventHandler(object sender,EventArgs e );
Public event OkEventHandler Ok;//触发事件(在你Form2要关闭时出发的事件 如:点击关闭铵钮时)
private void Close_Click(object sender,EventArgs e )
{
if ( Ok != null )
Ok("你要回传的参数",null);
this.close();
}
Form1: Form2 form2 = new Form2();
//订阅Form2的事件,指定事件处理函数,例如:以下的process
form2.Ok += new OkEventHandler(process);//Ok事件处理函数.当关闭Form2时接收回传的参数
private void process(object sender,EventArgs e )
{
string xx = (string)sender;
MessageBox.Show( xx );
}
你不就是想“主窗体上放一个datagrid,还有个添加按钮,点添加后出现弹出添加窗体,输入值后将输入的值动态的在主窗体的datagrid中显示”吗?
没有必要想得那么复杂,你原来怎么在主窗体显示datagrid的,就在主窗体的Activated事件再做一遍,当然最好把它写成一个函数,而且重新填充dataset,以方便调用。
你想,按照你的想法,你关闭添加窗体之后,主窗体马上就回到激活状态,你加载的一定是最新的数据。
http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
窗体的参数传递
http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5
Form1中可以点按钮打开并传值给Form2,Form2中处理后关闭窗体又将结果回传给Form1该如何实现呢?参见:http://community.csdn.net/Expert/topic/5189/5189957.xml?temp=.7467462
子窗体 frmPath = new 子窗体(textBox3);
frmPath.ShowDialog();在子窗体中
private TextBox tb;
public 子窗体(TextBox t)这是子窗体构造函数
{
InitializeComponent();
textBox1.Text = t.Text;
tb = t;
}
private void button1_Click(object sender, EventArgs e)
{
tb.Text = textBox1.Text;
this.Close();
}这样就可以把子窗体的数据传到父窗体中
static void Main() {
Form1 f = new Form1();
f.ShowDialog();
if(Form1.Can == true) Can 为第一个窗体的静态的布尔变量,在第一个窗体判断成功后把Can 设为true
{
Application.Run(new mainForm());mainForm为第二个窗体名
}
}
public static string str;from1内代码:
button_click(....)
str=textbox1.text;
from2 f2=new from2();
from.show();
this.hide();
from2内代码:
from1 f1=new from1();
label1.text=f1.str;
将from1中textbox1中的值传给from2中的label1.
在Form2中放一个属性
public string DatagrId
{
get;
set;
}
然后在Form1中 Show() Form2的时候给 DatagrId 赋值 然后关闭 Form2 在Form1 中就得到 DatagrId 了!然后在数据库中根据 DatagrId 查找内容 -> 填充 -> 然后 刷新自己 ->OK