子窗体中实例化一个父窗体的累,比如你的父窗体name叫做form1
1、你可以在子窗体中调用的时候实例化父窗体:
form1
for1=new
form1();
2、然后你让你的父窗体中的label的modifiers属性设置为public,如下图中位置。
此时你就可以在子窗体中调用父窗体的label控件了。
3、比如你的父窗体中的label名字叫做label1,你想让父窗体中label1的text等于子窗体的label1的text,你在子窗体调用的时候就可以这样写:for1label1text=thislable1text;
不详细的地方可以加追问,很乐意和你交流。
望采纳,谢谢。
在js中,我们时常用到用iframe做系统框架,在子页面也,父页面之间的值传递是一个问题,下面是js获取父窗体和子窗体的对象js:
1在iframe子页面中获取父页面的元素:
a>windowparentdocument这个是获取父页面document中的对象;
b>如果要获取父页面js中的方法:windowparentxxxx();xxxx()为方法;
2在父页面中获取iframe子页面中的元素:
a>
var child =
documentgetElementByIdx_x("mainFrame")contentWindow;//mainFrame这个id是父页面iframe的id
childdocument;//获取子页面中的document对象;
1 最常见的就是用超连接或者是ResponseRedirect方法从一个页面转到另一个页面,这时候你在新页面中要获取父页面中的值时,必须是从URL中传值过来,也就是说使用Get方法传值的。这样传值有以下缺点:
a)所传值必须跟在URL后面,这样的数据不安全。
b)由于URL的长度有限,所以传的值也是有限的。
所以要想传递大量的数据,就必须用post来传值。因此我们想到了第二种传值的方式:
2 用Servertransfer(URL) 来实现页面的跳转。
Servertransfer()
与ResponseRedirect最大的不同就是,ResponseRedirect实际上就像在地址栏里面重新输入了要跳转页面的地址,所以他是
不保存之前页面的信息的。但是Servertransfer()完全不同,Servertransfer()就是像是在服务器端重新显示你要转到的页
面,但此前页面的信息都还保存在服务器。因此在新的页面上你仍可以得到之前页面的值。在net中可以使用PreviousPage来得到之前页面的
Page对象。这样有了Page对象你就方便的可以得到该页面上的任何值了。比如:我要找之前页面上的ID=TextBox1的值,语句为:
((TextBox)PreviousPageFindControl("TextBox1"))Text
但是上面的两种方式都是转到,之前的页面就不显示了。有的时候还有打开子窗口但是父窗口仍然存在的情况,就像我在讲__postBack()方法中的那样,子窗口是在父窗口中d出来的。
让子窗口从父窗口中d出,很容易让人想到的是用JAVAScript方法。
打开一个窗口的JAVAScript方法有两种:windowopen(); windowshowdialog()
如果在使用这两种方法打开的子窗口中获取父窗口的值,当然也有两种把值跟在URL之后传过来和直接获取父窗口的对象来取值。
对于第一种方法取值,很简单。直接使用QueryString就可以取到了。但是如上面所说这种Get传值的方式有缺点。
下面我们分别来讨论下两种方法分别通过获取父页面对象来取值得方法。
1
使用windowopen(url)来打开一个子窗口,在子窗口中获取父窗口的对象其实很简单,直接使用windowopener就可以得到父窗口的
对象,我们也是用这个方法在子窗口中调用父窗口的__postBack()方法的。比如我要获得父窗口中ID=“TextBox1”的textbox的
值。代码如下:
<script language="javascript">
var text = windowopenerdocumentgetElementById("TextBox1")value;
alert(text);
</script>
2使用windowshowModalDialog()方法来d出一个子窗口时,若想得到父窗口中的值,仍
旧使用windowopener是得不到父窗口对象的。这里我们就要在showModalDialog()方法中传入window参数。然后在子窗口中
得到这个代表父窗口的window,这样就可以随便 *** 作父窗口中的值了。
脚本如下:
在父窗口中,假如我们是在服务器控件中调用javascript代码的,你可以这样写:
PageClientScriptRegisterStartupScript(thisGetType(), "test", "windowshowModalDialog('Default4aspx',window)", true);
Default4aspx
就是子窗口的页面。这里要注意不能使用PageClientScriptRegisterClientScriptBlock()因为Block方法
会把该script脚本写在所有控件的前面,这样在页面被加载时,TextBox1控件还没有被加载,子窗口就打开了,所以在子窗口时取不到任何控件的值
的。而RegisterStartupScript()方法正好相反,他是把对应Script脚本写在所有控件的后面,所以子窗口能够得到父窗口的任何控
件的值。
如果你是在客户端写的JavaScript脚本,那就更简单了
<script language="javascript">
function popwindow()
{
windowshowModalDialog('Default4aspx',window);
}
</script>
在子窗口中可写入如下脚本:
<script language="javascript">
var vwin = windowdialogArguments; //得到window参数
var doc = vwindocumentgetElementById("TextBox1")value; //获得TextBox的值
alert(doc);
</script>
1 在主窗口(假设名字为FormMain)
public partial class FormMain : Form{
public FormMain()
{
InitializeComponent();
}
// 获取/设置菜单项 toolStripMenuItem1Enabled
public bool MenuItemEnabled
{
get { return thistoolStripMenuItem1Enabled; }
set { thistoolStripMenuItem1Enabled = value; }
}
private void button1_Click(object sender, EventArgs e)
{
//实例化子窗体
FormChild f = new FormChild(this);
//显示子窗体
fShowDialog(this);
}
}
2 在子窗体中(假设名字为FormChild)
public partial class FormChild : Form{
//主窗体实例引用
FormMain formMain;
public FormChild()
{
InitializeComponent();
}
//重载构造函数,传入主窗体实例
public FormChild(FormMain formMain)
: this()
{
thisformMain = formMain;
}
private void button1_Click(object sender, EventArgs e)
{
//点击按钮后,设置主窗口的菜单项的 Enabled = false
formMainMenuItemEnabled = false;
}
}
看看这人的问题和你一样:>
这个获取参数的方法有多种,比如:url 传值(ahtmlid=1),
窗体传值:
ahtml:
function doopen(){
//打开一个子窗体
var aa = windowshowModalDialog("bhtml","可以传到子窗口的一个值","dialogHeight=200px;dialogWidth=300px");
//接收子窗体传过来的值
documentgetElementById('temp')value = aa;
}
bhtml:
//获取父窗体传过来的值
var aa = windowdialogArguments;
alert(aa);
function doClose(obj){
//返回值给父窗体
windowreturnValue = objinnerHTML;
//关闭本窗体
windowclose();
或者,把值写到文档中。。。不考虑其他的,传值的方法有很多种
以上就是关于C#子窗口调用父窗口的控件全部的内容,包括:C#子窗口调用父窗口的控件、JS如何获取对象的父对象(非文档对象)、.net的WEB窗体中子页面有哪些方法可以获取和设置父页面的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)