C#如何跨窗体调用控件
有两个窗体,FORM1和FORM2。启动时,FORM1的load事件中用,form2.show使用FORM2显示出来。点击FORM2中的button后,Form1中的la...
有两个窗体,FORM1和FORM2。启动时,FORM1的load事件中用,form2.show使用FORM2显示出来。点击FORM2中的button后,Form1中的label1的text改变。
要怎么实现,好像要用委托。忘掉了
四楼的不行,不知你试过没有。这种跨窗体调用控件不像调用方法那样简单。这种直接调用是不安全的,要用委托,和被调用控件的invoke方法。以前用过(问别人的),现在忘掉了。 大哥,大姐们啊,自己先试试行不行。五楼的也不行,早就试过了。 展开
要怎么实现,好像要用委托。忘掉了
四楼的不行,不知你试过没有。这种跨窗体调用控件不像调用方法那样简单。这种直接调用是不安全的,要用委托,和被调用控件的invoke方法。以前用过(问别人的),现在忘掉了。 大哥,大姐们啊,自己先试试行不行。五楼的也不行,早就试过了。 展开
6个回答
展开全部
用事件回调,看一点我的代码
在Form1里面写一个方法,用来修改label
在Form2里面写:
public delegate void SetMainFormTopMostHandle(bool topmost);
public event SetMainFormTopMostHandle SetMainFormTopMost;
声明一个委托和事件
然后在f2.Show()打开f2之前,加一句:
Form2 f2 = new Form2 ();
f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(MainForm_SetMainFormTopMost);
f2.Show();
这里面MainForm_SetMainFormTopMost就是你用来修改label的方法(回调函数)
SetMainFormTopMostHandle、SetMainFormTopMost你自己写名字
大致就是为f2创建一个用来修改label的事件,然后把修改label的方法绑定到这个事件上,启动f2,在f2中执行这个事件,就是SetMainFormTopMost(true)这样写 (参数要和委托的那个声明一致)
那么就会调用F1中绑定的那个方法
f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(MainForm_SetMainFormTopMost);
这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数
在Form1里面写一个方法,用来修改label
在Form2里面写:
public delegate void SetMainFormTopMostHandle(bool topmost);
public event SetMainFormTopMostHandle SetMainFormTopMost;
声明一个委托和事件
然后在f2.Show()打开f2之前,加一句:
Form2 f2 = new Form2 ();
f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(MainForm_SetMainFormTopMost);
f2.Show();
这里面MainForm_SetMainFormTopMost就是你用来修改label的方法(回调函数)
SetMainFormTopMostHandle、SetMainFormTopMost你自己写名字
大致就是为f2创建一个用来修改label的事件,然后把修改label的方法绑定到这个事件上,启动f2,在f2中执行这个事件,就是SetMainFormTopMost(true)这样写 (参数要和委托的那个声明一致)
那么就会调用F1中绑定的那个方法
f2.SetMainFormTopMost += new Form2.SetMainFormTopMostHandle(MainForm_SetMainFormTopMost);
这句最关键,你输入到+=之后,按两下Tab,他会自动给你生成回调函数
展开全部
空间也可以公开,在属性面板里有modified属性。 但是一般都不这么做。
你可以在form1里写一个public方法,在里面操作label的text,然后form2的button时间里调用。 这个不用委托,委托一般在需要把一个函数当成另一个函数的参数时才用。
form1中
public void setLabel1Text(string textStr)
{
label1.text=textStr;
}
form2的button_Click中
private void butoon_Click(object sender,EventArgs e)
{
form1 f1=new form1();
f1.setLabel1Text("lable1的text值");
}
你可以在form1里写一个public方法,在里面操作label的text,然后form2的button时间里调用。 这个不用委托,委托一般在需要把一个函数当成另一个函数的参数时才用。
form1中
public void setLabel1Text(string textStr)
{
label1.text=textStr;
}
form2的button_Click中
private void butoon_Click(object sender,EventArgs e)
{
form1 f1=new form1();
f1.setLabel1Text("lable1的text值");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先Form1.label1的访问权限设成public
然后Form2中:Form1.label1.Text = "test";
然后Form2中:Form1.label1.Text = "test";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题很经典 , 在c#中 窗体show可以带参数show的,意思在from2 加载的时候可以带参数的,可以将form1 中的空间作为参数,传递给form2 就可以在form2中 随便修改form1的值了。不明白可以在线问我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂啥是委托。
一般调用其他窗体的东东(也不知道咋说)我都是这么干的。
比如在frm1下调用frm2的东东。就是
frm2.**** 星号就是调用东西的名称了。(额,frm1,frm2在同一个目录下哈)
一般不是全局变量都这么传的么
一般调用其他窗体的东东(也不知道咋说)我都是这么干的。
比如在frm1下调用frm2的东东。就是
frm2.**** 星号就是调用东西的名称了。(额,frm1,frm2在同一个目录下哈)
一般不是全局变量都这么传的么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询